好的,所以我已经被困几天的问题是 Tomcat 不运行我的应用程序。这是我第一次接触 Tomcat 和服务器编程,所以这很可能纯粹是我的错。但是几天后我自己无法击败它,所以我决定在这里发布一个问题。
我试过运行很多不同的设置,但现在我是最简单的一个,但仍然无法弄清楚。所以,我已经安装了:Eclipse IDE 1.5.0(Eclipse 平台 4.2.0),WST 3.4.1,Tomcat 7.0.12 通过 Eclipse 安装(也试过 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 添加到代码中,以查看任何证明代码实际上在服务器上运行的消息(最初只有 System.err 和 System.out),我尝试配置控制台输出和文件输出。
同样,服务器本身按预期运行——我可以通过浏览器访问它、打开管理器应用程序、部署/取消部署应用程序等。
所以问题是:我做错了什么?我认为可能存在一些原始错误/未完成的步骤/无论我犯了什么,但在谷歌的帮助下,我在 2 天的战斗中无法弄清楚。
帮助将不胜感激。
更新:非常感谢大家!正如我所怀疑的那样 - 愚蠢的我 :) 不知道为什么我开始使用 Tomcat,但是是的,运行为应用程序工作正常。这些即时答案为我节省了很多时间。再次非常感谢。