您的位置:首页 > 其它

项目启动开启socket服务

2014-12-22 11:34 281 查看
Web项目中需要在项目启动时开启socket服务

用于收发消息

1.web.xml中配置

端口号为9999的socket 服务端,添加监听

<context-param>
<param-name>socketPort</param-name>
<param-value>9999</param-value>

 </context-param>

<listener>
<description>Socket服务随web启动而启动</description>
<listener-class>com.util.Mylistener</listener-class>

</listener>

2.监听类

单开一个线程,负责socket

public class Mylistener implements ServletContextListener{
private SocketThread socketThread; 

public void contextDestroyed(ServletContextEvent e){ 
if(socketThread!=null && socketThread.isInterrupted()){ 
socketThread.closeServerSocket();
socketThread.interrupt();
}

public void contextInitialized(ServletContextEvent e){ 
ServletContext servletContext = e.getServletContext();
if(servletContext!=null && socketThread==null){ 
socketThread=new SocketThread(null,servletContext); 
socketThread.start();
}
}

}

3.socket线程

public class SocketThread extends Thread{
private ServletContext servletContext;
private ServerSocket serverSocket;

public SocketThread(ServerSocket serverSocket,ServletContext servletContext){ 
this.servletContext=servletContext;
//从web.xml中context-param节点获取socket端口 
String port=this.servletContext.getInitParameter("socketPort");
if(serverSocket==null){ 
try{ 
this.serverSocket=new ServerSocket(Integer.parseInt(port));
}catch(IOException e){ 
e.printStackTrace();
}
}
}

public void run(){ 
while(!this.isInterrupted()){
//线程未中断执行循环 
try{ 
Socket socket=serverSocket.accept();
if(socket!=null) 
new SocketData(socket,this.servletContext).start(); 
}catch(IOException e){ 
e.printStackTrace();
}
}
}

public void closeServerSocket(){ 
try{ 
if(serverSocket!=null&&!serverSocket.isClosed()) 
serverSocket.close(); 
}catch(IOException e){ 
e.printStackTrace();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  thread socket web.xml
相关文章推荐