问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

说出Servlet的生命周期,并说出Servlet和CGI的区别是什么?

发布网友 发布时间:2022-04-25 12:31

我来回答

1个回答

热心网友 时间:2022-04-07 10:43

  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表明在处理请求的过程中发生了错误容器应该使用合适的方法清除该请求。UnavailableException表明servlet不能对请求进行处理,可能是暂时的,也可能是永久的。如果UnavailableException指明是永久性的,那么容器必须将servlet从服务中移除,调用它的destroy方法并释放它的实例。如果指明是暂时的,那么容器可以选择在异常信息里面指明的这个暂时无法服务的时间段里面不向它发送任何请求。在这个时间段里面被被拒绝的请求必须使用SERVICE_UNAVAILABLE (503)返回状态进行响应并且应该携带稍后重试(Retry-After)的响应头表明不能服务只是暂时的。容器也可以选择不对暂时性和永久性的不可用进行区分而全部当作永久性的并移除抛出异常的servlet。
  3.3线程安全
  开发者应该注意容器实现的请求和响应对象(注:即容器实现的HttpServletRequest和HttpServletResponese)没有被保证是线程安全的,这就意味着他们只能在请求处理线程的范围内被使用,这些对象不能被其它执行线程所引用,因为引用的行为是不确定的。
  4、服务结束
  容器没有被要求将一个加载的servlet保存多长时间,因此一个servlet实例可能只在容器中存活了几毫秒,当然也可能是其它更长的任意时间(但是肯定会短于容器的生存期)当容器决定将之移除时(原因可能是保存内存资源或者自己被关闭),那么它必须允许servlet释放它正在使用的任何资源并保存任何永久状态(这个过程通过调用destroy方法达到)。容器在能够调用destroy方法前,它必须允许那些正在service方法中执行的线程执行完或者在服务器定义的一段时间内执行(这个时间段在容器调用destroy之前)。一旦destroy方法被调用,容器就不会再向该实例发送任何请求。如果容器需要再使用该servlet,它必须创建新的实例。destroy方法完成后,容器必须释放servlet实例以便它能够被垃圾回收。
  区别在于servlet处于服务器进程中,
  它通过多线程方式运行其service方法,
  一个实例可以服务于多个请求,
  并且其实例一般不会销毁,
  而CGI对每个请求都产生新的进程,
  服务完成后就销毁,
  所以效率上低于servlet。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么有两个白马寺 白马涧为什么叫白马涧 什么叫"黑马"与"白马"? 白马的标志是什么意思? 恩典敬远(北京)企业管理有限责任公司怎么样? 北京恩典灵光咨询有限公司怎么样? 北京恩典伟业科技有限公司怎么样? 社评:美国在遏制中国吗中国如何回答 欧美遏制中国的崛起具体体现在哪些方面? 第二次世界大战结束后,美国采取的对华政策是什么? 什么是servlet简述servlet的生命周期 叙述servlet的生命周期过程以及过程中的主要方法及其作用 如何理解servlet的生命周期 说出servlet的生命周期,并说出servlet和cgi的区别 servlet的生命周期有哪几个阶段 说出Servlet的生命周期,并说出Servlet和CGI的区别。 什么是servlet,简述servlet的生命周期 如何标题优化,选什么付费软件好 有没有优化标题的工具啊? 请问淘宝什么软件做标题优化比较好?谢谢! 请问有谁知道淘宝标题优化有哪些软件比较好用?谢谢!!! 淘宝标题优化哪个好?推广工具哪个好? 什么软件标题优化比较好呢? 怎么给图片加上水印?别人去不掉 标题优化软件,那个好用呢? 急求一份大一寒假社会实践报告,3000字就行 谁可以发些茶叶标志的图片~ 图片怎么加水印? 暑假在销售房地产公司实习的实践报告怎么写(大约5000字左右) 谢谢_百度... 请问高手,淘宝有哪款软件做标题优化比较好用?谢谢! servlet的生命周期是什么?jsp都有哪些对象和动作? servlet的生命周期分为几个阶段 servlet的生命周期是什么,不要用网络上的那些一模一样,用自己理解的说... servlet的生命周期,求大神指教! Servlet的生命周期,并说出Servlet和CGI的区别,Servlet与JSP的区别 简述servlet的两套生命周期的特点 苹果12更新到ios15耗电快吗? 为什么很多相机都不iPhone12摄影清晰? 芦荟胶有很多作用,长时间在脸上涂芦荟胶会有哪些效果? 芦荟胶经常搽脸好吗 车出了剐蹭是对方全责,我向保险公司报了案,怎么撤回? 在保险报案后应该如何撤销报案 保险报案后可以取消吗 做完热玛吉脸有点红,怎么办好? 新华百万医疗保险报案了可以撤销吗 车险报案了怎么撤销? ...下眼部热玛吉10天后的效果呀?还有这热玛吉做完脸变国字脸又是咋回... 为什么做完热玛吉皮肤干燥? 施工承包合同按计价方式哪几种,它们分别的适用范围是什么? 热玛吉做好脸上怎么出红血丝了怎么办