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. 第三周课程总结&实验报告(一)

    实验报告(一) 1.打印输出所有的"水仙花数",所谓"水仙花数"是指一个3位数,其中各位数字立方和等于该数本身.例如,153是一个"水仙花数" ...

  2. webpack.config.js文件

    与 package.json 配合使用 var path=require("path");var OpenBrowserPlugin = require('open-browser ...

  3. 请简述一下 Ajax 的原理及实现步骤

    简述 AJAX:AJAX即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术.通过在后台与服务器进行 ...

  4. 2017-03-04 idea破解

    https://blog.csdn.net/qq_27686779/article/details/78870816 防止原址被删除,备份下,亲测可用 http://idea.java.sx/ 简单快 ...

  5. tensorflow源码分析——CTC

    CTC是2006年的论文Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurren ...

  6. value是列表的字典排序

    # -*- coding: utf-8 -*- def dict_test(): #构造Map并对其排序 attr_tul = list(['a','b','c']) one_tul = ,],[,] ...

  7. MAC截图工具

    截图快捷键 ctrl+shift+A

  8. Python Module_Socket_网络编程

    目录 目录 Socket 套接字 套接字的原理 套接字的数据处理方式 套接字类型 Socket 标准函数 ServerSocket 标准函数 ClientSocket 标准函数 公有标准函数 Sock ...

  9. pycharm基础使用方法

    0.前言 Pycharm 作为一款针对 Python 的编辑器,配置简单.功能强大.使用起来省时省心,对初学者友好,这也是为什么编程教室一直推荐新手使用 Pycharm 的原因.本文我们将介绍  py ...

  10. 【MM系列】SAP MM模块-BOM展开函数

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-BOM展开函数   ...