JSP API 提供了一个非常实用的类:javax.servlet.jsp.PageContext抽象类,它继承了javax.servlet.jsp.JspContext。Pagecontext类是JSP文件的得力助手,在JSP文件中使用PageContext类的场合主要包括:
①JSP文件中的Java程序片段。
②JSP文件中的自定义标签的处理类。
PageContext 类中的方法可分为以下几种:
①用于向各种范围内存取属性的方法
②用于获得由Servlet容器提供的其他对象的引用的方法
③用于请求转发和包含的方法
1. 向各种范围内存取属性的方法:
getAttribute(String name):
getAttribute(String name,int scope):
setAttribute(String name,Obejct value,int scope):
removeAttribute(String name,int scope):
findAttribute(String name):
int getAttributeScope(String name):
以上方法中的scope参数指定属性的范围,可选值为PageContext类的四个静态常量:
PageContext.PAGE_SCOPE:实际取值为1
PageContext.REQUEST_SCOPE:实际取值为2
PageContext.SESSION_SCOPE:实际取值为3
PageContext.APPLICATION_SCOPE:实际取值为4
PageContext对象由Servlet容器负责创建,JSP文件可以直接通过固定变量pageContext来引用隐含的PageContext对象。
以下代码向请求范围内存放了一个username属性:
<% pageContext.setAttribute("username","Tom",PageContext.REQUEST_SCOPE);%>
它与以下代码是等价的:
<% request.setAttribute("username","Tom");%>
2. 用于获得由Servlet容器提供的其他对象的引用的方法:
PageContext类的以下方法用于获得由Servlet容器提供的ServletContext、HttpSession、ServletRequest和ServletResponse等对象。
getPage():返回与当前JSP对应的Servlet实例
getRequest():返回ServletRequest对象
getResponse():返回ServletResponse对象
getServletConfig():返回ServletConfig对象
getServletContext():返回ServletContext对象
getSession():返回HttpSession对象
getOut():返回一个用于输出响应正文的JspWriter对象
在JSP文件的Java程序片段中,可以直接通过application,request和response等固定变量来引用ServletContext、ServletRequest和ServletResponse等对象。而在自定义的JSP标签的处理类中,无法使用application、request和response等固定变量,此时就需要依靠PageContext类的相关方法来得到ServletContext、ServletRequest和ServletResponse等对象。
3. 用于请求转发和包含的方法:
PageContext类的以下方法用于请求转发和包含:
forward(String url):转发
include(String url):包含
在JSP文件中可以用专门的JSP标记(如<jsp:forward>标记和<jsp:include>)来进行请求转发和包含操作,而在自定义的JSP标签的处理类中,无法使用JSP标记,此时就需要依靠PageContext类的相关方法来进行请求转发和包含操作。