1.1 servlet是什么
一个servlet是基于Java技术的web组件,由一个容器管理,以生成动态内容。就像其他基于Java技术的组件,servlets是平台独立的Java类,可编译成不依赖平台的字节码,其可以被动态加载和在以Java技术的web服务器上运行。容器,有时候叫做servlet引擎,是扩展的web服务器并提供servlet功能。Servlets与web客户端之间的交互是通过servlet容器的请求/响应模式实现的。
1.2 servlet 容器是什么
servlet容器是web server或者应用服务的一部分,通过发送的请求和响应提供网络服务,其对基于MIME的请求编码,形成基于MIME的响应。一个servlet容器也通过他们的生命周期管理servlet。
一个servlet容器可以构建于一个主机web服务中,或者作为一个追加的组件通过服务器的本地表示是API来安装。servlet容器也可以构建在或者可能安装在网络应用服务器中。
虽然所有的servlet容器必须支持HTTP协议来请求和响应,但是其他的协议 诸如HTTPS的请求和响应也支持。一个容器必须实现的的HTTP规范的版本是HTTP/1.0和HTTP/1.1.它可能在转发请求给servlet前修改客户端的请求,可能在响应发布到客户端之前由servlet修改它们,或者不需要转发给任何一个servlet直接对请求作出响应。
一个servlet容器可能在一个servlet执行的环境中设置安全约束。在一个Java平台或者J2SE中,J2EE环境中,这些约束应该由Java平台定义的权限体系设置。例如,高端的应用服务器可能限制一个线程对象的创建来确保容器中其他组件不被排挤。
1.3 例子
下面是典型的事件顺序:
1 一个客户端(即一个web浏览器)访问一个web服务器并发出一个HTTP请求。
2 web服务器接受到这个请求,转交给servlet容器。这个servlet容器可能作为主机web服务器运行在相同的进程中,运行在相同的主机不同的进程中或者一个web服务的不同的主机来处理请求。
3 servlet容器基于其servlet的配置文件决定调用哪个servlet,并且调用的时候传递请求和响应的对象。
4 servlet使用请求对象查找远程用户是谁,发送的请求的HTTP POST参数是什么和其他相关的数据。servlet执行完相应的业务逻辑返回客户端数据。其通过响应对象将数据返回给客户端。
5 一旦servlet处理完这个请求,servlet容器确保相应已经合理的刷新,并返还主机web服务器的控制权。
1.4 servlet与其他技术的比较
功能上,servlets在CGI程序与所有的servlet表达式之间。比如MSAPI或者apache模块。
但是servlet有以下优点:
1 比CGI脚本更快,因为使用了不同的处理模型。
2 使用了标准的API,能够支持许多web 服务器。
3 有所有Java编程语言的优点,比如容易开始和平台独立性
4 可以使用Java平台的大量API
1.5 与J2SE之间的关系
Java Servlet API 3.0 是J2SE中必须的API。Servlet 容器和部署其中的Servlet一定会遇见其他必备的组件,这些可在J2EE中找到,来在Java EE的环境中执行。
1.6 与servlet规范2.5的比较
1.6.1 监听顺序
先前的规范中,以随机的顺序调用监听器。在3.0中,监听器的调用顺序在这个章节中定义“Assembling the descriptor from web.xml,web-fragment.xml and annotations”
1.6.2 注解处理
在servlet2.5中,metadata-complete用于在部署期间扫描注解。web碎片的概念在2.5中是不存在的。然而在3.0中,metadata-complete在运行期间扫描所有注解和web碎片。描述符MUST不影响一个web应用程序中的所有注解。规范MUST的独有版本的实现扫描配置支持的所有注解,除非是metadat-complete指定的。