SOCKET监听随TOMCAT启动而启动[转载]
支持pool的连接
web.xml
<!-- Socket服务 start -->
<context-param>
<param-name>socketPort</param-name>
<param-value>2009</param-value>
</context-param>
<listener>
<description>Socket服务随web启动而启动</description>
<listener-class>org.ljk.socket.listener.ServerSocketListener</listener-class>
</listener>
<!-- Socket服务 end -->
public class ServerSocketListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
String part =
event.getServletContext().getInitParameter("socketPort");
String maxConcent="5";
event.getServletContext().log("++++++++++++++++++++++++++++++++");
event.getServletContext().log("++++ Socket服务随web启动而启动 ++++");
event.getServletContext()
.log("++++++++++++++++++++++++++++++++" + part);
new
ServerSocketStart(Integer.parseInt(part),Integer.parseInt(maxConcent)).start();
event.getServletContext().log("++++ Socket服务已经启动完毕 ++++");
}
public void contextDestroyed(ServletContextEvent event) {
}
}
public class ServerSocketStart extends Thread {
private int port;
private int maxConnections;
public ServerSocketStart(int aListenPort, int maxConnections){
this.port=aListenPort;
this.maxConnections=maxConnections;
}
public void run() {
ServerSocketFactory
serverSocketFactory=ServerSocketFactory.getDefault();
try {
ServerSocket
serverSocket=serverSocketFactory.createSocket(port);
Socket request = null;
System.out.println("++++++ ServerSocket已经启动 ++++++");
this.setUpHandlers();
while(true) {
request = serverSocket.accept();
System.out.println("++++++ 客户请求成功 ++++++");
//接收客户机连接请求
PooledConnectionHandler.processRequest(request);
}
} catch (IOException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
}
public void setUpHandlers() {
for(int i=0; i<maxConnections; i++) {
PooledConnectionHandler currentHandler = new
PooledConnectionHandler();
System.out.println("++++++ Thread-Handler"+i+"已启动 ++++++");
new Thread(currentHandler, "Handler " + i).start();
}
}
}
public class PooledConnectHandler implements Runnable {
protected Socket connection;
@SuppressWarnings("unchecked")
protected static List pool = new LinkedList();
public PooledConnectHandler() {}
public void handleConnection() {
System.out.println("客户:"+connection.getInetAddress()+"在时
间:"+Calendar.getInstance().getTime().toString()+"访问过!");
try {
PrintWriter streamWriter = new
PrintWriter(connection.getOutputStream());
BufferedReader streamReader = new BufferedReader(new
InputStreamReader(connection.getInputStream()));
String fileToRead = streamReader.readLine();
BufferedReader fileReader = new BufferedReader(new
FileReader(fileToRead));
String line = null;
while((line=fileReader.readLine())!=null)
streamWriter.println(line);
fileReader.close();
streamWriter.close();
streamReader.close();
}
catch(FileNotFoundException e) {
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
}
public static void processRequest(Socket requestToHandle) {
synchronized(pool) {
pool.add(pool.size(), requestToHandle);
pool.notifyAll();
}
}
public void run() {
while(true) {
synchronized(pool) {
while(pool.isEmpty()) {
try {
pool.wait();
}
catch(InterruptedException e) {
e.printStackTrace();
}
}
connection= (Socket)pool.remove(0);
}
handleConnection();
}
}
}
分享到:
相关推荐
本文将详细解析"web监听端口(Socket服务随web启动而启动)"这一主题,涵盖Socket、Tomcat服务器以及Web服务的监听端口设置。 首先,让我们了解Socket。Socket是计算机网络中的一个概念,它提供了一种进程间通信(IPC...
Eclipse是一款强大的Java集成开发环境(IDE),而Tomcat则是一个流行的开源Java Servlet容器,常用于部署Web应用。本篇文章将深入讲解如何使用Eclipse创建一个基于Java的Socket服务器,并将其部署到Tomcat服务器上,...
根据提供的文件信息,我们可以深入探讨有关Tomcat启动调试的相关知识点。 ### Tomcat启动与调试的基础概念 Apache Tomcat是一款开源的Servlet容器,主要用于部署和运行Java Web应用程序。它支持最新的Servlet、JSP...
Java 启动 Tomcat 在本文中,我们将探讨使用 Java 程序来监听 Tomcat 服务器的状态,并在 Tomcat 无响应时自动重启 Tomcat。 标题解释 在标题 "java 启动 tomcat" 中,我们可以了解到本文的主要内容是使用 ...
在Tomcat服务器启动后,它会在配置的端口(默认为8080)上创建一个ServerSocket监听。当客户端发起连接请求时,ServerSocket会生成一个新的Socket实例与客户端建立连接。这个Socket对象是数据传输的通道,它将承载...
- `-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n`: 这些参数配置了一个端口8000的调试器监听,"suspend=n"表示不暂停启动,让Tomcat立即启动。 4. **设置工作目录**:在" Common "选项卡中,...
服务器端的Tomcat监听这个端口,一旦有连接请求,它就会创建一个Socket实例来处理这个连接。 在迷你版的Tomcat中,`ServerSocket`类用于监听客户端的连接请求。`ServerSocket`创建一个监听套接字,并在指定端口等待...
这里,`transport`表示使用socket进行通信,`server`设为`y`表示Tomcat作为服务器等待调试连接,`suspend`设为`n`表示Tomcat启动后立即运行,而`address`则是调试端口,可以自定义,但需确保没有被其他服务占用。...
这个文件是Tomcat启动时用来设置环境变量的批处理脚本。在远程debug场景下,我们需要在这个文件中添加一些特定的Java选项来启用debug模式。通常,我们需要设置以下参数: ```cmd set JAVA_OPTS=-Xdebug -Xrunjdwp:...
这一改动使得Tomcat启动时会加载JPDA(Java Platform Debugger Architecture)代理,从而支持远程调试。 ##### 3.2 设置JPDA参数 接下来,需要设置JPDA的相关参数,以便于远程调试的实现。在上述命令的前面添加...
启动Tomcat后,可以查看Tomcat日志文件(catalina.out)中是否有如下输出: Command line argument: -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8899 如果启动成功,表示Tomcat已经配置成功。 四、...
在Tomcat中,Socket用于监听特定端口(默认为8080)上的HTTP请求,接收到请求后,将其解析并交给相应的处理程序。具体步骤包括创建ServerSocket监听端口、接受连接请求、创建Socket连接,并通过输入/输出流进行数据...
为了使Tomcat能够支持远程调试,需要在Tomcat的启动脚本中添加特定的JVM参数。这一步骤分为两个部分:Linux环境下的配置与Windows环境下的配置。 ##### 1. Linux环境下配置 打开`/path/to/tomcat/bin/catalina.sh`...
4. **生命周期管理(Lifecycle Management)**:Tomcat中的每个组件都有自己的生命周期,包括初始化、启动、停止和销毁等阶段。通过Lifecycle接口,Tomcat能够监听这些事件,并在适当的时候执行相应的操作。 三、...
总的来说,计算机网络编程中的Socket技术是构建网络应用的基础,而Tomcat作为Java Web服务器,提供了运行JSP和Servlet的平台,使得动态网页服务成为可能。理解Socket连接机制和Tomcat的工作原理,对于开发高效、稳定...
标题中的“Tomcat7、Chrome下web socket的一个例子”揭示了我们要探讨的核心技术点,即在Tomcat 7服务器上使用Web Socket与Google Chrome浏览器进行实时双向通信的应用示例。Web Socket是HTML5引入的一种新的通信...
Socket类主要用于创建客户端连接,而ServerSocket类用于监听客户端的连接请求。 ##### ServerSocket类 ServerSocket类用于监听客户端的连接请求,可以指定监听端口和最大连接队列长度。一旦接收到客户端连接请求,...
这个文件用于设置Tomcat启动时的环境变量。 - 在`setenv.bat`中,添加以下行来开启远程调试: ``` set JPDA_ADDRESS=8000 set JPDA_TRANSPORT=dt_socket ``` 这将启动一个监听8000端口的调试器,使用Socket...
当设置好这些参数后,JVM会启动并监听指定端口,等待调试器连接。 2. **Tomcat远程调试** Tomcat作为一个流行的Java应用服务器,同样支持远程调试。在`catalina.sh`启动脚本中,可以通过添加`jpda start`命令来...