Tomcat 学习过程6

一、源码学习Servlet解析

  Tomcat 是 Servlet 和 JSP 的容器,而 JSP 又是建立在 Servlet 基础之上的。Tomcat 提供的 Servlet 解析是其主要的服务内容。处理 Servlet 的类主要位于目录 。org.apache.catalina.servlets中。Tomcat 能够响应的请求文件类型有 HTML、图片、CSS、Servlet、CGI、SSI、JSP。前三种属于静态资源,后四种属于动态资源。Tomcat 使用
DefaultServlet 响应静态资源,使用 InvokerServlet 响应 Servlet 请求,使用 CGIServlet 响应CGI 请 求 , 使 用 org.apache.catalina.ssi.SSIServlet 响 应 SSI 请求,使用
org.apache.jasper.servlet.JspServlet 响应 JSP 请求。

  下图是Tomcat中servlet类的继承关系。
    
    javax.servlet.http.HttpServlet,该类实现了HTTP协议的GenericServlet,重写了Servlet接口要求的函数,并增加了HTTP协议下的特殊操作函数,如果需要写一个HTTPServlet用于Web应用,那么servlet应当继承HttpServlet,这个HttpServlet类主要做了四项工作:
  (1)绑定资源文件:javax.servlet.http.localstrings,供HTTP访问期间的错误和警告信息提示;
  (2)访问HTTP Header信息,定义了两个变量:
  private static final string HEADER_IFMODESINCE = "if-Modified-Since"

  private static final string HEADER_LASTMOD = "Last-Modified";

  (3)重写了HTTP协议的service函数,该函数泳衣根据HTTP请求的命令,选择不同的函数(下面第四点记录的)来进行的不同操作。

  (4)实现不同请求命令的处理函数,通过service转发并选择,该类共定义了以下其中HTTP请求的命令:

  delete:客户端调用该命令删除服务器上的一个文档,有访问权限的用户都能够调用该命令,执行该命令时先进行该文档的备份。在执行删除时,会检查协议的合法性。

  head:用head命令可以检查网页的状态,命令的格式:HEAD/HTTP/1.1。如果我们只对关于网页或者资源的信息感兴趣,而不想检查资源本身的内容,可以使用head命令。head的使用方法与get正好相同,只是它返回web的正文内容。当一个web页被更新时,可以使用这个命令通知你,它也可以使浏览器做出是否根据其大小下载网页的决定。代码如下所示,先通过noBodyResponse去掉body实体,再进行get处理。

  get:可以发送多块数据,各个数据使用&字符分隔,get方法是默认的http请求方法,我们常用get方法来提交表单数据,然后用get方法提交的表单数据只经过简单的编码,同时它将作为URL的一部分想web服务器发送,因此,如果使用get方法来提交表单数据就存在安全隐患。例如Http://127.0.0.1/login.jsp?user=tomcat,很容易就可以辨识出表单提交的内容(问号后的内容)。另外由于get方法提交的数据是作为URL请求的一部分,所以提交的数据量不能太大,最大1024字节,它可以先进行错误检查。

  option:用于查询或者设定URI旗号,通过这个机制服务器得以和浏览器协商传输资料是要不要压缩,要不要缓存等。

  post:它是get方法 一个替代,它主要是像web服务器提交表单数据,尤其是大批量的数据。post方法克服了get方法的一些缺点。通过post提交数据表单时,数据不是作为URL请求的一部分二十作为标准数据传输给web服务器,这就克服了get方法中的信息无法保密和数据量太小的缺点。因此处于安全考虑,通常提交表单时采用post方法,它也会先进行错误检查。

  put:用以向web服务器提交少量数据。当put指定的网页不存在时,会自动刷新增网页,否则就取代旧网页或者变更名称。

  trace:用来做应用层的返回循环追踪,可以配合option指定max-forwards属性来决定追踪的深度,使用此指令将追踪出所经过的代理。

  

  

 

  

  

 

  

  

posted on 2016-08-16 15:57  李志超UNICORN  阅读(155)  评论(0)    收藏  举报