?
很简单……
多写一个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>