一 . page作用域
答 : 1 . page作用域指单一JSP页面的范围 , page作用域内的对象只能在创建该对象的页面中访问 , 是JSP的默认作用域 ;
2 . page作用域可以使用pageContext对象的setAttribute()和getAttribute()方法访问 ;
3 . page作用域在客户端每次请求JSP页面时创建 , 在服务器发送响应或请求转发到其他的页面或资源后失效 ;
<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);