写在前面的话:

本系列是对《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接口。为避免这种情况出现,开发者必须确保所有新增的方法都已添加实现。

文档信息

 

Servlet 2.4 规范之第一篇:概览的更多相关文章

  1. Servlet 2.4 规范之第二篇:Servlet接口

    Servlet接口是Servlet API的最核心抽象类.所有的servlets都直接实现了这个接口,或者以更通用的方式继承了这个接口的实现类.Servlet API自带了两个实现了Servlet接口 ...

  2. Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览

    ​ ​本文是Spring Cloud专栏的第一篇文章,了解本篇文章内容有助于更好的理解后面文章 ​ 一.网站架构演变过程 1-1.传统架构 传统的SSH架构,分为三层架构 web控制层.业务逻辑层.数 ...

  3. Java面试题之基础篇概览

    Java面试题之基础篇概览 1.一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,且public的类名必须与文件名相一致. 2.Ja ...

  4. spring 第一篇(1-1):让java开发变得更简单(下)转

    spring 第一篇(1-1):让java开发变得更简单(下) 这个波主虽然只发了几篇,但是写的很好 上面一篇文章写的很好,其中提及到了Spring的jdbcTemplate,templet方式我之前 ...

  5. 微信小程序教程(第一篇)

    目录 第一篇小程序概述 第二篇如何注册接入小程序及搭建开发环境 第三篇小程序的架构及实现机制,信道服务及会话管理 第四篇小程序开发基本框架及其限制与优化 第五篇小程序开发项目实例,测试及发布 .... ...

  6. 剖析Elasticsearch集群系列第一篇 Elasticsearch的存储模型和读写操作

    剖析Elasticsearch集群系列涵盖了当今最流行的分布式搜索引擎Elasticsearch的底层架构和原型实例. 本文是这个系列的第一篇,在本文中,我们将讨论的Elasticsearch的底层存 ...

  7. 第一篇:webservice初探

    接触webservice也有一段时间了,为了查缺补漏,把知识点系统化,准备写几篇博文梳理下webservice的知识点,这是第一篇,对webservice进行大致的介绍. 1.什么是webservic ...

  8. Jersey+mybatis实现web项目第一篇

    ---恢复内容开始--- Jesery第一篇:实现Jesery前后台页面交互,Form表单提交,后台控制页面跳转 该项目中有实现的功能: Mybatis实现后台数据持久化 Jersey页面数据提交 后 ...

  9. go [第一篇]初识

    [第一篇] 简介 Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发 ...

随机推荐

  1. hdu2847(暴力)

    去年看的一道题目,但是竟然傻傻的用dfs+循环链表去做. 简直傻到爆.  不过现在做这题还是想了好久而且还有好几次WA,其实这题还是很水的.直接暴力枚举就行了,枚举的前提是要算好复杂度, 可以知道的是 ...

  2. highCharts图表应用-实现多种图表的显示

    在数据统计和分析业务中,有时需要在一个图表中将柱状图.饼状图.曲线图的都体现出来,即可以从柱状图中看出具体数据.又能从曲线图中看出变化趋势,还能从饼状图中看出各部分数据比重.highCharts可以轻 ...

  3. HDU 5265 pog loves szh II (技巧)

    题意:给一个数字序列,要求再其中找到两个数,其和再模p的结果是最大的,求此和. 思路:先将输入的元素模p,排序.结果可能有两种情况: (1)a+b大于p:肯定由两个最大的数之和来产生. (2)a+b小 ...

  4. js获取当前url信息

    window.location 属性 描述 hash 设置或获取 href 属性中在井号"#"后面的分段. host 设置或获取 location 或 URL 的 hostname ...

  5. POJ 2249 Binomial Showdown

    // n 个 数 取 k个数的取法// C(n,k) 注意些细节#include <iostream> #include <string> #include<sstrea ...

  6. 【转】IOS中定时器NSTimer的开启与关闭

    原文网址:http://blog.csdn.net/enuola/article/details/8099461 调用一次计时器方法: myTimer = [NSTimer scheduledTime ...

  7. 嵌入式 Linux进程含义知多少

    理想情况下,您应该明白在您的系统中运行的每一个进程.要获得所有进程的列表,可以执行命令 ps -ef(POSIX 风格)或 ps ax(BSD 风格).进程名有方括号的是内核级的进程,执行辅助功能(比 ...

  8. MySql通用分页存储过程

    MySql通用分页存储过程 1MySql通用分页存储过程 2 3过程参数 4p_cloumns varchar(500),p_tables varchar(100),p_where varchar(4 ...

  9. linux_2015_0827_linux中一些常用词的发音and…

    linux相关 Unix: [ ju:niks ] 发音 (yew-nicks) 尤里克斯 GNU [ gəˈnju: ] 发音 (guh-noo) 葛扭 Linux: [ 'li:nэks ] 里那 ...

  10. html --- VML --- javascript --- 旋转矩形

    矢量标记语言 --- Vector Markup Language 运行它的代码需要打开IE的兼容性视图 如有疑问请参考:http://msdn.microsoft.com/en-us/library ...