首页 > 代码库 > Servlet 2.4 规范之第一篇:概览

Servlet 2.4 规范之第一篇:概览

      写在前面的话:

      本系列是对《Java Servlet Specification Version 2.4》的完全翻译,力争但不保证完美表达出英文原文的思想内涵。如有疏漏之处,还请各位海涵并留言纠正。

      SRV.1.1    Servlet是什么?

      Servlet是一种用于生成动态内容的Java Web组件技术,由容器(Container)负责管理其生命周期。和Java领域的其他技术一样,Servlet被编译为平台中立的class文件,然后动态的载入并运行在Web server上。容器(Container),也叫Servlet引擎,是用于支持Servlet功能的Web server扩展。Servlets在容器中通过请求-响应这种会话模式与Web客户端进行交互。

      SRV.1.2    Servlet容器是什么?

      Servlet容器是Web Server或Application Server的一部分。Web Server或Application Server,它以如下方式提供网络服务:接收客户端请求—>解码MIME格式的请求数据—>处理—>生成MIME格式的应答—>返回给客户端。Servlet容器负责加载运行Servlet并管理其生命周期。

      Servlet容器可直接内置在主机的Web Server上,或者通过本地扩展API安装为Web Server的插件。当然,Servlet容器也可以内置或安装在用于Web服务的Application Servers上。

      所有的Servlet容器必须支持用于处理请求/应答的HTTP协议,协议版本须支持HTTP/1.0和HTTP/1.1。除此之外,还可以支持基于请求/应答模式的其他协议,如HTTPS等。由于容器可以实现基于HTTP/1.1的缓存机制,故而,它是可以修改客户端发来的请求以及Servlet返回给客户端的应答的。总之,Servlet容器可以全权包装处理所有的请求及应答。

      Servlet容器还可以对Servlet的执行环境进行安全验证,在J2SE和J2EE下,基于Java平台定义的所有授权机制都是可以使用的。例如,为了保证Servlet容器本身的其他组件不被干扰和冲突,高端应用服务系统完全可以限制Servlet线程的创建。

      另外,Servlet容器必须支持的J2SE最低版本是1.3。

      SRV.1.3    例子

      下面是一个典型的事件流:

      1. 客户端(通常是浏览器)通过HTTP协议访问一个Web Server。

      2. Web Server接收客户端请求并传给Servlet容器,Servlet容器可能运行在Web Server的同一进程下,或者同一主机的不同进程下,甚至与Web Server不同主机的其他进程下。总之Servlet容器可以运行在任何可访问的地方。

      3. Servlet容器根据配置文件(web.xml)来判断哪个Servlet要被调用,然后交由该Servlet来处理请求并生成应答信息。

      4. Servlet根据传进来的Request对象判定客户端的身份,当然,在Request对象中,还会包含HTTP POST递交的其他参数以及其他相关的请求信息。然后Servlet执行对应的处理逻辑,生成需要返回给客户端的数据,最终Servlet通过Response对象把数据传递给客户端。

      5. 一旦Servlet完成对请求的处理过程,并且将应答信息正确地返回给客户端,它就会把控制权交还给主机的Web Server。这样,从客户端发起请求到接收到应答信息的整个过程就彻底结束了。

      SRV.1.4    Servlet与其他技术的比较

      从功能上讲,Servlet与CGI(通用网关技术,Common Gateway Interface)、NSAPI(Netscape Server API)或Apache特定组件技术是相互类似的。

      但Servlet相对于其他的Server扩展技术来说,主要有以下几大优势:

      1. Servlet比CGI更快,因为它使用了不同的进程模型。Servlet对每个请求都启动一个信的线程处理,而CGI是启动新的进程。

      2. Servlet使用标准API实现,该标准被无数的Web Server支持。

      3. Servlet拥有Java技术相对应的所有优势,包括易于开发和平台无关性等。

      4. Servlet能访问和使用大量的Java平台API。

      SRV.1.5    Servlet与J2EE的关系

      Servlet 2.4对应于J2EE 1.4版本。Servlet容器和Servlet部署在满足J2EE执行规范的环境上。

      SRV.1.6    与Servlet 2.3 版本的兼容性

      SRV.1.6.1    HttpSessionListener.sessionDestroyed

      在2.3规范中,该方法被定义为:通知一个session已经失效。

      在2.4规范中,该方法被改为如下定义:通知一个session即将失效。

      因此,2.4规范中该方法是在session已失效之前执行。如果你的代码还是沿用旧规范,必须改为按照2.4规范执行。

      SRR.1.6.2    ServletRequest的getRemotePort,getLocalName,getLocalAddr,getLocaPort方法

      在2.4版本中,接口ServletRequest增加了以下几个方法:

      public int getRemotePort()

              返回发起请求的客户端或者最后一个代理节点的IP端口号。

      public java.lang.String getLocalName()

              返回接收请求的主机名。

      public java.lang.String getLocalAddr()

              返回接收请求的IP地址。

      public int getLocalPort()

              返回接收请求的端口号。

      值得注意的是,某些情况下这些新增的方法会造成源代码兼容性问题,例如开发者实现了ServletRequest接口。为避免这种情况出现,开发者必须确保所有新增的方法都已添加实现。

文档信息

  • 译者:张大爷
  • 原文网址:http://www.cnblogs.com/flance/
  • 版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
 
<style type="text/css">.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } </style>