`
qilixiang012
  • 浏览: 200721 次
文章分类
社区版块
存档分类
最新评论

javaEE servlet与jsp生命周期

 
阅读更多

Servlet的生命周期是由servlet的容器来控制的。分为3个阶段:初始化阶段、运行阶段、销毁阶段。

初始化阶段:

初始化阶段步骤:

ØServlet容器加载servlet类,把它的. Class文件中的数据读到内存中。

ØServlet容器创建servletConfig对象。servletConfig对象包含了servlet的初始化配置信息。此外servlet容器还会使得

servletConfig对象与当前的web应用的servletContext对象关联。

ØServlet容器创建servlet对象。

ØServlet容器调用servlet对象的init(ServletConfigconfig)方法。

通过初始化步骤,创建了servlet对象和servletConfig对象,并且servlet对象与servletConfig对象关联,

servletConfig对象又与当前对象的servletContext对象关联当servlet容器完成servlet后,servlet对象只要通过

getServletContext()方法就能得到web应用的servletContext对象。

注:servlet初始化的情况:

(1当web应用处于运行阶段时,特定的servlet被客户端首次请求访问。

(2在web.xml文件中为servlet设置了<load-on-startup>元素

<servlet>

<servlet-name>servlet1</servlet-name>

<servlet-class>servlet.servlet1</servlet-class>

<load-on-startup>0</load-on-startup>

</servlet>

说明:

在servlet的配置当中,<load-on-startup>5</load-on-startup>的含义是:

标记容器是否在启动的时候就加载这个servlet。

当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;

当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。

正数的值越小,启动该servlet的优先级越高。

(2)当web应用被重新启动时,web应用中的所有servlet会在特定的时间被重新初始化。


运行阶段

在这个阶段sevlet可以随时响应客户端的请求。当servlet容器接到访问特定的servlet请求时,servlet容器会创建针对

这个请求的servletRequestservletResponse对象,然后调用service()方法,并把这两个对象当做参数传递给

service()方法。Service()方法通过servletRequest对象获得请求信息,并处理该请求,再通过servletResponse对象生

成响应结果。

【不管是post还是get方法提交,都会在service中处理,然后,由service来交由相应的doPost或doGet方法处理,如果

你重写了service方法,就不会再处理doPost或doGet了,如果重写sevice()方法,可以自己转向doPost()或doGet()

方法】

注:当servlet容器把servlet生成的响应结果发送给客户后,servlet容器会销毁servletRequestsevletResponse

象。


销毁阶段

当Web应用被终止时,servlet容器会先调用web应用中所有的servlet对象的destroy()方法,然后在销毁servlet对

象。此外容器还会销毁与servlet对象关联的servletConfig对象。

在destroy()方法的实现中,可以释放servlet所占用的资源。如关闭文件输入输出流,关闭与数据库的连接。

注:sevlet的生命周期中,servlet的初始化和销毁只会发生一次,因此init()destroy()方法只能被servlet容器调用

一次,而service()方法取决与servlet被客户端访问的次数。



Jsp生命周期

Jsp页必须转换成Servlet,才能对请求进行服务,因此Jsp的底层完全是Servlet。这样看来Jsp的生命周期就包括

六个阶段:转换、编译、加载并实例化、jspInit()调用(即初始化)、_jspService()调用(即请求处理)、

jspDestroy()调用(即销毁)。

转换:就是web容器将Jsp文件转换成一个包含了Servlet类定义的java源文件。

编译:把在转换阶段创建的java源文件编译成类文件。

Jsp生命周期其他的四个阶段跟Servlet生命周期相同。

<wbr>现在来具体讲一下:</wbr>

<wbr><wbr><wbr><wbr>前一部分:</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><strong>1.创建:</strong>就是创建一个JSP源文件</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><strong>2.部署:</strong>将JSP安装到服务器上(JaveEE服务器或单机运行的JSP服务器)</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><strong>3.解释和编译:</strong>将JSP源文件解释成java源代码文件,然后将该源文件编译成可在服务器上运行的java类,这</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

个类成为JSP页面的实现类。(这一步可能在以后多个地方都会遇到)

<wbr><wbr><wbr><wbr>后一部分:</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><strong>1.装载和实例化:</strong>前提是完成了前一部分的几步得到了一个实现类。服务器端会为JSP页面查找已有的实现</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

类,如果没有,就把这个实现类载入JVM中;载入JVM后就立刻产生一个该类的实例,或者在第一次请求时执行。

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><strong>2.初始化:</strong><span style="color:black">初始化</span><span style="color:black">JSP</span><span style="color:black">页面对象。如果你希望在初始化期间执行某些代码,那么你可以向页面中增加一个初始</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

化方法(method),在初始化的时候就会调用该方法。

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><strong>3.请求处理:</strong>由页面对象响应客户端的请求。需要注意的是,单个对象实例将处理所有的请求。在执行完处理</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

之后,服务器将一个响应(response)返回给客户端。这个响应完全是由HTML标签和其他数据构成的,并不会把任

何Java源码返回给客户端。

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><strong>4.生命周期终止</strong><span style="font-family:宋体"><strong>:</strong>服务器不再把客户端的请求发给JSP。在所有的请求处理完成之后,会释放掉这个类的所有</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

实例。一般这种情况会发生在服务器关闭的时候,但是也有其他的可能性,比如服务器需要保存资源、检测到有JSP文

件更新,或者由于其他某些原因需要终止实例等情况。如果想让代码执行清除工作,那么可以实现一个方法,并且在

这个类实例释放之前调用该方法。


__________________________如下内容转载自:http://www.strutshome.com/index.php/archives/58

第四个问题:Servlet的生命周期是什么呢?
Servlet的生命周期,简单的概括分为四步:servlet类加载—>实例化—>服务—>销毁。
Servlet实例化的步骤:
1、Servlet容器启动时:读取Web.xml配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,同时将ServletConfig对象作为参数来调用Servlet对象的init方法。
2、在Servlet容器启动后:客户首次向Servlet发出请求,Servlet容器会 判断内存中是否存在指定的Servlet对象,如果没有则创建它,然后根据客户的请求创建HttpRequest、 HttpResponse对象,从而调用Servlet对象的service方法。
3、Servlet的类文件被更新后,重新创建Servlet
Servlet容器在启动时自动创建Servlet,这是由在Web.xml文件中为Servlet设置的<load-on-startup>属性决定的,并且从中我们也能看到同一个类型的Servlet对象在Servlet容器中以单例的形式存在。
如果没有设置loadOnStartup,则第一次请求的时候实例化。如果设置loadOnStartup则分三种情况:
loadOnStartup < 0
即负数的情况下,web容器启动的时候不做实例化处理,servlet首次被调用时做实例化。这种情况和没有设置loadOnStartup是一样的。
loadOnStartup > 0
web容器启动的时候做实例化处理,顺序是由小到大,正整数小的先被实例化。
loadOnStartup = 0
web容器启动的时候做实例化处理,相当于是最大整数,因此web容器启动时,最后被实例化。
例如下面的例子:
<servlet>
<servlet-name>action<servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>name</param-name>
<param-value>wangsan</param-value>
</init-param>
<init-param>
<param-name>address</param-name>
<param-value>beijing</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
下面对上面的配置节信息进行解析
servlet-name:Servlet对象的名称
servlet-class:创建Servlet对象所要调用的类
param-name:参数名称
param-value:参数值
load-on-startup:Servlet容器启动时加载Servlet对象的顺序
servlet-mapping/servlet-name:要与servlet中的servlet-name配置节内容对应
url-pattern:客户访问的Servlet的相对URL路径
当Servlet容器启动的时候读取<servlet>配置节信息,根据<servlet-class>配置节信息创建 Servlet对象,同时根据<init-param>配置节信息创建HttpServletConfig对象,然后执行Servlet对象 的init方法,并且根据<load-on-startup>配置节信息来决定创建Servlet对象的顺序,如果此配置节信息为负数或者没有配置,那么在Servlet容器启动时,将不加载此Servlet对象。当客户访问Servlet容器时,Servlet容器根据客户访问的URL地址,通过<servlet-mapping>配置节中的<url-pattern>配置节信息找到指定的Servlet对象,并调用此Servlet对象的service方法。


分享到:
评论

相关推荐

    javaEE j2ee 大学考试题库,j2ee开发面试题库-1

    2. 一个 servlet 的生命周期不包括( )方法。 A. init()方法 B. destroy()方法 C. service()方法 D. invalidate()方法 3. 给定如下代码片段: request.setAttribute("name","zhang"); response.sendRedirect(...

    Java™ Servlet 规范.

    2.3 Servlet 生命周期 .......................................................................................................................................16 2.3.1 加载和实例化 .........................

    Java/JavaEE 学习笔记

    第三章 Servlets生命周期................222 第四章 资源访问 ......................225 第五章 状态跟踪...230 第六章 过滤器 ...234 第七章 Web Application Life Cycle Events ........................235 ...

    spring3.2入门到大神(备java基础、jsp、servlet,javaee精髓)

    框架介绍,IoC思想、DI依赖注入、Bean的实例方式、Bean种类、Bean作用域范围、Bean生命周期管理、依赖注入、注解装配Bean、整合Junit测试、WEB开发集成spring、AOP思想、AOP原理解剖、spring 传统aop开发、...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e...

    Servlet3.1规范(最终版) PDF

    16 2.3 Servlet 生命周期 ....................................................................................................................................... 16 2.3.1 加载和实例化 ....................

    Java Web程序设计教程

    3.3.3servlet的生命周期 49 3.3.4load-on-startupservlet 50 3.4自定义标签库 51 3.5预处理用户请求:filter 53 3.6使用listener 56 3.7项目实战——用户登录 59 本章小结 62 课后练习 63 第4章sql与jdbc ...

    从Java走向Java+EE+.rar

    5.1 Servlet的概念和生命周期 65 5.2 如何编写Servlet 67 5.3 使用Eclipse和Tomcat开发Servlet实例——输出字符串响应 72 5.4 小结 77 第6章 JSP——前后台更好地分离 79 6.1 JSP的概念 79 6.2 JSP页面...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    10.8.1 实体的生命周期与回调事件 444 10.8.2 使用专门的监听器实现回调 448 10.8.3 为全部实体配置默认监听器 450 10.8.4 排除监听器 452 10.9 本章小结 455 第11章 JPA的查询支持 456 11.1 查询API 457 11.1.1 ...

    本科毕业设计开题报告(计算机协会信息管理系统的设计与实现V5)

    PowerDesigner是Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与IT结合起来,可帮助部署有效的企业体系架构,并为研发生命周期管理提供强大的分析与设计技术。 六、研究方法 该毕业设计采用的研究方法...

    J2EE学习笔记(J2ee初学者必备手册)

    第三章 Servlets生命周期................222 第四章 资源访问 ......................225 第五章 状态跟踪...230 第六章 过滤器 ...234 第七章 Web Application Life Cycle Events ........................235 JSP...

    Java学习笔记-个人整理的

    {1.4.1}整数与浮点数}{23}{subsection.1.4.1} {1.4.1.1}浮点数原理}{24}{subsubsection.1.4.1.1} {1.4.2}格式化输出浮点数}{24}{subsection.1.4.2} {1.4.3}\texttt {char}}{24}{subsection.1.4.3} {1.4.4}转义...

Global site tag (gtag.js) - Google Analytics