java web部署 启动线程 (监听socket等)

很简单……

多写一个Servlet,在init函数中启动对应的线程。

把这个Servlet加到web.xml中,例如

    <servlet>
        <servlet-name>EchoServiceStartUpServlet</servlet-name>
        <servlet-class>EchoService.EchoServiceStartUpServlet</servlet-class>
        <load-on-startup>3</load-on-startup>
    </servlet>

注意load-on-startup。

后边数字要大于0,表示优先级,越小优先级越高。

不设置或者小于0表示不启动。
但这样有个很大的问题!!就是没有在Tomcat关闭的时候关闭线程,也许就是没有释放监听的端口。

应该用Listener。

public class ServerSocketListener implements ServletContextListener {  
    private EchoServerThread echoServerThread;  
  
    public void contextInitialized(ServletContextEvent event) {  
        String port = event.getServletContext().getInitParameter("socketPort");  
//        event.getServletContext().log("++++++++++++++++++++++++++++++++");  
//        event.getServletContext().log("++++ Socket服务随web启动而启动 ++++");  
        echoServerThread = new EchoServerThread(Integer.parseInt(port));  
        echoServerThread.start();  
//        event.getServletContext().log("++++ Socket服务已经启动完毕,端口:" + port + " ++++");  
    }  
  
    //tomcat关闭时,关闭线程,释放端口  
    public void contextDestroyed(ServletContextEvent event) {  
        echoServerThread.stopThread();  
    }  
}  

这里就有启动和释放的操作了~~~



然后在web.xml中这样配置:

在web-app节点下加入:

    <context-param>
        <param-name>socketPort</param-name>
        <param-value>2230</param-value>
    </context-param>
    <listener>
        <description>Socket服务随web启动而启动</description>
        <listener-class>EchoService.ServerSocketListener</listener-class>
    </listener>

你可能感兴趣的:(Java Web)