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 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <html> <head> <base href="<%=basePath%>"> </head> <body> <% //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"); %> </body> </html>
//PageContext2.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <html> <head> <base href="<%=basePath%>"> </head> <body> <%=pageContext.getAttribute("p")//得到PageContext1.jsp页面p的值?试问可以得到吗?大家想想 %> <%=application.getAttribute("p") %><!-- 那大家想想这里取得到上一页面的值吗? --> <%=pageContext.findAttribute("p") %> </body> </html>
总结
1. pageContext对象存储了request对象和response对象的引用。application对象,config对象,session对象,out对象可以通过访问这个对象的属性来导出。
2. pageContext对象封装了当前JSP页面的运行信息,它提供了返回JSP页面的其他隐式对象的方法。
版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。