JSP pagecontext对象详解
pageContext对象是javax.servlet.jsp.PageContext类的实例对象,用来代表整个JSP页面。它代表页面上下文,该对象主要用于访问 JSP 之间的共享数据,使用pageContext可以访问page、request、session、application范围的变量。
获取实例
pageContext对象是通过调用JspFactory.getPageContext方法返回的。
public PageContext getPageContext(
javax.servlet.Servlet servlet,
javax.servlet.ServletRequest request,
javax.servlet.ServletResponse response,
java.lang.String errorPageURL, boolean needsSession,
int buffer, boolean autoflush)
JSP页面中只需将pageContext对象传递给某个Java类的实例对象,在该Java对象中就可以访问和调用其他隐式对象的功能了。
常用方法
JspWriter getOut(); //返回当前客户端响应被使用的JspWriter流(out)
HttpSession getSession(); //返回当前页面中HttpSession对象(session)
Object getPage(); //返回当前页面的Object对象(Object)
ServeletRequest getRequest(); //返回当前页面的ServletRequest对象(request)
ServeletResponse getResponse(); //返回当前页面的ServletResponse对象(response)
void setAttribute(String name,Object attribute); //设置属性及属性值
void getAttribute(String name,int scope); //在指定范围内取属性的值
int getAttributeScope(String name); //返回某属性的作用范围
void forward(String relativeUrlPath); //使当前页面重导到另一页面
void include(String relativeUrlPath); //在当前位置包含另一文件
作用
1. 获取所有内置对象
getException()返回exception隐式对象
getPage()返回page隐式对象
getRequest()返回request隐式对象
getResponse()返回response隐式对象
getServletConfig()返回config隐式对象
getServletContext()返回application隐式对象
getSession()返回session隐式对象
getOut()返回out隐式对象
import javax.servlet.ServletContext;
import javax.servlet.jsp.PageContext;
public class pagecontext {
public void m(PageContext pag){
//如果你要传参9大隐式对象,不可能写9个参量吧!
//这个时候我们的Context的作用就可以了,它可以调用其他8个隐式对象,直接可定义这一个
//这样就方便很多了。
ServletContext ser=pag.getServletContext();
pag.getServletConfig();
pag.getOut();
pag.getPage();
pag.getRequest();
pag.getResponse();
pag.getSession();
pag.getException();
//这就是其他8个隐式对象了,都可以通过PageContext得到,非常的方便
}
}
2. 引入和跳转到其他资源,提供了转发和包含的简便方法
PageContext类中定义了一个forward方法和两个include方法来分别简化和替代RequestDispatcher.forward方法和RequestDispatcher.include方法的调用。
public void forward(java.lang.String relativeUrlPath) throws javax.servlet.ServletException,java.io.IOException
public void include(java.lang.String relativeUrlPath) throws javax.servlet.ServletException,java.io.IOException
public void include(java.lang.String relativeUrlPath,boolean flush) throws javax.servlet.ServletException,java.io.IOException
传递给这些方法的资源路径都只能是相对路径,如果路径以“/”开头,表示相对于当前WEB应用程序的根目录,否则,表示相对于当前JSP所映射到的访问路径。
RequestDispatcher rd = request.getRequestDispatcher("/url");//“/”绝对路径
rd.forward(request,response);
pageContext.forward("url");//重定向
pageContext.include("url");//包含
3. 本身是域对象,同时可以操作其他域对象
JSP中的四大作用域对象:page,request,session,application,作为域对象,很容易得出,里面必定有三个方法,setAttribute,getAttribute和removeAttribute。pagecontext这3个方法中带一个scope参数,可以通过这个参数来操作其他的域对象。
void setAttribute(String name,Object value,int scope)//scope操作于其他三大域对象
void removeAttribute(String name,int scope)
Object getAttribute(String name,int scope)
scope取值如下
PageContext.PAGE_SCOPE(对应page范围)
PageContext.REQUEST_SCOPE(对应request范围)
PageContext.SESSION_SCOPE(对应session范围)
PageContext.APPLICATION_SCOPE(对应application范围)
例子
//PageContext1.jsp
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
//pageContext只在本页面有效,在其他页面使用pageContext是不能取不到值的
//pageContext.setAttribute("p1", "p的第一个值");
pageContext.setAttribute("p1", "p的第二个值",PageContext.PAGE_SCOPE);
//可是如果用HttpRequest呢?
//request.setAttribute("p2", "p2");
pageContext.setAttribute("p2", "p22",PageContext.REQUEST_SCOPE);
// session.setAttribute("p3", "p3");
pageContext.setAttribute("ps","p33",PageContext.SESSION_SCOPE);
//application.setAttribute("p4", "p4");
pageContext.setAttribute("p4", "p44",PageContext.APPLICATION_SCOPE);
pageContext.forward("/PageContext2.jsp");
//response.sendRedirect("/day09/PageContext2.jsp");
%>
//PageContext2.jsp
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
总结
1. pageContext对象存储了request对象和response对象的引用。application对象,config对象,session对象,out对象可以通过访问这个对象的属性来导出。
2. pageContext对象封装了当前JSP页面的运行信息,它提供了返回JSP页面的其他隐式对象的方法。
版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。