- 浏览: 1012300 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
tomcat 7 源码分析-9 tomcat对ServerSocket的封装和使用
tomcat中ServerSocket线程监听是否有socket连接,如果有就转而处理。这个过程类似于你向tomcat发送一个URL请求,实质这个请求转换成http协议,通过socket发出来。
先看ServerSocket的封装主要为
public abstract class ServerSocketFactory implements Cloneable
- class DefaultServerSocketFactory extends ServerSocketFactory {
- DefaultServerSocketFactory () {
- /* NOTHING */
- }
- @Override
- public ServerSocket createSocket ( int port)
- throws IOException {
- return new ServerSocket (port);
- }
- @Override
- public ServerSocket createSocket ( int port, int backlog)
- throws IOException {
- return new ServerSocket (port, backlog);
- }
- @Override
- public ServerSocket createSocket ( int port, int backlog,
- InetAddress ifAddress)
- throws IOException {
- return new ServerSocket (port, backlog, ifAddress);
- }
- @Override
- public Socket acceptSocket(ServerSocket socket)
- throws IOException {
- return socket.accept();
- }
- @Override
- public void handshake(Socket sock)
- throws IOException {
- // NOOP
- }
- }
class DefaultServerSocketFactory extends ServerSocketFactory { DefaultServerSocketFactory () { /* NOTHING */ } @Override public ServerSocket createSocket (int port) throws IOException { return new ServerSocket (port); } @Override public ServerSocket createSocket (int port, int backlog) throws IOException { return new ServerSocket (port, backlog); } @Override public ServerSocket createSocket (int port, int backlog, InetAddress ifAddress) throws IOException { return new ServerSocket (port, backlog, ifAddress); } @Override public Socket acceptSocket(ServerSocket socket) throws IOException { return socket.accept(); } @Override public void handshake(Socket sock) throws IOException { // NOOP } }
做了个小例子,模拟8080端口,可以通过浏览器想serversocket发消息。
- package com.test.socket;
- import java.io.*;
- import java.io.IOException;
- import java.net.ServerSocket;
- import java.net.Socket;
- import org.apache.tomcat.util.net.*;
- public class testendpoint {
- protected volatile boolean running = false ;
- /**
- * Server socket acceptor thread.
- */
- protected ServerSocket serverSocket = null ;
- protected ServerSocketFactory serverSocketFactory = null ;
- public void start() throws Exception {
- running = true ;
- //获得serverSocketFactory
- serverSocketFactory = ServerSocketFactory.getDefault();
- //获得serverSocket,监听8080端口
- serverSocket = serverSocketFactory.createSocket(8080 );
- //建立监听线程
- Thread acceptorThread = new Thread( new Acceptor(), "-Acceptor-" );
- acceptorThread.start();
- }
- //处理socket
- protected boolean processSocket(Socket socket) throws IOException {
- BufferedReader in = new BufferedReader( new InputStreamReader(
- socket.getInputStream()));
- String inputLine;
- while ((inputLine = in.readLine()) != null ) {
- System.out.println(inputLine);
- }
- return true ;
- }
- //监听类,不断循环
- protected class Acceptor implements Runnable {
- /**
- * The background thread that listens for incoming TCP/IP connections and
- * hands them off to an appropriate processor.
- */
- public void run() {
- // Loop until we receive a shutdown command
- while (running) {
- // Loop if endpoint is paused
- // Accept the next incoming connection from the server socket
- try {
- Socket socket = serverSocketFactory.acceptSocket(serverSocket);
- serverSocketFactory.initSocket(socket);
- // Hand this socket off to an appropriate processor
- if (!processSocket(socket)) {
- // Close socket right away
- try {
- socket.close();
- } catch (IOException e) {
- // Ignore
- }
- }
- }catch ( IOException x ) {
- } catch (Throwable t) {
- }
- // The processor will recycle itself when it finishes
- }
- }
- }
- }
package com.test.socket; import java.io.*; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import org.apache.tomcat.util.net.*; public class testendpoint { protected volatile boolean running = false; /** * Server socket acceptor thread. */ protected ServerSocket serverSocket = null; protected ServerSocketFactory serverSocketFactory = null; public void start() throws Exception { running = true; //获得serverSocketFactory serverSocketFactory = ServerSocketFactory.getDefault(); //获得serverSocket,监听8080端口 serverSocket = serverSocketFactory.createSocket(8080); //建立监听线程 Thread acceptorThread = new Thread(new Acceptor(),"-Acceptor-"); acceptorThread.start(); } //处理socket protected boolean processSocket(Socket socket) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader( socket.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) { System.out.println(inputLine); } return true; } //监听类,不断循环 protected class Acceptor implements Runnable { /** * The background thread that listens for incoming TCP/IP connections and * hands them off to an appropriate processor. */ public void run() { // Loop until we receive a shutdown command while (running) { // Loop if endpoint is paused // Accept the next incoming connection from the server socket try { Socket socket = serverSocketFactory.acceptSocket(serverSocket); serverSocketFactory.initSocket(socket); // Hand this socket off to an appropriate processor if (!processSocket(socket)) { // Close socket right away try { socket.close(); } catch (IOException e) { // Ignore } } }catch ( IOException x ) { } catch (Throwable t) { } // The processor will recycle itself when it finishes } } } }
- package com.test.socket;
- import org.apache.tomcat.util.net.*;
- public class Servertest {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- testendpoint ts = new testendpoint();
- try {
- System.out.println("Server start" );
- ts.start();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
package com.test.socket; import org.apache.tomcat.util.net.*; public class Servertest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub testendpoint ts = new testendpoint(); try { System.out.println("Server start"); ts.start(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
测试,在你的浏览器上输入:http://localhost:8080/
可以看见发过来的request的整个消息
Server start
GET / HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.7) Gecko/20100713 Firefox/3.6.7
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
当然也可以写个客户端,向服务器端发数据。
- package com.test.socket;
- import java.net.Socket;
- import java.net.UnknownHostException;
- import java.io.*;
- public class ClientTest {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- //String host="127.0.0.1";
- String host = "localhost" ;
- Socket socket = null ;
- try {
- socket = new Socket(host, 8080 );
- } catch (UnknownHostException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- } catch (IOException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- try {
- PrintWriter out = new PrintWriter(socket.getOutputStream(), true );
- out.println("Send to host1" );
- out.println("Send to host2" );
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
}
发表评论
-
tomcat7.0.8的高级应用-apr1.4.2安装
2011-03-24 17:16 983一 windows下安装 直接 ... -
tomcat 7 源码分析-14 tomcat的container设计
2011-03-11 19:18 1546tomcat 7 源码分析-14 tomca ... -
tomcat 7 源码分析-13 处理request的Valve和Valve的链表Pipeline
2011-03-11 19:17 1127tomcat 7 源码分析-13 处理request的Val ... -
tomcat 7 源码分析-12 Enumeration枚举
2011-03-11 19:14 1250tomcat 7 源码分析-12 Enumeration枚举 ... -
tomcat 7 源码分析-11 tomcat对http协议的实现
2011-03-11 19:13 1401tomcat 7 源码分析-11 tomcat对http协议 ... -
tomcat 7 源码分析-10 线程池ThreadPoolExecutor
2011-03-11 19:12 2211tomcat 7 源码分析-10 线程池ThreadPool ... -
tomcat 7 源码分析-8 生命周期lifecycle和监听listener
2011-03-11 19:10 1384tomcat 7 源码分析-8 生命周期lifecycle和 ... -
tomcat 7 源码分析-7 server初始化中的JMX(DynamicMBean)再续
2011-03-11 19:09 1041tomcat 7 源码分析-7 server初始化中的JMX ... -
tomcat 7 源码分析-6 server初始化中的JMX(DynamicMBean)续
2011-03-11 19:08 1189tomcat 7 源码分析-6 server ... -
tomcat 7 源码分析-5 server初始化中的JMX(DynamicMBean)
2011-03-11 19:08 1364tomcat 7 源码分析-5 server初始化中的JMX ... -
tomcat 7 源码分析-4 server初始化背后getServer().init()
2011-03-11 19:06 1352tomcat 7 源码分析-4 server初始化背后get ... -
tomcat 7 源码分析-3 使用Digester读取xml文件实例化server
2011-03-11 19:05 1387tomcat 7 源码分析-3 使用Digester读取xm ... -
tomcat 7 源码分析-2 类加载ClassLoader
2011-03-11 19:04 1932tomcat 7 源码分析-2 类加载ClassLoader ... -
tomcat 7 源码分析-1 关于读取properties及注册系统properties
2011-03-11 19:02 1591tomcat 7 源码分析-1 关于读取properties ... -
Tomcat的四种基于HTTP协议的Connector性能比较
2011-03-11 17:58 1114Tomcat的四种基于HTTP协议的Connector性能比较 ...
相关推荐
### tomcat源码解析 #### 简介与概览 Tomcat作为一款开源的Servlet容器,被广泛应用于Java ...通过对Tomcat源码的深入分析,我们可以更好地理解它是如何工作的,以及如何利用其强大的功能来构建高效、稳定的Web应用。
- **ServerSocket类**:讲解如何使用ServerSocket监听端口并接受客户端连接。 2. **第2章:一个简单的Servlet容器** - **Servlet接口**:定义了Servlet的基本行为和生命周期方法。 - **HttpServer1类**:实现一...
### Tomcat工作原理详解 #### 一、简介与概览 Tomcat作为一款开源的Servlet容器,被广泛应用于Java Web开发之中。它不仅能够运行Java Servlet,还支持JSP技术...了解这些基础知识对于深入理解和使用Tomcat至关重要。
在Java中,Socket类封装了必要的信息,包括连接协议、IP地址和端口号,使得客户端和服务端能够进行有效的交互。 1. **Socket概念** - Socket,也称为套接字,是网络通信中的一个抽象概念,它是两个网络进程间通信...
Java提供了丰富的网络编程API,如Socket和ServerSocket类,用于实现客户端和服务器之间的通信。还可以使用URL和URLConnection类来访问网络资源。 **7. Java数据库连接(JDBC)** Java Database Connectivity (JDBC)...
- **Socket通信**:学习TCP和UDP的网络通信模型,掌握Socket和ServerSocket的使用。 - **HTTP协议**:了解HTTP的基本概念,如何发送GET和POST请求。 8. **Apache相关技术** - **Tomcat服务器**:安装配置Tomcat...
- 使用Swing和MySQL构建一个学生成绩管理系统。 - 涵盖需求分析、系统设计、数据库设计、编码实现等软件工程过程。 - 实现功能包括密码修改、新生报到、基本信息查询、成绩查询等。 - **广陵学院图书馆管理系统*...
Java作为一门广泛使用的编程语言,其面试题涵盖了众多领域,包括基础语法、面向对象、集合框架、多线程、异常处理、JVM内存管理、IO流、网络编程、设计模式、Spring框架、Struts框架、Tomcat服务器等。以下是对这些...
此外,了解类、对象和封装的概念,以及如何使用继承和多态性来实现面向对象编程。 2. **集合框架**:Java集合框架是处理对象数组的强大工具,包括List、Set和Map接口,以及ArrayList、LinkedList、HashSet、HashMap...
7. **网络编程**:Java提供了Socket和ServerSocket类进行网络通信。学习如何创建客户端和服务器端的连接,进行数据的发送和接收。 8. **Java应用程序和Web应用程序开发**:Java可以开发桌面应用程序,也可以通过...
Java多线程TCP Socket服务器源码是用于构建高性能、可扩展网络服务的基础,尤其是在...通过对这些源码的学习和分析,开发者可以深入理解Java多线程TCP服务器以及FastCGI协议的实现细节,从而提升网络服务开发的能力。
10. **网络编程**:Java支持TCP和UDP网络通信,可以创建Socket和ServerSocket进行数据交换。 11. **JDBC**:Java Database Connectivity,用于连接和操作数据库,包括连接、查询、事务处理等。 12. **设计模式**:...
- **封装、继承和多态**:面向对象的三大特性,封装保护数据,继承实现代码复用,多态提供灵活性。 - **异常处理**:Java强制使用try-catch-finally语句块处理异常,确保程序的健壮性。 - **垃圾回收机制**:自动...
此外,笔记中还包含了对Tomcat服务器的介绍和使用。Tomcat是一款轻量级的Java Web应用服务器,是初学者部署和运行Servlet、JSP应用的首选。这里将讲解如何安装配置Tomcat,创建Web项目,以及如何发布和调试应用。...
- **Socket编程**:了解TCP和UDP协议,学会使用Socket和ServerSocket进行网络通信。 - **HTTP协议**:理解HTTP请求和响应的结构,以及HttpClient库的使用。 10. **Java虚拟机(JVM)** - **内存模型**:了解堆、...
10. **Web开发**:如果书中涉及Web项目,那么你可能会看到关于Servlet、JSP、Filter、Listener等Web组件的使用,以及如何结合Tomcat服务器运行和部署Java Web应用。 通过深入研究这些源代码,你不仅可以提升Java...
1. 监听套接字:使用`java.net.ServerSocket`创建一个监听特定端口的服务器,等待客户端连接。 2. 处理线程:每当有客户端连接时,服务器会创建一个新的线程来处理请求,避免阻塞其他客户端。 3. HTTP解析:接收...
777意味着文件或目录对所有用户都有读、写和执行权限,这是最开放的权限设置,通常不推荐在生产环境中使用,因为这可能会导致安全问题。 #### 3. final、finally与finalize的区别 - **final**:修饰符,可以用于...