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> <!-- 输出取得的属性内容 -->


 

 

  可行!!


双页面:

 

在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> <!-- 输出取得的属性内容 -->


 

  错误!!

 

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> <!-- 输出取得的属性内容 -->

 

 

  可行!!

使用超链接跳转(可以理解为重定向):

//  在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>      <!-- 输出取得的属性内容 -->   

 

 错误!!

 关于request属性范围的理解

   request表示的是客户端的请求,正常情况下,一次请求服务器只会给予一次回应,那么这个时候如果是服务器跳转,请求的地址栏没有改变,所以也就相当于回应了一次,而如果地址栏改变了,就相当于是发出了第二次请求,则第一次请求的内容肯定就已经消失了,所以无法取得。

session属性范围(一次会话)

   如果现在希望一个属性设置之后,可以再任何一个与设置页面相关的页面取得的话,则就可以使用session属性范围,使用session设置属性之后,不管是客户端还是服务器端跳转,只要属性设置了就都可以取得。(以下就不举例子,只需将上述两个里面的pageContext或request换成session即可

application属性范围(一个项目)

  如果现在希望设置一个属性,可以让所有的用户(每一个session)都能看得见的话,则可以将属性范围设置成application,这样属性就保存在了服务器之上。

 

  一般地,如果能使用request就尽量不要使用session,能使用session就尽量不要使用application

posted on 2019-07-11 21:10  Hi,Bro  阅读(524)  评论(0编辑  收藏  举报