解释和编译的工作完成之后,JSP的生命周期将分为三个阶段:
◆装载和实例化:服务端为JSP页面查找已有的实现类,如果没找到则创建新的JSP页面的实现类,然后把这个类载入JVM。在实现类装载完成之后,JVM将创建这个类的一个实例。这一步会在装载后立刻执行,或者在第一次请求时执行。
◆初始化:初始化JSP页面对象。如果你希望在初始化期间执行某些代码,那么你可以向页面中增加一个初始化方法(method),在初始化的时候就会调用该方法。
◆请求处理:由页面对象响应客户端的请求。需要注意的是,单个对象实例将处理所有的请求。在执行完处理之后,服务器将一个响应(response)返回给客户端。这个响应完全是由HTML标签和其他数据构成的,并不会把任何Java源码返回给客户端。
◆生命周期终止:服务器不再把客户端的请求发给JSP。在所有的请求处理完成之后,会释放掉这个类的所有实例。一般这种情况会发生在服务器关闭的时候,但是也有其他的可能性,比如服务器需要保存资源、检测到有JSP文件更新,或者由于其他某些原因需要终止实例等情况。如果想让代码执行清除工作,那么可以实现一个方法,并且在这个类实例释放之前调用该方法。
在我们调用bean的时候有3个参数是需要设定的 ,他们分别是:id=““ class=““ scope=““在这三个参数中,id表示我们要创建的事例对象名称;class表示我们调用的bean,也就是你编写bean完成后通过编译生成的.class文件;scope就表示我们创建的bean的事例对象的生命周期!
我们经常看到这样的代码来控制bean的生命周期:
<jsp:useBean id=“hello“ class=“helloworld“ scope=“page“>
或者<jsp:useBean id=“hello“ class=“helloworld“ scope=“request“>
或者<jsp:useBean id=“hello“ class=“helloworld“ scope=“session“>
或者<jsp:useBean id=“hello“ class=“helloworld“ scope=“application“>
在这里我们看到在生命周期的参数里有4个不同的值,他们分别是:page,request,session,application
下边我们分别来分析一下:
1. Page scope:他的生命周期是最短的,当一张网页由jsp程序产生,并送到客户端后,属于page scope的bean也将被释放到内存,失去它的作用。
举例:(1)首先我们做一个表单页(pageform.htm),代码如下:
<html>
<head>
<title>test page scope</title>
<meta http-equiv=“Content-Type“ content=“text/html; charset=gb2312“>
</head>
<body bgcolor=“#FFFFFF“ text=“#000000“>
<form name=“form1“ method=“post“ action=“pagescope.jsp“>
<input type=“text“ name=“scope“>
<input type=“submit“ name=“Submit“ value=“Submit“>
</form>
</body>
</html>
(2)然后用jsp页(pagescope.jsp)来处理表单
<%@ page language=“java“ import=“java.lang.*,justfortest;“%>
<jsp:useBean id=“hello“ class=“justfortest“ scope=“page“>
<jsp:setProperty name=“hello“ property=“*“/>
</jsp:useBean>
<jsp:getProperty name=“hello“ property=“scope“/>
(3)javabean的源代码(juestfortest.java):
import java.lang.*;
public class justfortest {
private String scope;//私有变量
public justfortest()//构造函数
{
}
public void setscope(String scope)
{this.scope=scope;
}
public String getscope()
{
return this.scope;
}
}
2.request scope的生命周期和jsp 程序中的request对象同步;当一个jsp程序通过forward程序将request对象传到下一个 jsp页的时候,request的bean也将伴随 request对象一起送出,因此通过forward程序串起来的jsp程序都可以共享相同的Bean,使jsp程序间的信息传递更容易实现。
举例:(1)首先我们做一个表单页(pageform.htm),代码如下:
<html>
<head>
<title>test page scope</title>
<meta http-equiv=“Content-Type“ content=“text/html; charset=gb2312“>
</head>
<body bgcolor=“#FFFFFF“ text=“#000000“>
<form name=“form1“ method=“post“ action=“pagescope.jsp“>
<input type=“text“ name=“scope“>
<input type=“submit“ name=“Submit“ value=“Submit“>
</form>
</body>
</html>
(2)然后用jsp页(pagescope.jsp)来处理表单
<%@ page language=“java“ import=“java.lang.*,justfortest;“%>
<jsp:useBean id=“hello“ class=“justfortest“ scope=“request“>
<jsp:setProperty name=“hello“ property=“*“/>
</jsp:useBean>
<jsp:forward page=“pagescope1.jsp“/>
(3)pagescope1.jsp源代码
<%@ page language=“java“ import=“java.lang.*,justfortest;“%>
<jsp:useBean id=“hello“ class=“justfortest“ scope=“request“/>
<jsp:getProperty name=“hello“ property=“scope“/>
(4)对于Bean的代码我们不做任何改变
我们可以看到浏览器输出的是你输入的字符,这个过程中:首先表单页(pageform.htm)提交信息到pagescope.jsp做处理,把信息送到justfortest 这个bean 并且通过setscope()函数把hellobean的私有变量做赋值,同时我们建立了hello这个对象实例,通过<jsp:forward page=“pagescope1.jsp“/>我们来到pagescope1.jsp, 在这里我们通过<jsp:getProperty name=“hello“ property=“scope“/>来输出我们在pagescope.jsp里边给hello的私有变量(private String scope)的值。Bean结束生命周期,释放内存;
在这里我们清楚的看到两个页共享同一个bean 并且达到共享信息(private String scope)的目的;
3. session scope的生命周期,他的生命周期和服务器设定的setMaxInactiveInterval(interval)是相同的,就是说session存在那么它就不消失。
举例:(1)首先我们做一个表单页(pageform.htm),代码如下:
<html>
<head>
<title>test page scope</title>
<meta http-equiv=“Content-Type“ content=“text/html; charset=gb2312“>
</head>
<body bgcolor=“#FFFFFF“ text=“#000000“>
<form name=“form1“ method=“post“ action=“pagescope.jsp“>
<input type=“text“ name=“scope“>
<input type=“submit“ name=“Submit“ value=“Submit“>
</form>
</body>
</html>
(2)然后用jsp页(pagescope.jsp)来处理表单
<%@ page language=“java“ import=“java.lang.*,justfortest;“%>
<jsp:useBean id=“hello“ class=“justfortest“ scope=“session“>
<jsp:setProperty name=“hello“ property=“*“/>
</jsp:useBean>
/*如果我们在这里加一句<%session.setMaxInactiveInterval(1)%>让session在1秒内超时,那么我们在转向到pagescope1.jsp里边,虽然同样可以看到结果,但是当我们超过1秒后,刷新页面,我们就看到输出为null 这说明hello已经被回收;假如我们写的是<%session.setMaxInactiveInterval(1800)%>,那么在1800秒内你只要有互动,那么session不会过期,我们按刷新,它的值就不会消失*/
<%response.sendRedirect(“pagescope1.jsp“)%>
(3)pagescope1.jsp源代码
<%@ page language=“java“ import=“java.lang.*,justfortest;“%>
<jsp:useBean id=“hello“ class=“justfortest“ scope=“session“/>
<jsp:getProperty name=“hello“ property=“scope“/>
(4)对于Bean的代码我们不做任何改变
4. application scope,它的生命周期是最长的,他可以和jsp container同步,就是说只要我们设定一个bean的生命周期是application,那么我们在其他任何jsp里边都可以共享这个bean,通过这个bean来共享信息。
举例我就省了。
◆装载和实例化:服务端为JSP页面查找已有的实现类,如果没找到则创建新的JSP页面的实现类,然后把这个类载入JVM。在实现类装载完成之后,JVM将创建这个类的一个实例。这一步会在装载后立刻执行,或者在第一次请求时执行。
◆初始化:初始化JSP页面对象。如果你希望在初始化期间执行某些代码,那么你可以向页面中增加一个初始化方法(method),在初始化的时候就会调用该方法。
◆请求处理:由页面对象响应客户端的请求。需要注意的是,单个对象实例将处理所有的请求。在执行完处理之后,服务器将一个响应(response)返回给客户端。这个响应完全是由HTML标签和其他数据构成的,并不会把任何Java源码返回给客户端。
◆生命周期终止:服务器不再把客户端的请求发给JSP。在所有的请求处理完成之后,会释放掉这个类的所有实例。一般这种情况会发生在服务器关闭的时候,但是也有其他的可能性,比如服务器需要保存资源、检测到有JSP文件更新,或者由于其他某些原因需要终止实例等情况。如果想让代码执行清除工作,那么可以实现一个方法,并且在这个类实例释放之前调用该方法。
在我们调用bean的时候有3个参数是需要设定的 ,他们分别是:id=““ class=““ scope=““在这三个参数中,id表示我们要创建的事例对象名称;class表示我们调用的bean,也就是你编写bean完成后通过编译生成的.class文件;scope就表示我们创建的bean的事例对象的生命周期!
我们经常看到这样的代码来控制bean的生命周期:
<jsp:useBean id=“hello“ class=“helloworld“ scope=“page“>
或者<jsp:useBean id=“hello“ class=“helloworld“ scope=“request“>
或者<jsp:useBean id=“hello“ class=“helloworld“ scope=“session“>
或者<jsp:useBean id=“hello“ class=“helloworld“ scope=“application“>
在这里我们看到在生命周期的参数里有4个不同的值,他们分别是:page,request,session,application
下边我们分别来分析一下:
1. Page scope:他的生命周期是最短的,当一张网页由jsp程序产生,并送到客户端后,属于page scope的bean也将被释放到内存,失去它的作用。
举例:(1)首先我们做一个表单页(pageform.htm),代码如下:
<html>
<head>
<title>test page scope</title>
<meta http-equiv=“Content-Type“ content=“text/html; charset=gb2312“>
</head>
<body bgcolor=“#FFFFFF“ text=“#000000“>
<form name=“form1“ method=“post“ action=“pagescope.jsp“>
<input type=“text“ name=“scope“>
<input type=“submit“ name=“Submit“ value=“Submit“>
</form>
</body>
</html>
(2)然后用jsp页(pagescope.jsp)来处理表单
<%@ page language=“java“ import=“java.lang.*,justfortest;“%>
<jsp:useBean id=“hello“ class=“justfortest“ scope=“page“>
<jsp:setProperty name=“hello“ property=“*“/>
</jsp:useBean>
<jsp:getProperty name=“hello“ property=“scope“/>
(3)javabean的源代码(juestfortest.java):
import java.lang.*;
public class justfortest {
private String scope;//私有变量
public justfortest()//构造函数
{
}
public void setscope(String scope)
{this.scope=scope;
}
public String getscope()
{
return this.scope;
}
}
2.request scope的生命周期和jsp 程序中的request对象同步;当一个jsp程序通过forward程序将request对象传到下一个 jsp页的时候,request的bean也将伴随 request对象一起送出,因此通过forward程序串起来的jsp程序都可以共享相同的Bean,使jsp程序间的信息传递更容易实现。
举例:(1)首先我们做一个表单页(pageform.htm),代码如下:
<html>
<head>
<title>test page scope</title>
<meta http-equiv=“Content-Type“ content=“text/html; charset=gb2312“>
</head>
<body bgcolor=“#FFFFFF“ text=“#000000“>
<form name=“form1“ method=“post“ action=“pagescope.jsp“>
<input type=“text“ name=“scope“>
<input type=“submit“ name=“Submit“ value=“Submit“>
</form>
</body>
</html>
(2)然后用jsp页(pagescope.jsp)来处理表单
<%@ page language=“java“ import=“java.lang.*,justfortest;“%>
<jsp:useBean id=“hello“ class=“justfortest“ scope=“request“>
<jsp:setProperty name=“hello“ property=“*“/>
</jsp:useBean>
<jsp:forward page=“pagescope1.jsp“/>
(3)pagescope1.jsp源代码
<%@ page language=“java“ import=“java.lang.*,justfortest;“%>
<jsp:useBean id=“hello“ class=“justfortest“ scope=“request“/>
<jsp:getProperty name=“hello“ property=“scope“/>
(4)对于Bean的代码我们不做任何改变
我们可以看到浏览器输出的是你输入的字符,这个过程中:首先表单页(pageform.htm)提交信息到pagescope.jsp做处理,把信息送到justfortest 这个bean 并且通过setscope()函数把hellobean的私有变量做赋值,同时我们建立了hello这个对象实例,通过<jsp:forward page=“pagescope1.jsp“/>我们来到pagescope1.jsp, 在这里我们通过<jsp:getProperty name=“hello“ property=“scope“/>来输出我们在pagescope.jsp里边给hello的私有变量(private String scope)的值。Bean结束生命周期,释放内存;
在这里我们清楚的看到两个页共享同一个bean 并且达到共享信息(private String scope)的目的;
3. session scope的生命周期,他的生命周期和服务器设定的setMaxInactiveInterval(interval)是相同的,就是说session存在那么它就不消失。
举例:(1)首先我们做一个表单页(pageform.htm),代码如下:
<html>
<head>
<title>test page scope</title>
<meta http-equiv=“Content-Type“ content=“text/html; charset=gb2312“>
</head>
<body bgcolor=“#FFFFFF“ text=“#000000“>
<form name=“form1“ method=“post“ action=“pagescope.jsp“>
<input type=“text“ name=“scope“>
<input type=“submit“ name=“Submit“ value=“Submit“>
</form>
</body>
</html>
(2)然后用jsp页(pagescope.jsp)来处理表单
<%@ page language=“java“ import=“java.lang.*,justfortest;“%>
<jsp:useBean id=“hello“ class=“justfortest“ scope=“session“>
<jsp:setProperty name=“hello“ property=“*“/>
</jsp:useBean>
/*如果我们在这里加一句<%session.setMaxInactiveInterval(1)%>让session在1秒内超时,那么我们在转向到pagescope1.jsp里边,虽然同样可以看到结果,但是当我们超过1秒后,刷新页面,我们就看到输出为null 这说明hello已经被回收;假如我们写的是<%session.setMaxInactiveInterval(1800)%>,那么在1800秒内你只要有互动,那么session不会过期,我们按刷新,它的值就不会消失*/
<%response.sendRedirect(“pagescope1.jsp“)%>
(3)pagescope1.jsp源代码
<%@ page language=“java“ import=“java.lang.*,justfortest;“%>
<jsp:useBean id=“hello“ class=“justfortest“ scope=“session“/>
<jsp:getProperty name=“hello“ property=“scope“/>
(4)对于Bean的代码我们不做任何改变
4. application scope,它的生命周期是最长的,他可以和jsp container同步,就是说只要我们设定一个bean的生命周期是application,那么我们在其他任何jsp里边都可以共享这个bean,通过这个bean来共享信息。
举例我就省了。