Servlet
来源:互联网 发布:二手书店网站知乎 编辑:程序博客网 时间:2024/06/06 04:01
servlet的定义及其生命周期 (2009-03-02 23:23:07)转载▼标签: javaj2eeservlet分类: jsp-servlet
Servlet的生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求、提供服务。
在代码中,Servlet生命周期由接口javax.servlet.Servlet定义。所有的Java Servlet 必须直接或间接地实现javax.servlet.Servlet接口,这样才能在Servlet Engine上运行。Servlet Engine提供network Service,响应MIME request,运行Servlet Container。 javax.servlet.Servlet接口定义了一些方法,在Servlet 的生命周期中,这些方法会在特定时间按照一定的顺序被调用。如下图所示。
Servlet的生命周期
Servlet 如何被加载(Load)、被实例化(Instantiated)
ServletEngine 负责实例化和加载Servlet,这个过程可以在Servlet Engine 加载时执行,可以在Servlet 响应请求时执行,也可以在两者之间的任何时候执行(配置为load onstart up的 servlet是在容器启动时被加载的)。
Servlet如何被初始化(Initialized)
ServletEngine 加载好Servlet 后,必须要初始化它。初始化时Servlet 可以从数据库里读取初始数据,建立JDBC Connection,或者建立对其他有价值的资源的引用。
在初始化阶段,Init()方法被调用。这个方法在javax.servlet.Serlet接口中定义。Init( )方法以一个Servlet 配置文件(ServletConfig 型)为参数。Servlet configuration 对象由Servlet Engine 实现,可以让Servlet 从中读取一些name-value对的参数值。ServletConfig对象还可以让Servlet接受一个Servlet Context对象。
Servlet 如何处理请求
Servlet 被初始化以后,就处于能响应请求的就绪状态。每个对Servlet 的请求由一个Servlet Request 对象代表。Servlet 给客户端的响应由一个Servlet Response对象代表。当客户端有一个请求时,Servlet Engine 将ServletRequest 和ServletResponse对象都转发给Servlet,这两个对象以参数的形式传给Service方法。这个方法由javax.servlet.Servlet定义并由具体的Servlet 实现。
Servlet还可以实现 ServletRequest 和ServletResponse接口。ServletRequest接口可以让Servlet 获取客户端请求中的参数,如form data、request信息、协议类型,等等。Servlet 可以从ServletInputStream流中读取request 数据。ServletResponse接口允许Servlet设置response headers和status codes。实现这个接口可以使Servlet能访问ServletOutputStream流用来向客户端返回数据。
Servlet如何被释放
ServletEngine 没有必要在Servlet 生命周期的每一段时间内都保持Servlet的状态。Servlet Engine可以随时随意使用或释放Servlet。因此,你不能依赖Servlet class或其成员存储信息。当Servlet Engine判断一个Servlet应当被释放时(比如说Engine准备Shut down 或需要回收资源),Engine必须让Servlet 能释放其正在使用的任何资源,并保存持续性的状态信息。这些可以通过调用Servlet的destroy方法实现。 在Servlet Engine 释放一个Servlet 以前,必须让其完成当前实例的service方法或是等到timeout(如果Engine定义了timeout)。当Engine释放一个Servlet以后,Engine将不能再将请求转发给它,Engine必须彻底释放该Servlet并将其标明为可回收的(给garbage collection)。
在Servlet API中最重要的是Servlet interface。所有的Servlets执行这个interface的方式有很多种:或者是直接的,或者通过extending这个class执行它,如 HttpServlet。这个Servlet interface 提供并安排Servlet与客户端联系的方法。Servlet 编写者可以在他们开发Servlet程序时提供更多一些或所有这样的方法。
当一个Servlet接收来自客户端的调用请求时,它接收两个对象:一个是ServletRequest,另外一个是ServletResponse。这个ServletRequest class 概括从客户端到服务器之间的联系,而 ServletResponseclass 概括从Servlet返回客户端的联系。
ServletRequestinterface 可以获取到这样一些信息,如由客户端传送的参数名称,客户端正在使用的协议,产生请求并且接收请求的服务器远端主机名。它也提供获取数据流的Servlet、ServletInputStream,这些数据是客户端引用中使用HTTP POST和PUT方法递交的。一个ServletRequest的子类可以让Servlet获取更多的协议特性数据。
例如,HttpServletRequest包含获取HTTP-specific头部信息的方法。ServletResponse interface 给出相应客户端的Servlet方法。它允许Servlet设置内容长度和回应的MIME类型,并且提供输出流ServletOutputStream,通过编写者可以发回相应数据。ServletResponse子类可以给出更多protocol-specific容量的信息。例如,HttpServletResponse 包含允许Servlet操作HTTP-specific头部信息的方法。
总结与运用:
在实践中可以配置一个load on start up 的Servlet,它随服务器启动而初始化,在其init方法中启用一些参数设置,例如把某些变量存入ServletContext,这样以后在其他Servlet中就可以获得该参数了;而在其destroy中写入一些资源回收的代码,当服务器关闭时就可以自动关闭相遇的资源了。
- Servlet
- servlet
- Servlet
- servlet
- Servlet
- servlet
- servlet
- Servlet
- Servlet
- servlet
- Servlet
- servlet
- servlet
- servlet
- Servlet
- servlet
- servlet
- servlet
- Android开发中的单元测试-初级教程(01)
- On GUI Architecture: GUI应用的若干问题和模式
- UIApplication keyWindow rootViewController 为 nil 的问题
- EQ管理的四步曲
- C#页面清除缓存
- Servlet
- Java和指针
- 【编程小工具】通过depends工具查看dll
- Word文件转PDF 文件时文字跳出流程图的问题【转】
- java中static关键字的详细解析
- CSDN--很好的网站
- ehCache与JRebel
- GSM网络结构图
- Silverlight Gantt包