Scope在English中的意思是范围,JSP中有四个限定范围的对象,分别是Page,Request,Session,Application;它们的范围依次增大!~
通俗点来说,这个范围就像变量的作用域一样!
一、Page
Page顾名思义就是页面的意思,它的范围最小,只作用在单一Page中,跑出这个Page就失效!可以分别用pageContext对象的getAttribute()和setAttribute()方法获得和设置属性值。
Page1.jsp
- <html>
- <head>
- <title>
- Page1.jsp
- </title>
- </head>
- <body>
- <% pageContext.setAttribute("userName","Tony"); pageContext.setAttribute("Pin","0907"); %>
- <jsp:forward page="PageScope2.jsp"/>
- </body>
- </html>
Page2.jsp
- <html>
- <head>
- <title>
- Page2.jsp
- </title>
- </head>
- <body>
- <% String Name=(String)pageContext.getAttribute("userName"); String Password = (String)pageContext.getAttribute("Pin"); out.println("Name = "+Name); out.println("Password = "+ Password); %>
- </body>
- </html>
(语法加亮插件不支持JSP,HTML加亮搞得参差不齐,看着真别扭 T^T)
当Page1.jsp forward到Page2.jsp中后,Page Scope对象失效,因此在Page2.jsp中执行的结果是Name=null Password=null。所以,如果数据设置为Page范围的话,数据只能在同一个页面上取得,其它页面都无法获得该数据。
二、Request
Request的范围限定在请求和被请求的两个页面之间,随后这个属性就失效了。可以分别用request对象的getAttribute()和setAttribute()方法获得和设置属性值。如果有很多页面,范围都限定为Request的话,对象中的属性就一直生效并且可以在页面中传递使用。
参考以上Page1.jsp和Page2.jsp两个页面,如果把里面的pageContext对象换成request,Page2.jsp中就能正常输出结果:Name=Tony Password=0907
三、Session
Session,即会话的意思。它的作用范围是客户端与服务器建立持续连接的那段时间,与服务器断开连接后,这个属性失效。方法依然是上述的set和get,对象是session。例如上淘宝购物,用户登陆后,服务器与用户的Session就一直维持着,直到用户关掉浏览器。
四、Application
范围最大,时间最长,作用于整个Web Application中,也就说整个系统的页面都能使用application对象中的属性。就像全局变量要慎重使用,application对象使用不当会对服务器造成负担,所以三思而后用!
JSP中使用Java Bean,也要为一个Bean限制作用范围(默认为Page)。四个范围解释同上。使用方法是在定义一个Bean时说明:<jsp:useBean id="redBean" class="coreservlets.RedBean" scope="page|request|session|application" />