`
zhaohaolin
  • 浏览: 985156 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

tomcat 7 源码分析-11 tomcat对http协议的实现

阅读更多

tomcat 7 源码分析-11 tomcat对http协议的实现

Implementation of InputBuffer which provides HTTP request header parsing as well as transfer decoding

 

socket能获得客户端发来的http协议,tomcat需要对http协议(传输的是byte流)进行解析,例如获得http的method,protocol,URI等信息.

既然是对byte流进行处理,tomcat封装了InternalInputBuffer。

Java代码  收藏代码
  1. public   class  InternalInputBuffer  extends  AbstractInputBuffer  
public class InternalInputBuffer extends AbstractInputBuffer

 核心函数为

public boolean parseRequestLine(boolean useAvailableDataOnly)

public boolean parseHeader()

有多个header,循环处理

Java代码  收藏代码
  1. public   boolean  parseHeaders()  
  2.     throws  IOException {  
  3.   
  4.     while  (parseHeader()) {  
  5.     }  
  6.   
  7.     parsingHeader = false ;  
  8.     end = pos;  
  9.     return   true ;  
  10. }  
    public boolean parseHeaders()
        throws IOException {

        while (parseHeader()) {
        }

        parsingHeader = false;
        end = pos;
        return true;
    }

 一个简单例子:

改写分析9中的例子

Java代码  收藏代码
  1. protected   boolean  processSocket(Socket socket)  throws  IOException {  
  2.       
  3.     InputStream inputsteam = socket.getInputStream();         
  4.     Request request = new  Request();  
  5.     InternalInputBuffer inputBuffer = new  InternalInputBuffer(request);  
  6.     inputBuffer.setInputStream(inputsteam);  
  7.       
  8.        request.setInputBuffer(inputBuffer);  
  9.          
  10.        inputBuffer.parseRequestLine(false );  
  11.          
  12.        System.out.println("@@@protocol=" +request.protocol().toString());  
  13.        System.out.println("@@@method=" +request.method().toString());  
  14.        /*  
  15.     BufferedReader in = new BufferedReader(new InputStreamReader(  
  16.             inputsteam));  
  17.     String inputLine;  
  18.     while ((inputLine = in.readLine()) != null) {     
  19.         System.out.println(inputLine);  
  20.     }  
  21.       
  22.     */   
  23.     return   true ;  
  24. }  
	protected boolean processSocket(Socket socket) throws IOException {
		
		InputStream inputsteam = socket.getInputStream();		
		Request request = new Request();
		InternalInputBuffer inputBuffer = new InternalInputBuffer(request);
		inputBuffer.setInputStream(inputsteam);
		
        request.setInputBuffer(inputBuffer);
        
        inputBuffer.parseRequestLine(false);
        
        System.out.println("@@@protocol="+request.protocol().toString());
        System.out.println("@@@method="+request.method().toString());
        /*
		BufferedReader in = new BufferedReader(new InputStreamReader(
				inputsteam));
		String inputLine;
		while ((inputLine = in.readLine()) != null) {	
		    System.out.println(inputLine);
		}
		
		*/
		return true;
	}

 在浏览器输入:localhost:8080/,测试结果

分享到:
评论

相关推荐

    apache-tomcat-8.5.50-src.zip

    分析Tomcat请求过程 链接器(Connector)与容器(Container) 解耦 Connector设计 监听服务端口,读取来自客户端的请求 将请求数据按照指定协议进行解析 根据请求地址匹配正确的容器进行处理 将响应返回客户端 ...

    JAVA上百实例源码以及开源项目源代码

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    JAVA上百实例源码以及开源项目

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    大厂学院SVIP十门合集|完结无秘

    02设计模式与框架源码分析 03JVM与GC调优 04JUC并发编程与源码分析 05拥抱云原生 06分布式存储极致性能Redis6 07微服务框架核心源码深度解析 08RPC框架核心源码深度解析 09大数据与人工智能 10监控专题 技术...

    看透springMvc源代码分析与实践

    第一篇(第1~7章)介绍网站相关的基础知识,涉及网站架构、网络通信的底层协议以及实现方法,并详细分析Tomcat的实现过程,旨在帮助大家整体掌握网站的结构并理解SpringMVC所处的位置。第二篇(第8~10章)对...

    落雨博客基于CAS框架的单点登录技术讲解(ppt+code实例+doc)配套资料

    [置顶] SSO单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas协议终极分析 http://blog.csdn.net/ae6623/article/details/8848107 目 录 1 引言 4 1.1 摘要 4 1.2 范围 4 1.3 读者对象 4 1.4 关键词 4 2 ...

    java开源包3

    7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...

    java开源包8

    7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...

    基于JavaWeb的大学生求职就业网设计与实现(源码)

    该论文详细分析了当前形势下就业项目管理系统的研究背景,还论述了就业项目管理系统的开发流程及其是如何实现信息的规范化管理、 快速查询等功能的。随着大学生人数的不断增加,毕业生就业越来越难。为了更好地使大学...

    java开源包11

    7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...

    java开源包7

    7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...

    java开源包1

    7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...

    java开源包4

    7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...

    java开源包10

    7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...

    java开源包2

    7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...

    java开源包6

    7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...

    java开源包5

    7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不需要修改主类就可以添加新的API支持) 注入型解释器(依据不同的返回格式注入相应的解释器) ...

Global site tag (gtag.js) - Google Analytics