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. Spring Boot教程(八)创建含有多module的springboot工程

    创建根工程 创建一个maven 工程,其pom文件为: <?xml version="1.0" encoding="UTF-8"?> <pro ...

  2. 大v用户数据统计分析

    1,统计数据的基本情况,包括微博总数,用户总数,最活跃和最不活跃的用户id #!/bin/sh source_dir=/home/minelab/data/DATA source_file_name= ...

  3. (转)IIS Express介绍与使用

    IIS Express是什么?IIS Express是为开发人员优化的轻量级.自包含版本的IIS.IIS Express使使用当前最新版本的IIS来开发和测试网站变得容易.它具有IIS 7及以上的所有 ...

  4. Xcode升级10.3后XIB文件报错

    Xcode升级10.3后XiB文件包错,提示: Failed to find or create execution context for description '<IBCocoaTouch ...

  5. ES6对象的拓展

    属性的简洁表示法 ES6 允许直接写入变量和函数,作为对象的属性和方法.这样的书写更加简洁. const foo = 'bar'; const baz = {foo}; //允许直接写入变量和函数作为 ...

  6. WCF 出现System.Core version 2.0.5.0 未能加载问题

    Window server 2008 R2 Enterprise 版本测试: 需要安装Net补丁: NDP40-KB2468871-v2-x64 下载地址 https://www.microsoft. ...

  7. Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题

    Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题 很喜欢 FMX 的一些新控件, 如: TExpander.TArcDial.TComboTrackBar.T ...

  8. nginx启动脚本和配置文件

    1.编写Nginx启动脚本,并加入系统服务 vim /etc/init.d/nginx并在其中写入如下内容:#!/bin/bash# chkconfig: - 30 21# description: ...

  9. python学习笔记:(六)str(字符串)常用方法

    注意点: 1.字符串是不可变的: 2.%格式化操作符:左侧放置字符串,右侧放置希望被格式化的值. 对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应 ...

  10. Jmeter之循环控制器

    在使用Jmeter测试时,部分接口需要循环执行多次,这时候就可以使用循环控制器去控制执行. 循环控制器如下图: 说明 : (1.名称:标识,建议明确此循环控制器的使用的作用是什么(如:登录循环控制) ...