servlet规范定义的Servlet生命周期.doc

servlet规范定义的Servlet生命周期.doc

ID:51154759

大小:36.52 KB

页数:3页

时间:2020-03-09

servlet规范定义的Servlet生命周期.doc_第1页
servlet规范定义的Servlet生命周期.doc_第2页
servlet规范定义的Servlet生命周期.doc_第3页
资源描述:

《servlet规范定义的Servlet生命周期.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、servlet有良好的生存期的定义,包括怎么加载、实例化、初始化、处理客户端请求及怎么被移除。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。  1、加载和实例化  容器负责加载和实例化一个servlet。实例化和加载能发生在引擎启动的时候,也能推迟到容器需要该servlet为客户请求服务的时候。  首先容器必须先定位servlet类,在必要的情况下,容器使用通常的Java类加载工具加载该servlet,可能是从本机文件系统,也能是从远程文件系统甚至其他的网络服务。容器加载servlet类以后,他会实例化

2、该类的一个实例。需要注意的是可能会实例化多个实例,例如一个servlet类因为有不同的初始参数而有多个定义,或servlet实现SingleThreadModel而导致容器为之生成一个实例池。  2、初始化  servlet加载并实例化后,容器必须在他能够处理客户端请求前初始化他。初始化的过程主要是读取永久的设置信息,昂贵资源(例如JDBC连接)及其他仅仅需要执行一次的任务。通过调用他的init方法并给他传递唯一的一个(每个servlet定义一个)ServletConfig对象完成这个过程。给他传递的这个设置对象允许servlet访问容器的设置信息中的名称-值对(n

3、ame-value)初始化参数。这个设置对象同时给servlet提供了访问实现了ServletContext接口的具体对象的方法,该对象描述了servlet的运行环境。  2.1初始化的错误处理  在初始化期间,servlet实例可能通过抛出UnavailableException或ServletException异常表明他不能进行有效服务。如果一个servlet抛出一个这样的异常,他将不会被置入有效服务并且应该被容器即时释放。在此情况下destroy方法不会被调用因为初始化没有成功完成。在失败的实例被释放后,容器可能在所有时候实例化一个新的实例,对这个规则的唯一例

4、外是如果失败的servlet抛出的异常是UnavailableException并且该异常指出了最小的无效时间,那么容器就会至少等待该时间指明的时限才会重新试图创建一个新的实例。  2.2、工具因素  当工具(注:根据笔者的理解,这个工具可能是应用服务器的某些检查工具,通常是验证应用的合法性和完整性)加载和内省(introspect)一个web应用时,他可能加载和内省该应用中的类,这个行为将触发那些类的静态初始方法被执行,因此,研发者不能假定只要当servlet的init方法被调用后他才处于活动容器运行状态(activecontainerruntime)。作为一个例

5、子,这意味着servlet不能在他的静态(类)初始化方法被调用时试图建立数据库连接或连接EJB容器。  3、处理请求  在servlet被适当地初始化后,容器就能使用他去处理请求了。每一个请求由ServletRequest类型的对象代表,而servlet使用ServletResponse回应该请求。这些对象被作为service方法的参数传递给servlet。在HTTP请求的情况下,容器必须提供代表请求和回应的HttpServletRequest和HttpServletResponse的具体实现。需要注意的是容器可能会创建一个servlet实例并将之放入等待服务的状态

6、,不过这个实例在他的生存期中可能根本没有处理过所有请求。  3.1、多线程问题  容器可能同时将多个客户端的请求发送给一个实例的service方法,这也就意味着研发者必须确保编写的servlet能处理并发问题。如果研发者想防止这种缺省的行为,那么他能让他编写的servlet实现SingleThreadModel。实现这个类能确保一次只会有一个线程在执行service方法并且一次性执行完。容器能通过将请求排队或维护一个servlet实例池满足这一点。如果servlet是分布式应用的一部分,那么,那么容器可能在该应用分布的每个JVM中都维护一个实例池。如果研发者使用sy

7、nchronized关键字定义service方法(或是doGet和doPost),容器将排队处理请求,这是由底层的java运行时系统需求的。我们强烈推荐研发者不要同步service方法或HTTPServlet的诸如doGet和doPost这样的服务方法。  3.2、处理请求中的异常  servlet在对请求进行服务的时候有可能抛出ServletException或UnavailableException异常。ServletException表明在处理请求的过程中发生了错误容器应该使用合适的方法清除该请求。UnavailableException表明servlet

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。