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 在单独的线程中。