关于javaweb 项目 ssm框架 启动tomcat服务器同时启动一个socket服务

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>

时间: 2024-11-13 03:44:40

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

使用Eclipse发布Web项目并部署到Tomcat服务器

使用Eclipse发布Web项目并部署到Tomcat服务器: 1.先建立两个JavaWeb项目:分别命名为:JavaWeb_TestRelease01 JavaWeb_TestRelease02,在里面分别创建两个index.jsp页面,body内容分别为: Wecome to aaa.com home page, Wecome to bbb.com home page 2.使用Eclipse将两个项目导出为.war文件,分别选中项目,右击鼠标,选中Export...>>选中Web WAR f

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

启动Tomcat服务器时,出现1099端口被其它进程占用了解决办法: 1.找出占用1099端口的进程,进入windows命令,查看什么进程占用了1099端口,使用命令:netstat -aon|findstr 1099 找出占用1099端口的进程 2.然后关闭占用该端口的进程:taskkill -f -pid 3756 这样就可以正常启动Tomcat了.问题顺利解决了.--------------------- 作者:muyu1102 来源:CSDN 原文:https://blog.csdn.n

在Eclipse中使用Maven将Web项目自动部署到tomcat服务器

一.创建Web项目 1.1 选择建立Maven Project 选择File -> New ->Project,如下图所示: 在New窗口中选择 Maven -> Maven Project.点击[next]如下图所示: 1.2 选择项目路径 根据项目的实际情况选择项目的存放目录,也可以选择[Use default Workspace location]默认工作空间.如下图所示: 1.3 选择项目类型 在Artifact Id中选择maven-archetype-webapp,如下图所示

启动Tomcat服务器报错

启动Tomcat服务器报错: Several ports (8005, 8080, 8009) required by Tomcat v5.5 Server at localhost are already in use. The server may already be running in another process, or a system process may be using the port. To start this server you will need to sto

Myeclipse在启动Tomcat服务器的时候总是进入debug视图的解决方法

最近调试程序,由于出现过一些错误,在调试的时候,更改过一些东西,但是后来在myeclipse下启动Tomcat服务器的时候,自动的跳入到debug视图了(以前是一启动Tomcat服务器后,直接就加载tomcat的启动文件,而不是进入debug视图),在网上找了会,虽然没有直接回答的,但是结果可以作为参考,解决方法如下: window->preferences->Myeclipse->Servers->Tomcat 然后找到你的相应的Tomcat服务器的版本, 选中然后展开其下面的子

JavaWeb学习总结(二)-修改Tomcat服务器的端口

一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml配置文件中的Connector节点进行的端口修改 例如:将Tomcat服务器的启动端口由默认的8080改成8081端口 Tomcat服务器启动端口默认配置 1 <Connector port="8080" protocol="HTTP/1.1" 2 connect

2.启动tomcat服务器错

在启动tomcat服务器的时候报错: Starting MyTomcat  v7.0 at localhost has encountered a problem Port 8080 required by MyTomcat v7.0 at localhost is already in use The server may already be running in another process......... 解决方案如下: 方案一:因为tomcat的默认端口号是8080.你要启动它,就

启动tomcat服务器报错:ERROR ContextLoader:307 - Context initialization failed

错误详情 十月 01, 2018 7:46:36 下午 org.apache.tomcat.util.digester.SetPropertiesRule begin警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:bos19' did not find a matching property.十月 01, 201

Eclipse下配置javaweb项目快速部署到tomcat

用惯了VS,再用Eclipse,完全有一种从自动挡到手动挡的感觉啊. 很多同学在Eclipse下开发web项目,每一次修改代码,看效果的时候都有右键项目->Run as -> Run on server,然后慢吞吞的打开Eclipse的内建浏览器,显示如下一个界面,让人看起来分外忧郁! 在网上查了一圈,其它的方式基本都在教大家将项目发布到tomcat目录的webapp目录下,虽然比默认方式要好些,但是http://localhost:8080/InskyScheduleCenter/之类的ur