首页 > 代码库 > 【转】JSP内置对象详细介绍(下)

【转】JSP内置对象详细介绍(下)

第四个问题: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方法。
第五个问题:pageContext与其他JSP内置对象的关系?
pageContext对象是JSP中很重要的一个内置对象,不过在一般的JSP程序中,很少用到它。它是 javax.servlet.jsp.PageContext类的实例对象,可以使用PageContext类的方法。实际上,pageContext对象提供了对JSP页面所有的对象及命名空间的访问。pageContext对象能够存取其他隐含对象。

方法

返回值

方法说明

getException()

Exception

获取当前的exception内置对象, 不过此网页要为error page

getOut()

JspWriter

 获得网页的输出流

getPage()

Object

 获得页面Servlet 实体

getRequest()

ServletRequset

 获得网页的请求

getResponse()

ServletResponse

 获得网页的响应

getServletConfig()

ServletConfig

 获得网页的ServletConfig 对象

getServeltContext()

ServletContext

 获得网页的执行环境

getSession()

HttpSession

 获得和网页有联系的会话

getAttribute(String name,int scope)

Object

获取指定范围的name属性值

getAttributeNamesInScope(int scope)

Enumeration

获取指定范围所有属性名称

getAttributesScope(String name)

int

获取属性名称为name的属性范围

removeAttribute(String name)

void

移除属性名称为name的 属性

removeAttribute(String name,int scope)

void

移除指定范围的属性名称为name的 属性

setAttribute(String name,Object value,int scope)

void

设置指定范围的name属性

findAttribute(String name)

Object

寻找所有范围的属性名称为name的属性

第六个问题:request属性的特点?
request:指属性在一次请求范围内有效。如果页面从给一个页面跳转到另一个页面,那么该属性就失效了。这里所指的跳转是指客户端跳转,比如客户单击超链接跳转到其他 页面或者通过浏览器地址栏浏览其他页面。如果使用服务器端跳转<jsp:forward>,则该属性仍然生效。同理使用request对象的 setAttribute()和getAttribute()。
参考内容:
讲解servlet生命周期的文章:

http://www.cnblogs.com/AaronLi/archive/2011/09/02/2164355.html

详细讲解jsp内置对象的文章,此文章排版不错,尤其表格是使用将知识讲解的十分合理,但是内容比较多需要狠狠吃透才行的。

http://www.blogjava.net/RoyPayne/archive/2012/01/05/367930.htm

转载自:Struts教程网(网易旗下) ? JSP内置对象详细介绍(下)