jsp四种属性范围
在JSP提供了四种属性的保存范围。所谓的属性保存范围,指的就是一个设置的对象,可以在多个页面中保存并可以继续使用。它们分别是:page、request、session、appliction。
1、page属性范围(pageContext范围)当前页面
page属性范围(使用pageContext表示,但一般来讲习惯于将这种范围称为page范围)只在一个页面范 围内有效,不能发生跳转,也就是说,在跳转到另一个页面后,就不能取得它的属性了。
单页面:
设置和取得page范围的属性
1 <% // 设置page的属性范围,此属性只在当前JSP页面中起作用 2 pageContext.setAttribute("name", "李华"); 3 pageContext.setAttribute("age", "18"); 4 %> 5 <% // 从page属性范围中取出属性,并执行向下转型操作 6 String username =(String) pageContext.getAttribute("name"); 7 String userage =(String) pageContext.getAttribute("age"); 8 %> 9 10 <h3>姓名:<%=username %></h3> <!-- 输出取得的属性内容 --> 11 <h3>年龄:<%=userage %></h3> <!-- 输出取得的属性内容 -->
![](https://img2018.cnblogs.com/blog/1556312/201907/1556312-20190711202852949-470891578.png)
可行!!
双页面:
在test.jsp页面设置page范围的属性
<% // 设置page的属性范围,此属性只在当前JSP页面中起作用 pageContext.setAttribute("name", "李华"); pageContext.setAttribute("age", "18"); %> <jsp:forward page="forward.jsp"> 在forward.jsp页面取得page范围的属性 <% //从page属性范围中取出属性,并执行向下转型操作 String username =(String) pageContext.getAttribute("name"); String userage =(String) pageContext.getAttribute("age"); %> <h3>姓名:<%=username %></h3> <!-- 输出取得的属性内容 --> <h3>年龄:<%=userage %></h3> <!-- 输出取得的属性内容 -->
![](https://img2018.cnblogs.com/blog/1556312/201907/1556312-20190711203352497-728763201.png)
错误!!
2、request属性范围(一次请求)
如果要在服务器跳转,也就是请求转发(<jsp:forward page="forward.jsp">这种方式;)之后属性可以继续保存下来,则可以使用request属性范围操作,request属性范围表示的是在服务器跳转之后,所有设置的内容在下一个页面依然会被保留下来。
服务器跳转:
// 在test.jsp中设置request范围的属性 <% // 设置request的属性范围,此属性只在服务器跳转中起作用 request.setAttribute("name", "李华"); request.setAttribute("age", "18"); %> <jsp:forward page="forward.jsp">
// 在forward.jsp中取得request范围的属性 <% //从request属性范围中取出属性,并执行向下转型操作 String username =(String) request.getAttribute("name"); String userage =(String) request.getAttribute("age"); %> <h3>姓名:<%=username %></h3> <!-- 输出取得的属性内容 --> <h3>年龄:<%=userage %></h3> <!-- 输出取得的属性内容 -->
![](https://img2018.cnblogs.com/blog/1556312/201907/1556312-20190711202852949-470891578.png)
可行!!
使用超链接跳转(可以理解为重定向):
// 在test.jsp中设置request范围的属性 <% // 设置request的属性范围,此属性只在服务器跳转中起作用 request.setAttribute("name", "李华"); request.setAttribute("age", "18"); %> <!-- 跳转后,地址栏改变,属于客户端跳转 --> <a href = "forward.jsp">超链接获取属性</a> // 在forward.jsp中取得request范围的属性 <% //从request属性范围中取出属性,并执行向下转型操作 String username =(String) request.getAttribute("name"); String userage =(String) request.getAttribute("age"); %> <h3>姓名:<%=username %></h3> <!-- 输出取得的属性内容 --> <h3>年龄:<%=userage %></h3> <!-- 输出取得的属性内容 -->
![](https://img2018.cnblogs.com/blog/1556312/201907/1556312-20190711205515901-1678146063.png)
错误!!
关于request属性范围的理解
request表示的是客户端的请求,正常情况下,一次请求服务器只会给予一次回应,那么这个时候如果是服务器跳转,请求的地址栏没有改变,所以也就相当于回应了一次,而如果地址栏改变了,就相当于是发出了第二次请求,则第一次请求的内容肯定就已经消失了,所以无法取得。
session属性范围(一次会话)
如果现在希望一个属性设置之后,可以再任何一个与设置页面相关的页面取得的话,则就可以使用session属性范围,使用session设置属性之后,不管是客户端还是服务器端跳转,只要属性设置了就都可以取得。(以下就不举例子,只需将上述两个里面的pageContext或request换成session即可)
application属性范围(一个项目)
如果现在希望设置一个属性,可以让所有的用户(每一个session)都能看得见的话,则可以将属性范围设置成application,这样属性就保存在了服务器之上。
一般地,如果能使用request就尽量不要使用session,能使用session就尽量不要使用application