zoukankan      html  css  js  c++  java
  • 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接口。为避免这种情况出现,开发者必须确保所有新增的方法都已添加实现。

    文档信息

     
  • 相关阅读:
    poj3669 广搜
    检索所有课程都选修的的学生的学号与姓名
    UVA10160 Servicing Stations
    uva11205 The broken pedometer 子集生成
    poj1101 the game 广搜
    poj3009 Curling 2.0 深搜
    poj 1564 Sum It Up 搜索
    HDU 2268 How To Use The Car (数学题)
    codeforces 467C George and Job(简单dp,看了题解抄一遍)
    HDU 2267 How Many People Can Survive(广搜,简单)
  • 原文地址:https://www.cnblogs.com/flance/p/3721828.html
Copyright © 2011-2022 走看看