JSP内置对象及作用域
九大内置对象
- pageContext 存数据
- request 存数据
- response
- session 存数据
- application (ServletContext) 存数据
- config (ServletConfig)
- out
- page 不怎么用
- exception
作用域
<%
pageContext.setAttribute("name1", "kangzhu1");
request.setAttribute("name2", "kangzhu2");
session.setAttribute("name3", "kangzhu3");
application.setAttribute("name4", "kangzhu4");
%>
- pageContext保存的数据只会在一个页面中有效
- request保存的数据只在一次请求中有效,请求转发会携带这个数据
- session保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
- application保存的数据在服务器中有效,从打开服务器到关闭服务器
解释:
在一个页面中使用pageContext保存一个数据,那这个数据只能在同一个页面中获取;
使用request保存的数据,在请求资源(某个页面)中可以找到,如果说请求被转发,那在转发到的资源(某个页面)中也可以找到;
session是相对于用户来说的作用域,同一个用户(客户端)的任何请求都可以获得session中的数据;
application是相对于服务器来说的作用域,此服务器的任何用户都可以访问application中的数据;
作用域由低到高:
pageContext < request < session < application
在查找数据的时候,如果在低作用域中找不到会自动到高作用域中查找;
pageContext的其他用法:
-
实现请求转发
<% pageContext.forward("path"); request.getRequestDispatcher("path").forward(request,response); %>
-
setAttribute()的重载方法
public void setAttribute(String name, Object attribute, int scope) { switch(scope) { case 1: this.mPage.put(name, attribute); break; case 2: this.mRequest.put(name, attribute); break; case 3: this.mSession.put(name, attribute); break; case 4: this.mApp.put(name, attribute); break; default: throw new IllegalArgumentException("Bad scope " + scope); } }
其中scope的取值范围:
public static final int PAGE_SCOPE = 1; public static final int REQUEST_SCOPE = 2; public static final int SESSION_SCOPE = 3; public static final int APPLICATION_SCOPE = 4;
使用这个方法就相当于在不同的作用域添加数据;