当前位置:编程学习 > JS >>

Servlet/JSP 容器开发手记1

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

补充:Web开发 , Jsp ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,