Tomcat 工作超时
Tomcat timesout when it's working
首先 - 我对 servlet 和所有其他 Java EE 的东西真的没什么经验。
我正在尝试制作简单的聊天室,但在此之前我只是尝试制作简单的 udp 服务器和客户端。一切正常,除了一件事在 45 秒后 tomcat 超时并关闭。我只有一个调用 UDP 服务器的 contextListener class.
是因为我没有servlet,还是?..
这是我的 UDP 服务器 class:
public UDPServer() {
System.out.println("Constructor reached");
try {
connect();
} catch (Exception e) {
e.printStackTrace();
}
}
public void connect() throws Exception
{
int serverPort = 9123;
System.out.println("Server is starting");
DatagramSocket serverSocket = new DatagramSocket(serverPort);
System.out.println("Server started");
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true)
{
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String( receivePacket.getData());
System.out.println("RECEIVED: " + sentence);
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
receiveData = new byte[1024];
sendData = new byte[1024];
}
}
这是我的简单 contextListener
public class StartupServlet implements ServletContextListener {
// private static Logger logger = Logger.getAnonymousLogger(ApplicationListener.class);
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
// logger.info("class : context destroyed");
}
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
ServletContext context = servletContextEvent.getServletContext();
///// HERE You launch your class
UDPServer udpserver = new UDPServer();
// logger.info("myapp : context Initialized");
}
}
这里是 web.xml
<web-app>
<listener>
<listener-class>com.chatroom.servlet.StartupServlet</listener-class>
</listener>
</web-app>
UDP 服务器与servlet 初始化线程在同一个线程中运行,并且它有一个无限循环。所以,应用程序无法启动。 运行 UDPServer 在单独的线程中。
首先 - 我对 servlet 和所有其他 Java EE 的东西真的没什么经验。
我正在尝试制作简单的聊天室,但在此之前我只是尝试制作简单的 udp 服务器和客户端。一切正常,除了一件事在 45 秒后 tomcat 超时并关闭。我只有一个调用 UDP 服务器的 contextListener class.
是因为我没有servlet,还是?..
这是我的 UDP 服务器 class:
public UDPServer() {
System.out.println("Constructor reached");
try {
connect();
} catch (Exception e) {
e.printStackTrace();
}
}
public void connect() throws Exception
{
int serverPort = 9123;
System.out.println("Server is starting");
DatagramSocket serverSocket = new DatagramSocket(serverPort);
System.out.println("Server started");
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true)
{
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String( receivePacket.getData());
System.out.println("RECEIVED: " + sentence);
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
receiveData = new byte[1024];
sendData = new byte[1024];
}
}
这是我的简单 contextListener
public class StartupServlet implements ServletContextListener {
// private static Logger logger = Logger.getAnonymousLogger(ApplicationListener.class);
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
// logger.info("class : context destroyed");
}
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
ServletContext context = servletContextEvent.getServletContext();
///// HERE You launch your class
UDPServer udpserver = new UDPServer();
// logger.info("myapp : context Initialized");
}
}
这里是 web.xml
<web-app>
<listener>
<listener-class>com.chatroom.servlet.StartupServlet</listener-class>
</listener>
</web-app>
UDP 服务器与servlet 初始化线程在同一个线程中运行,并且它有一个无限循环。所以,应用程序无法启动。 运行 UDPServer 在单独的线程中。