1.创建监听类

import javax.servlet.ServletContext; 
import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener;

/** 
* 将socket service随tomcat启动 
* @author huajian 
*/ 
public class SocketServiceLoader implements ServletContextListener{ 
//socket server 线程 
private SocketThread socketThread;

@Override 
public void contextDestroyed(ServletContextEvent arg0) { 
if(null!=socketThread && !socketThread.isInterrupted()) 

socketThread.closeSocketServer(); 
socketThread.interrupt(); 

}

@Override 
public void contextInitialized(ServletContextEvent arg0) { 
// TODO Auto-generated method stub 
if(null==socketThread) 

//新建线程类 
socketThread=new SocketThread(null); 
//启动线程 
socketThread.start(); 


}

2.创建生产socket线程类:

import java.io.IOException;
import java.net.ServerSocket; 
import java.net.Socket;

import javax.servlet.ServletContext;

/** 
* socket 线程类 
* @author huajian 
*/ 
public class SocketThread extends Thread{ 
private ServerSocket serverSocket = null;

public SocketThread(ServerSocket serverScoket){ 
try { 
if(null == serverSocket){ 
this.serverSocket = new ServerSocket(4700); 
System.out.println("socket start"); 

} catch (Exception e) { 
System.out.println("SocketThread创建socket服务出错"); 
e.printStackTrace(); 
}

}

public void run(){ 
while(!this.isInterrupted()){ 
try { 
Socket socket = serverSocket.accept();

if(null != socket && !socket.isClosed()){ 
//处理接受的数据 
new SocketOperate(socket).start(); 

socket.setSoTimeout(30000);

}catch (Exception e) { 
e.printStackTrace(); 


}

public void closeSocketServer(){ 
try { 
if(null!=serverSocket && !serverSocket.isClosed()) 

serverSocket.close(); 

} catch (IOException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 


}

3.创建处理客户端发送报文的类:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.Socket;

import javax.servlet.ServletContext;

/** 
* 多线程处理socket接收的数据 
* @author huajian

*/ 
public class SocketOperate extends Thread{ 
private Socket socket;

public SocketOperate(Socket socket) { 
this.socket=socket; 

@SuppressWarnings("unused") 
public void run() 

try{

InputStream in= socket.getInputStream();

PrintWriter out=new PrintWriter(socket.getOutputStream());

//BufferedReader wt = new BufferedReader(new InputStreamReader(System.in));

while(true){ 
//读取客户端发送的信息 
String strXML = ""; 
byte[] temp = new byte[1024]; 
int length = 0; 
while((length = in.read(temp)) != -1){ 
strXML += new String(temp,0,length); 

if("end".equals(strXML)){ 
System.out.println("准备关闭socket"); 
break; 

if("".equals(strXML)) 
continue;

System.out.println("客户端发来:"+strXML.toString());

// MethodHandler mh = new MethodHandler(ReadXML.readXML(strXML.toString())); 
// String resultXML = mh.getResultXML(); 
// System.out.println("返回:"+resultXML.toString());

// if(!"".equals(resultXML)){ 
// out.print(resultXML); 
out.flush(); 
out.close(); 
// }


socket.close(); 
System.out.println("socket stop.....");

}catch(IOException ex){

}finally{



}

4.配置web.xml中配置监听

<listener> 
  <listener-class>com.novolion.wateriot.server.SocketServiceLoader</listener-class> 
</listener>

关于javaweb 项目 ssm框架 启动tomcat服务器同时启动一个socket服务的更多相关文章

  1. 启动tomcat服务器自动执行一个方法

    第一步:配置web.xml文件 添加如下代码 <servlet> <servlet-name>Timer</servlet-name> <servlet-cl ...

  2. SSM 框架-03-MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建

    SSM 框架-03-MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建 如果你是使用 Eclipse 你需要先安装 MyEclipse,请参考:SSM 框架-02-MyEclipse ...

  3. JavaWeb学习(二)———Tomcat服务器学习和使用(一)

    一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml ...

  4. 部署war包后,新增tomcat服务器,启动tomcat服务器报错解决方法

    导入Maven工程后,新增tomcat服务器,启动服务器后,报如下错误: 使用http访问页面的时候报如下错误: 经过百度后,有一种方法可以解决: 在eclipse tomcat无法启动,无法访问to ...

  5. war包部署在tomcat下,使用windows service服务方式启动tomcat服务器,在包含调用dll的模块,报dll找不到问题的解决办法

    问题描述: 开发了一个需要调用dll的java web程序,在idea开发环境下运行调试没问题,可以正常运行,在tomcat/bin下,运行批处理startup.bat,启动tomcat服务器,也可以 ...

  6. IDEA启动Tomcat服务器时某些端口(如1099端口)被占用的解决办法

    启动Tomcat服务器时,出现1099端口被其它进程占用了解决办法: 1.找出占用1099端口的进程,进入windows命令,查看什么进程占用了1099端口,使用命令:netstat -aon|fin ...

  7. 启动Tomcat服务器报错

    启动Tomcat服务器报错: Several ports (8005, 8080, 8009) required by Tomcat v5.5 Server at localhost are alre ...

  8. python paramiko ssh.exec_command()启动tomcat服务器应用进程失败问题解决方法- Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this progr

    问题说明:

  9. javaweb学习总结十六(tomcat服务器的使用、虚拟目录的映射)

    一:tomcat服务器的目录 1:目录结构 2:web应用程序介绍 二:虚拟目录的映射 假如我在E盘建立一个目录web,里面存放1.html文件,我想让外界访问 1:直接在conf目录下的server ...

随机推荐

  1. nginx展示文件目录

    1. 如何让nginx显示文件夹目录 vi /etc/nginx/conf.d/default.conf 添加如下内容: location / { root /data/www/file //指定实际 ...

  2. 【Leetcode】对称二叉树

    递归法 执行用时 :12 ms, 在所有 C++ 提交中击败了43.44%的用户 内存消耗 :14.6 MB, 在所有 C++ 提交中击败了95.56%的用户 /** * Definition for ...

  3. Windows10 + VS2015 (Win SDK10)环境下的64位 VTK编译小结

    之前在学习vtk过程中,感觉vtk的编译还是很简单的,基本上不会碰到什么棘手的错误.但是,当我在Win10+VS2015这个环境下配置时,却遇到了麻烦.经过一番折腾之后,终于将vtkbian编译成功了 ...

  4. StringBuffer的s1.capacity()是多少?

    定义有StringBuffer s1=new StringBuffer(10);s1.append(“1234”)则s1.length()和s1.capacity()分别是多少? StringBuff ...

  5. [LeetCode]-011-Longest Common Prefix

    Write a function to find the longest common prefix string amongst an array of strings. []=>" ...

  6. [LeetCode]-algorithms-String to Integer (atoi)

    Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...

  7. SpringBoot,用200行代码完成一个一二级分布式缓存

    缓存系统的用来代替直接访问数据库,用来提升系统性能,减小数据库复杂.早期缓存跟系统在一个虚拟机里,这样内存访问,速度最快. 后来应用系统水平扩展,缓存作为一个独立系统存在,如redis,但是每次从缓存 ...

  8. vue模板快速生成

    vue模板快速生成 vue 模板 快速生成  每一次都手动敲重复代码的话,是一个很繁琐的事情,通过vscode自带代码片段可以解决我们大部分问题 文件 => 首选项 => 用户代码片段=& ...

  9. Mybaits配置多个数据库操作sql环境

    mybitas可以配置sql语句适用于不同数据库下的操作,因为不同数据库sql语句可能有差别,接下来介绍如果进行操作 1.在jdbc.properprites配置驱动 jdbc.driver=com. ...

  10. Spring+hibernate 配置实例

    转自:http://www.cnblogs.com/hongten/archive/2012/03/10/java_spring_hibernate.html 项目结构: http://www.cnb ...