Jsp四种变量作用范围

来源:互联网 发布:阿里云服务器部署java 编辑:程序博客网 时间:2024/05/16 19:19

转自:Ronbay的新浪博客
JSP中变量的范围分为四种:page,request,session和application
这四个范围依序从前到后,范围越来越大

一、page范围
在page范围内定义的变量,只能在同一个页面内部访问。在JSP页面中,演示如下代码:

<%pageContext.setAttribute("name","Johnson");out.println(pageContext.getAttribute("name"));%>

上面的代码中,在page范围内,定义了一个名称为name的属性,其值为Johnson,
第二行代码将该属性的值打印出来。注意:这样定义的这个name属性,在这个页面之外
的部分是访问不到的。考虑到page范围只是在一个页面中共享数据,其范围是非常小的。
需要注意的是,在page范围,以及其他三种范围中,存储的值都只能是引用类型的值。
下面的例子演示怎么将一个整数存入page范围之内。

<%pageContext.setAttribute("amount",new Integer(100));out.println(pageContext.getAttribute("amount"));%>

二、request范围
在Java的WEB应用程序中,可以将一个变量值存入request范围中,然后可以将request
对象传递给下一个页面,那么下一个页面中,可以获得从上一个页面传送过来的request
对象中保存的属性值。
这里,我们修改上一章中的登陆案例,来演示request范围属性的使用。
我们希望用户登录成果以后,能够在登陆成功页面,即welcome.jsp页面中,显示
该登陆用户的用户名,那么可以修改前面登陆案例中的验证登陆用户的servlet如下:

public void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {String name=request.getParameter("name");String pwd=request.getParameter("pwd");User user=new User();user.setName(name);user.setPwd(pwd);String dbName=request.getRealPath("goods.mdb");//转向器String url="";try {db d1 = new db(dbName);if(d1.isUserValid(user)){request.setAttribute("name",name);url="welcome.jsp";}else{url="failed.jsp";}RequestDispatcher rd=request.getRequestDispatcher(url);//把用户名存入request scope中//设置属性rd.forward(request,response);}catch (Exception ex) {ex.printStackTrace();}}

在上面的代码中,用户登陆成功以后,把用户名存入request范围,
request.setAttribute(“name”,name);
然后获取将要转向的页面的转向器,

url=”welcome.jsp”;RequestDispatcher rd=request.getRequestDispatcher(request,response);

这样,本servlet中的request对象就会被传递到下一个页面,在下一个页面,
即welcome.jsp中,就可以通过

request.getAttribute(“name”);

的方式获取到name属性,即登陆用户的用户名。

三、session范围
当用户通过浏览器和服务器连通以后,服务器为该用户在服务器上分配一个供该用户专
用的内存空间,这个内存空间中保存着用户访问该网站服务器期间的一些信息,这些信
息称为会话信息,也就是Session信息。服务器为每个访问该服务器的连接分配一个唯
一的编号,该编号用以唯一确认该用户。这个编号就是我们通常说的SessionID。
有了这个会话信息空间以后,用户就可以把和本次访问相关的一些信息保存在这个会话
信息空间中。会话信息空间中保存的信息只和本次连接有关。
需要注意的是,通过同一台主机打开多个浏览器访问服务器的时候,每一个浏览器连
接对应一个会话。要设置一个session范围的变量,可以使用下面的方法。

<%session.setAttribute("name",”Johnson”);out.println(session.getAttribute("name"));%>

四、application范围
一台WEB服务器启动以后,在服务器上有一个由所有连接共享的内存空间,
这就是application范围空间。在application范围中定义的变量,可以由所有连接共享。
一个连接对application范围中变量的修改,会体现到另外一个连接中。
要设置一个application范围的变量,可以使用如下方法:

<%application.setAttribute("name",”Johnson”);out.println(application.getAttribute("name"));%>
0 0
原创粉丝点击