servlet规范定义Servlet生命周期.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
servlet规范定义Servlet生命周期

servlet有良好的生存期的定义,包括怎么加载、实例化、初始化、处理客户端请求及怎么被移除。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。   1、加载和实例化   容器负责加载和实例化一个servlet。实例化和加载能发生在引擎启动的时候,也能推迟到容器需要该servlet为客户请求服务的时候。   首先容器必须先定位servlet类,在必要的情况下,容器使用通常的Java类加载工具加载该servlet,可能是从本机文件系统,也能是从远程文件系统甚至其他的网络服务。容器加载servlet类以后,他会实例化该类的一个实例。需要注意的是可能会实例化多个实例,例如一个servlet类因为有不同的初始参数而有多个定义,或servlet实现SingleThreadModel而导致容器为之生成一个实例池。   2、初始化   servlet加载并实例化后,容器必须在他能够处理客户端请求前初始化他。初始化的过程主要是读取永久的设置信息,昂贵资源(例如JDBC连接)及其他仅仅需要执行一次的任务。通过调用他的init方法并给他传递唯一的一个(每个servlet定义一个)ServletConfig对象完成这个过程。给他传递的这个设置对象允许servlet访问容器的设置信息中的名称-值对(name-value)初始化参数。这个设置对象同时给servlet提供了访问实现了ServletContext接口的具体对象的方法,该对象描述了servlet的运行环境。   2.1初始化的错误处理   在初始化期间,servlet实例可能通过抛出UnavailableException 或 ServletException异常表明他不能进行有效服务。如果一个servlet抛出一个这样的异常,他将不会被置入有效服务并且应该被容器即时释放。在此情况下destroy方法不会被调用因为初始化没有成功完成。在失败的实例被释放后,容器可能在所有时候实例化一个新的实例,对这个规则的唯一例外是如果失败的servlet抛出的异常是UnavailableException并且该异常指出了最小的无效时间,那么容器就会至少等待该时间指明的时限才会重新试图创建一个新的实例。   2.2、工具因素   当工具(注:根据笔者的理解,这个工具可能是应用服务器的某些检查工具,通常是验证应用的合法性和完整性)加载和内省(introspect)一个web应用时,他可能加载和内省该应用中的类,这个行为将触发那些类的静态初始方法被执行,因此,研发者不能假定只要当servlet的init方法被调用后他才处于活动容器运行状态(active container runtime)。作为一个例子,这意味着servlet不能在他的静态(类)初始化方法被调用时试图建立数据库连接或连接EJB容器。   3、处理请求   在servlet被适当地初始化后,容器就能使用他去处理请求了。每一个请求由ServletRequest类型的对象代表,而servlet使用ServletResponse回应该请求。这些对象被作为service方法的参数传递给servlet。在HTTP请求的情况下,容器必须提供代表请求和回应的HttpServletRequest和HttpServletResponse的具体实现。需要注意的是容器可能会创建一个servlet实例并将之放入等待服务的状态,不过这个实例在他的生存期中可能根本没有处理过所有请求。   3.1、多线程问题   容器可能同时将多个客户端的请求发送给一个实例的service方法,这也就意味着研发者必须确保编写的servlet能处理并发问题。如果研发者想防止这种缺省的行为,那么他能让他编写的servlet实现SingleThreadModel。实现这个类能确保一次只会有一个线程在执行service方法并且一次性执行完。容器能通过将请求排队或维护一个servlet实例池满足这一点。如果servlet是分布式应用的一部分,那么,那么容器可能在该应用分布的每个JVM中都维护一个实例池。如果研发者使用synchronized关键字定义service方法(或是doGet和doPost),容器将排队处理请求,这是由底层的java运行时系统需求的。我们强烈推荐研发者不要同步service方法或HTTPServlet的诸如doGet和doPost这样的服务方法。   3.2、处理请求中的异常   servlet在对请求进行服务的时候有可能抛出ServletException或UnavailableException异常。ServletException表明在处理请求的过程中发生了错误容器应该使用合适的方法清除该请求。Unavailabl

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档