不确定,但我认为eclipse不会在tomcat服务器上运行我的应用程序

时间:2012-10-02 12:36:37

标签: java sockets tomcat

好的,我已经被困住了几天的问题是Tomcat没有运行我的应用程序。这是我第一次遇到Tomcat和服务器编程,所以它最有可能纯粹是我的错。但是在几天之内我无法自己打败它,所以我决定在这里发一个问题。

我尝试过运行很多不同的设置,但现在我处于最简单的状态,但仍无法解决。所以,我已经安装了:Eclipse IDE 1.5.0(Eclipse平台4.2.0),WST 3.4.1,通过Eclipse安装的Tomcat 7.0.12(也试过7.0.30)。

我已经在eclipse中配置了tomcat服务器,所以当我运行它时 - 它确实按预期工作。

但是我已经从服务器套接字上的oracle指南获得了这段简单的代码:

import java.net.*;
import java.io.*;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;


public class KnockKnockServer {
    private static final Logger logger = Logger.getRootLogger();

    public static void main(String[] args) throws IOException {
        BasicConfigurator.configure();
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(4444);
            logger.debug("Socket opened");
            System.err.println("Port opened");
        } catch (IOException e) {
            logger.debug("Could not listen on port: 4444.");
            System.err.println("Port not opened");
            System.exit(1);
        }

        Socket clientSocket = null;
        try {
            clientSocket = serverSocket.accept();
            logger.info("socket accepted");
        } catch (IOException e) {
            logger.info("Accept failed.");
            System.exit(1);
        }

        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(
                new InputStreamReader(
                clientSocket.getInputStream()));
        String inputLine, outputLine;
        KnockKnockProtocol kkp = new KnockKnockProtocol();

        outputLine = kkp.processInput(null);
        out.println(outputLine);

        while ((inputLine = in.readLine()) != null) {
             outputLine = kkp.processInput(inputLine);
             out.println(outputLine);
             if (outputLine.equals("Bye."))
                break;
        }
        out.close();
        in.close();
        clientSocket.close();
        serverSocket.close();
    }
}

当我执行“运行方式 - >在服务器上运行”启动时不起作用。我尝试将它添加到WAR和部署,但它产生相同的结果 - 没有。这意味着我可以使用另一个客户端应用程序(来自另一个eclipse实例)连接到它,也不会产生任何显示它可用的消息(只访问tomcat生成的日志)。正如您所看到的,我将log4j添加到代码中以查看任何证明代码在服务器上实际运行RUNS的消息(最初只有System.err和System.out),我尝试为控制台输出和文件输出配置。

再次,服务器本身按预期运行 - 我可以通过浏览器,打开管理器应用程序,部署/取消部署应用程序等访问它。

所以问题是:我做错了什么?我假设可能有一些原始的错误/撤消步骤/我做了什么,但我无法在谷歌的帮助下在2天的战斗中弄明白。

非常感谢帮助。

更新:非常感谢!我怀疑 - 愚蠢的我:)不知道为什么我开始与Tomcat混乱,但是,运行应用程序工作正常。那些即时答案为我节省了很多时间。非常感谢。

4 个答案:

答案 0 :(得分:3)

我认为这里存在误解。 Tomcat是一个servlet容器 - 它旨在运行由servlets组成的Web应用程序。

你的KnockKnockServer是一个普通的Java应用程序,因此在“Tomcat”上运行它绝对没有意义。您应该将其作为独立应用程序运行。

实际上,有时为在Tomcat上运行的Web应用程序内的某些特定协议启动服务器是有意义的。在这种情况下,您需要从ServletContextListener控制自定义服务器的生命周期。但我不认为这是你的情况。

答案 1 :(得分:1)

尝试将其作为Java应用程序运行。不是作为Web应用程序。它似乎不是一个Java Web应用程序

答案 2 :(得分:0)

您尝试使用主类打开套接字。您不应该在服务器上运行您的应用程序,您的应用程序将是服务器本身。点击运行方式>作为应用程序运行。

答案 3 :(得分:0)

Tomcat是一个servlet容器。意味着运行Web应用程序。您正试图在容器中运行java类,这是不可能的。尝试将其作为独立应用程序运行。