


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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表明在处理请求的过程中发生了错误容器应该使用合适的方法清除该请求。UnavailableException表明servlet不能对请求进行处理,可能是暂时的,也可能是永久的。如果UnavailableException指明是永久性的,那么容器必须将servlet从服务中移除,调用他的destroy方法并释放他的实例。如果指明是暂时的,那么容器能选择在异常信息里面指明的这个暂时无法服务的时间段里面不向他发送所有请求。在这个时间段里面被被拒绝的请求必须使用SERVICE_UNAVAILABLE (503)返回状态进行响应并且应该携带稍后重试(Retry-After)的响应头表明不能服务只是暂时的。容器也能选择不对暂时性和永久性的不可用进行区分而全部当作永久性的并移除抛出异常的servlet。3.3线程安全研发者应该注意容器实现的请求和响应对象(注:即容器实现的HttpServletRequest和HttpServletResponese)没有被确保是线程安全的,这就意味着他们只能在请求处理线程的范围内被使用,这些对象不能被其他执行线程所引用,因为引用的行为是不确定的。4、服务结束容器没有被需求将一个加载的servlet保存多长时间,因此一个servlet实例可能只在容器中存活了几毫秒,当然也可能是其他更长的任意时间(不过肯定会短于容器的生存期)当容器决定将之移除时(原因可能是保存内存资源或自己被关闭),那么他必须允许servlet释放他正在使用的所有资源并保存所有永久状态(这个过程通过调用destroy方法达到)。容器在能够调用destroy方法前,他必须允许那些正在service方法中执行的线程执行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年房产中介与房地产开发商合作开发协议范本
- 2025二手汽车二手买卖合同协议书1
- 2025版企业危机公关与媒体应对内训服务合同模板
- 2025版石灰石行业节能减排技术改造合同
- 2025版高科技企业实习生创新项目合作合同
- 2025年度物联网设备软件测试与功能实现合同范本
- 2025年沙发企业品牌形象设计合同下载
- 2025年度生鲜产品市场推广与销售渠道建设合同
- 贵州省思南县2025年上半年事业单位公开遴选试题含答案分析
- 医疗健康产业市场前瞻报告
- 《数理经济学讲义》课件
- 《均衡价格理论》课件
- 工程造价咨询服务方案(技术方案)
- 立式气液分离器计算
- 高中休学半年后复学申请书
- 旧变压器移位专项方案
- 订单采购模板
- 幼儿园优质公开课:中班科学《有趣的漩涡》教案
- 学生记录评价手册
- 学生健康状况调查表
- 工伤结清合同范本
评论
0/150
提交评论