JSP数据交互(二)----作用域

一 . page作用域

答 : 1 . page作用域指单一JSP页面的范围 , page作用域内的对象只能在创建该对象的页面中访问 , 是JSP的默认作用域 ;

      2 . page作用域可以使用pageContext对象的setAttribute()和getAttribute()方法访问 ;

      3 . page作用域在客户端每次请求JSP页面时创建 , 在服务器发送响应或请求转发到其他的页面或资源后失效 ;

           示例 :
                //test1页面中代码如下 :

<body>

<%

    String name = "page";

    pageContext.setAttribute("name", name);

%>

<strong>test1 : <%=pageContext.getAttribute("name") %></strong><br/>

<%pageContext.include("test2.jsp"); %>

</body>

               //test2页面中代码如下 :

<body>

    <strong>test2 : <%=pageContext.getAttribute("name")%></strong>

</body>

二 . request作用域

答 : 1 . 该作用域是与客户端的请求绑定在一起的 , 作用范围比page大 ;

      2 . 该作用域可以调用request对象的setAttribute()和getAttribute()方法进行访问 ;

      3 . request作用域在页面转发或包含中同样有效 , 即在调用RequestDispatcher的forward()方法转向的页面或者调用的include()方法包含的页面中 , 都可以共享一个requuest作用域 , 访问其中的数据 ;

      4 . request作用域对于每次客户端的请求都是不同的 , 对于任何一个新的请求 , 都会重新创建与本次请求相对应的request作用域 , 当请求结束后 , 与之相关的request作用域也随之失效 ;

      注意 : RequestDispatcher对象的include()方法与pageContext对象的include()方法实现相同的效果 ;

      示例 :

          //test1中有如下代码

  <body>

<%

    String name = "request";

    request.setAttribute("name", name);

    request.getRequestDispatcher("test2.jsp").forward(request, response);

%>

 </body>

          //test2中有如下代码

<body>

<strong>test2 : <%=request.getAttribute("name")%></strong>

</body>

三 . session作用域

答 : 1 . JSP为每次会话创建一个session作用域 , 在会话有效期内 , 只要将数据绑定到session作用域中 , 则该数据可以被本次会话中的其他页面所访问 ;

      2 . session作用域可以通过session对象的setAttribute()与getAttribute()方法进行访问 ;

      示例 :

          //test1中有如下代码

          <%

               String req="request";

               String ses="session";

               request.setAttribute("reqName",req);

               session.setAttribute("sessionName",ses);

               response.sendRedirect("test2.jsp");

          %>

          //test2中有如下代码

          <strong>

               request : <%=request.getAttribute("reqName")%><br/>

               session : <%=session.getAttribute("sessionName")%>

          </strong>

      如上面示例所示 , 使用response对象将页面重定向至test2.jsp , 在test2.jsp中能够读取到sessionName变量 , 由此可见 , session作用域内的数据在会话有效期内都可以访问 ; 重定向到另一个页面的时候 , 相当于重新发起了一次请求 , 所以上一次请求中的request中的reqName失效了 ;

      如果想保证变量不会失效 , 可以用下面的两种方式来到达其他页面 :

      1 . 重定向+查询字符串 : response.sendRedirect("xxx.jsp?name="+name+"&pwd="+pwd);

      2 . forward转发 : request.getRequestDispatcher("xxx.jsp").forward(request,response);

猜你喜欢

转载自blog.csdn.net/dyz4001/article/details/80032148