您现在的位置:计算机技术学习网 > 技术中心 > WEB编程 > JSP >

Servlet/JSP 容器开发手记1

来源:未知 责任编辑:智问网络 发表时间:2013-09-26 23:49 点击:

2004 年春节假期,忽然心血来潮,想自己开发一个类似于tomcat(一个很好用的JSP运行平台)的Servlert/jsp(SUN企业级应用的首选)容器,实现Servlet2.3 和 jsp(SUN企业级应用的首选) 1.2 规范,
同时把开发过程的心得及体会写成手记供各位网友和程序员参考及指正,欢迎大家提供宝贵意见。开发完成后,将所有开发文档及
源码与大家分享。谢谢!


ESoftWind
2004/2/4

ServletInputStream

HTTP/1.1协议的请求包由一个请求行(RequestLine),多个请求头(Header),数据内容(BodyContent)组成,请求头与数据内容以 分开,请求头的Cotent-Length属性说明了BodyContent的长度。如果请求头中不包含Content-Length属性,说明请求包中不包含BodyContent

ServletInputStream实现读取BodyContent的输入流

read 方法的实现:

必须返回 -1 以表示流的结束,对底层来自Socket的输入流(底层流),除非客户端关闭了Socket,底层流是永远不会返回 -1 的,如果底层流的数据已读完,此时再调用底层流的 read 方法时,将造成当前线程的阻塞,因此,想依靠底流来返回 -1 来表明 ServletInputStream 的结束是不可行的。

因此,只能依靠Content-Length属性来判断流是否结束,如果已读取的数据总量超过Content-Length时,则返回 -1 。

对于Content-Type 等于 application/x-www-form-urlencoded 请求,Container 必须从底层流读取以解析request parameter , 对这种情况, ServletInputStream 不能简单通过读取底层流的数据来实现 read 方法(因为BodyContent已被读取了),而只能通过缓存读取 request parameter 时的数据来实现 ServletInputStream

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • JSP与Servlet
    • 自己动手写MiniBBS系列(基本篇)之用户登录
    • JSP取当前日期
    • JDBC 入门(一)
    • 打开一个jsp页面默认查询所有数据,调用action
    • 使用JSP标签库验证用户的输入(2)完
    • 自定义JSP标签(tag)浅议
    • WIN98/2000下的jsp服务器
    • JSP内建对象(二)
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1