`

SOCKET监听随TOMCAT启动而启动

阅读更多

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启动而启动)

    本文将详细解析"web监听端口(Socket服务随web启动而启动)"这一主题,涵盖Socket、Tomcat服务器以及Web服务的监听端口设置。 首先,让我们了解Socket。Socket是计算机网络中的一个概念,它提供了一种进程间通信(IPC...

    socket服务器 eclipse tomcat

    Eclipse是一款强大的Java集成开发环境(IDE),而Tomcat则是一个流行的开源Java Servlet容器,常用于部署Web应用。本篇文章将深入讲解如何使用Eclipse创建一个基于Java的Socket服务器,并将其部署到Tomcat服务器上,...

    tomcat启动debug.txt

    根据提供的文件信息,我们可以深入探讨有关Tomcat启动调试的相关知识点。 ### Tomcat启动与调试的基础概念 Apache Tomcat是一款开源的Servlet容器,主要用于部署和运行Java Web应用程序。它支持最新的Servlet、JSP...

    java启动tomcat

    Java 启动 Tomcat 在本文中,我们将探讨使用 Java 程序来监听 Tomcat 服务器的状态,并在 Tomcat 无响应时自动重启 Tomcat。 标题解释 在标题 "java 启动 tomcat" 中,我们可以了解到本文的主要内容是使用 ...

    tomcat 分配请求之——socket获取请求

    在Tomcat服务器启动后,它会在配置的端口(默认为8080)上创建一个ServerSocket监听。当客户端发起连接请求时,ServerSocket会生成一个新的Socket实例与客户端建立连接。这个Socket对象是数据传输的通道,它将承载...

    Eclipse无插件启动tomcat可调试

    - `-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n`: 这些参数配置了一个端口8000的调试器监听,"suspend=n"表示不暂停启动,让Tomcat立即启动。 4. **设置工作目录**:在" Common "选项卡中,...

    迷你版的Tomcat,socket原理

    服务器端的Tomcat监听这个端口,一旦有连接请求,它就会创建一个Socket实例来处理这个连接。 在迷你版的Tomcat中,`ServerSocket`类用于监听客户端的连接请求。`ServerSocket`创建一个监听套接字,并在指定端口等待...

    Tomcat远程调试

    这里,`transport`表示使用socket进行通信,`server`设为`y`表示Tomcat作为服务器等待调试连接,`suspend`设为`n`表示Tomcat启动后立即运行,而`address`则是调试端口,可以自定义,但需确保没有被其他服务占用。...

    tomcat_debug.rar

    这个文件是Tomcat启动时用来设置环境变量的批处理脚本。在远程debug场景下,我们需要在这个文件中添加一些特定的Java选项来启用debug模式。通常,我们需要设置以下参数: ```cmd set JAVA_OPTS=-Xdebug -Xrunjdwp:...

    Tomcat下配置远程调试

    这一改动使得Tomcat启动时会加载JPDA(Java Platform Debugger Architecture)代理,从而支持远程调试。 ##### 3.2 设置JPDA参数 接下来,需要设置JPDA的相关参数,以便于远程调试的实现。在上述命令的前面添加...

    使用Eclipse远程调试Linux服务器Tomcat项目

    启动Tomcat后,可以查看Tomcat日志文件(catalina.out)中是否有如下输出: Command line argument: -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8899 如果启动成功,表示Tomcat已经配置成功。 四、...

    tomcat简单实现

    在Tomcat中,Socket用于监听特定端口(默认为8080)上的HTTP请求,接收到请求后,将其解析并交给相应的处理程序。具体步骤包括创建ServerSocket监听端口、接受连接请求、创建Socket连接,并通过输入/输出流进行数据...

    eclipse远程调试tomcat

    为了使Tomcat能够支持远程调试,需要在Tomcat的启动脚本中添加特定的JVM参数。这一步骤分为两个部分:Linux环境下的配置与Windows环境下的配置。 ##### 1. Linux环境下配置 打开`/path/to/tomcat/bin/catalina.sh`...

    tomcat的工作原理

    4. **生命周期管理(Lifecycle Management)**:Tomcat中的每个组件都有自己的生命周期,包括初始化、启动、停止和销毁等阶段。通过Lifecycle接口,Tomcat能够监听这些事件,并在适当的时候执行相应的操作。 三、...

    11. 计算机网络编程(Socket)思维导图

    总的来说,计算机网络编程中的Socket技术是构建网络应用的基础,而Tomcat作为Java Web服务器,提供了运行JSP和Servlet的平台,使得动态网页服务成为可能。理解Socket连接机制和Tomcat的工作原理,对于开发高效、稳定...

    Tomcat7、Chrome下web socket的一个例子

    标题中的“Tomcat7、Chrome下web socket的一个例子”揭示了我们要探讨的核心技术点,即在Tomcat 7服务器上使用Web Socket与Google Chrome浏览器进行实时双向通信的应用示例。Web Socket是HTML5引入的一种新的通信...

    tomcat源码解析

    Socket类主要用于创建客户端连接,而ServerSocket类用于监听客户端的连接请求。 ##### ServerSocket类 ServerSocket类用于监听客户端的连接请求,可以指定监听端口和最大连接队列长度。一旦接收到客户端连接请求,...

    使用MyEclipse调试远程tomcat项目

    这个文件用于设置Tomcat启动时的环境变量。 - 在`setenv.bat`中,添加以下行来开启远程调试: ``` set JPDA_ADDRESS=8000 set JPDA_TRANSPORT=dt_socket ``` 这将启动一个监听8000端口的调试器,使用Socket...

    jvm tomcat eclipse 远程 断点 debug 调试 jpda

    当设置好这些参数后,JVM会启动并监听指定端口,等待调试器连接。 2. **Tomcat远程调试** Tomcat作为一个流行的Java应用服务器,同样支持远程调试。在`catalina.sh`启动脚本中,可以通过添加`jpda start`命令来...

Global site tag (gtag.js) - Google Analytics