Java 不确定,但我认为eclipse不会';t在tomcat服务器上运行我的应用程序
好吧,我已经被困了几天的问题是Tomcat不运行我的应用程序。这是我第一次接触Tomcat和服务器编程,所以很可能纯粹是我的错。但几天后,我自己也无法克服,所以我决定在这里发布一个问题 我试过运行很多不同的设置,但现在我是在最简单的一个,仍然无法找出它。因此,我已经安装了:EclipseIDE1.5.0(EclipsePlatform 4.2.0)、WST3.4.1、Tomcat7.0.12(也尝试了7.0.30) 我已经在eclipse中配置好了tomcat服务器,所以当我运行它时,它确实按照预期工作 然后我得到了一段简单的代码,这段代码来自oracle的服务器套接字指南:Java 不确定,但我认为eclipse不会';t在tomcat服务器上运行我的应用程序,java,sockets,tomcat,Java,Sockets,Tomcat,好吧,我已经被困了几天的问题是Tomcat不运行我的应用程序。这是我第一次接触Tomcat和服务器编程,所以很可能纯粹是我的错。但几天后,我自己也无法克服,所以我决定在这里发布一个问题 我试过运行很多不同的设置,但现在我是在最简单的一个,仍然无法找出它。因此,我已经安装了:EclipseIDE1.5.0(EclipsePlatform 4.2.0)、WST3.4.1、Tomcat7.0.12(也尝试了7.0.30) 我已经在eclipse中配置好了tomcat服务器,所以当我运行它时,它确实按照
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();
}
}
当我启动“运行方式->在服务器上运行”时,它不起作用。我试着把它加入战争和部署,但结果都一样——没有。这意味着niether I可以使用另一个客户端应用程序(来自另一个eclipse实例)连接到它,也不会生成任何显示它工作的消息(仅访问tomcat生成的日志)。正如您所看到的,我向代码中添加了log4j,以查看证明代码实际在服务器上运行的任何消息(最初只有System.err和System.out),我尝试将其配置为控制台输出和文件输出
同样,服务器本身按预期运行—我可以通过浏览器、open manager应用程序、部署/取消部署应用程序等访问它
所以问题是:我做错了什么?我想我可能犯了一些原始的错误/未完成的步骤/任何事情,但在谷歌的帮助下,我无法在两天的战斗中找到答案
非常感谢您的帮助
更新:非常感谢各位!正如我所怀疑的-愚蠢的我:)我不知道为什么我开始和Tomcat搞得一团糟,但是的,运行应用程序很好。那些即时的回答节省了我很多时间。再次非常感谢。您尝试使用主类打开套接字。您不应该在服务器上运行应用程序,应用程序将是服务器本身。单击运行方式>运行方式应用程序。您试图打开一个带有主类的套接字。您不应该在服务器上运行应用程序,应用程序将是服务器本身。单击运行方式>运行方式应用程序。我认为这里存在误解。Tomcat是一个servlet容器——它旨在运行由以下组件组成的web应用程序 您的
KnockKnockServer
是一个常规的Java应用程序,因此“在Tomcat上”运行它毫无意义。您应该将其作为独立应用程序运行
实际上,有时在运行于Tomcat的web应用程序中为某些特定协议启动服务器是有意义的。在这种情况下,您需要从
ServletContextListener
控制定制服务器的生命周期。但我不认为这是你的情况。我认为这里有误解。Tomcat是一个servlet容器——它旨在运行由以下组件组成的web应用程序
您的KnockKnockServer
是一个常规的Java应用程序,因此“在Tomcat上”运行它毫无意义。您应该将其作为独立应用程序运行
实际上,有时在运行于Tomcat的web应用程序中为某些特定协议启动服务器是有意义的。在这种情况下,您需要从
ServletContextListener
控制定制服务器的生命周期。但我不认为这是您的情况。尝试将其作为java应用程序运行。不是作为web应用程序。它似乎不是Java Web应用程序尝试将其作为Java应用程序运行。不是作为web应用程序。它似乎不是一个Java Web应用程序,Tomcat是一个servlet容器。用于运行web应用程序。您正在尝试在容器中运行java类,这是不可能的。尝试将其作为独立应用程序运行。Tomcat是一个servlet容器。用于运行web应用程序。您正在尝试在容器中运行java类,这是不可能的。尝试将其作为独立应用程序运行