自己做实验讨论一下javabean中scope的不同取值的区别和其默认值问题。
1,先讨论request,session与application的区别,俩文件如下:
Trick.java
package trick;
import java.io.*;
public class Trick
{ int i=1;
public int getI()
{ i++;
return i;
}
}
trick.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="trick.Trick"%>
<HTML><BODY>
<jsp:useBean id="trick" class="trick.Trick" scope="request/session/application" />
<jsp:getProperty name="trick" property="i" />
</BODY><HTML>
运行trick.jsp
Request: 刷新页面3次屏幕显示2,重启浏览器屏幕显示2;
Session: 刷新页面3次数字从2开始递增至4,重启浏览器屏幕重新从2开始递增;
Application: 刷新页面3次数字从2开始递增4,重启浏览器从4开始递增。
结论:
应用范围大小比较:request<session<application
Request: 请求期间有效
Session: 会话期间有效
Application: 服务器运行期间有效
2,因为page纯JSP自己弄出来的一范围,所以单独讨论。
新增一个页面:
trick1.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="trick.Trick"%>
<HTML><BODY>
<jsp:useBean id="trick" class="trick.Trick" scope="request" />
<jsp:getProperty name="trick" property="i" />
<jsp:forward page="trick.jsp" />
</BODY><HTML>
运行trick1.jsp
Trick1.jsp,trick.jsp中同取scope=”request”: 屏幕显示3;
Trick1.jsp,trick.jsp中同取scope=”page”:屏幕显示2;
结论:
应用范围大小:page<request
Page:当前页面有效
3,scope不赋值的情况下的默认值。
trick1.jsp中scope=”request” ;
trick.jsp中去掉scope;
运行trick1.jsp,屏幕显示2,与scope=”page”时结果相同,故理论上默认值应为page。
看过一些文献里说默认值为request,可能是版本问题,有待考证。