pagecontext对象

pageContext对象

pageContext对象是JSP中很重要的一个内置对象,不过在一般的JSP程序中,很少用到它,所以知道request对象、response对象的人比较多,知道pageContext对象的人就比较少了。它是javax.servlet.jsp.PageContext类的实例对象,可以使用PageContext类的方法。实际上,pageContext对象提供了对JSP页面所有的对象及命名空间的访问,正如前面所介绍的一样,使用pageContext对象可以访问application对象、exception对象,还有session对象等。pageContext对象的方法可以访问除本身以外的8个JSP内部对象,还可以直接访问绑定在application对象、page对象、request对象、session对象上的Java对象。pageContext对象相当于JSP程序中所有对象功能的集成者。不过,这里存在着一个问题,既然可以直接访问JSP内部对象,为什么还要多此一举,通过pageContext对象来访问它们呢?这也正是pageContext对象应用较少的原因。话虽这样说,pageContext对象总是JSP中9个内置对象不可或缺的一部分,读者还是需要掌握它的用法的。

在JSP程序中,我们可以使用pageContext来代表pageContext对象:

<%

    pageContext.Method();

%>

pageContext对象的主要用法如下。

1)getOut()

该方法返回一个JspWriter类的实例对象,也就是JSP内置对象——out对象,可以往客户端写入输入流。它的使用方法如下:

<%

       JspWriter myout=pageContext.getOut();

       myout.println(“myout write: hello world”+”<br>”);

       out.println(“out write: hello world”);

%>

2)getSession()

该方法的返回值是一个HttpSession接口的实例对象,即JSP内置对象——session对象,可以保存不同用户的信息。它的使用方法如下:

<%

    String username1=”george”;

    String password1=”george”;

    HttpSession mySession= pageContext. getSession();

    mySession.putValue(“username”,username1);

    mySession.putValue(“password”, password1);

%>

3)getPage()

该方法的返回值是一个java.lang.Object对象,也就是JSP内置对象——page对象。它的使用方法如下:

<%

    Object mypage=pageContext.getPage();

    out.println(mypage.toString());

%>

4)getResponse()

该方法的返回对象是javax.servlet.ServletResponse,也就是JSP内置对象——response对象,主要用于控制HTTP连接。它的使用方法如下:

<%

    ServletResponse myresponse=pageContext.getResponse();

    out.println(myresponse.getCharacterEncoding());

%>

5)getRequest()

该方法的返回对象是javax.servlet.ServletRequest,也就是JSP内置对象——request对象,主要用于获取客户端的信息。它的使用方法如下:

<%

    ServletRequest myrequest=pageContext.getRequest();

    out.println(myrequest.getRemoteHost());

    String username2=”robin”;

    String password2=”robin”;

    myrequest.setAttribute(“username”,username2);

    myrequest.setAttribute(“password”, password2);

%>

6)getException()

该方法的返回值是当前页的exception对象。它的使用方法如下:

<%

    Exception myexception=pageContext. getException();

    out.println(myexception.getMessage());

%>

上面的代码片段最好在错误处理程序中使用,也就是page编译指令的isErrorPage属性为true的页面中。

7)getServletConfig()

该方法可以返回当前的config对象,用于获取JSP/Servlet程序的初始参数。它的使用方法如下:

<%

    ServletConfig myconfig=pageContext.getServletConfig();

%>

8)getServletContext()

该方法的返回值是一个ServletConfig接口的实例对象,也就是JSP内置对象——application对象的副本。它的使用方法如下:

<%

    ServletContext myapplication=pageContext.getServletContext();

    out.println(myapplication.getServerInfo());

    String username3=”java”;

    String password3=”java”;

    myapplication.setAttribute(“username”,username3);

    myapplication.setAttribute(“password”, password3);

%>

9)setAttribute(String name, Object o, int scope)

pageContext对象的setAttribute()方法可以将参数或者Java对象绑定到application对象、session对象、request对象或者page对象上,这里的scope参数可以取以下的值。

l        pageContext.PAGE_SCOPE

l        pageContext.REQUEST_SCOPE

l        pageContext.SESSION_SCOPE

l        pageContext.APPLICATION_SCOPE

当scope参数的值为pageContext.SESSION_SCOPE时,调用PageContext对象的setAttribute()方法和调用session对象的putValue()方法是等效的,都是将某个参数或者Java对象和当前的session绑定起来。如果scope参数的值为如果scope参数的值为pageContext.APPLICATION_SCOPE,那么调用PageContext对象的setAttribute()方法和调用application对象的setAttribute()方法是等效的。如果scope参数是其他的值,原理也是一样的,我们就不多说了。它的使用方法如下:

<%

    pageContext.setAttribute(“username”,”george”,

        pageContext.APPLICATION_SCOPE);

    pageContext.setAttribute(“username”,”robin”,pageContext.

        SESSION_SCOPE);

%>

10)getAttribute(String name, int scope)

pageContext对象的getAttribute()方法也可以直接获取和application对象、page对象、session对象、request对象相互绑定的参数或者Java对象的值。这个方法的scope参数的意义和上面讲的一样。如果scope参数的值是pageContext.REQUEST_SCOPE,那么getAtttribute()方法就在当前的request对象内部查找有没有绑定一个名为name的Java对象,如果有,就返回这个对象,如果没有,返回null值。如果scope参数的值是pageContext.APPLICATION_SCOPE,那么getAtttribute()方法的作用范围将是application对象。它的使用方法如下:

<%

    pageContext.getAttribute(“username”, pageContext.APPLICATION_SCOPE);

    pageContext.getAttribute(“username”, pageContext.SESSION_SCOPE);

%>

11)removeAttribute(String name, int scope)

顾名思义,pageContext对象的removeAttribute()方法可以直接解除application对象、session对象、request对象、page对象和某个特定的参数或者Java对象的绑定关系。这个方法的scope参数指定了作用的范围,如果scope参数的值为pageContext.SESSION_SCOPE,那么removeAttribute()方法将会使某个参数或者Java对象和当前的session对象解除绑定关系,如果scope参数是其他值,原理也一样的。它的使用方法如下:

<%

    pageContext.removeAttribute(“username”,

        pageContext.APPLICATION_SCOPE);

    pageContext.removeAttribute(“username”, pageContext.SESSION_SCOPE);

%>

12)findAttribute(String name)

pageContext对象的findAttribute()方法将在application对象、session对象、request对象、page对象内部查找是否有某个参数或者Java对象与这些对象绑定了,搜索顺序是先是范围最小的page对象,其次是request对象、session对象,最后是application对象,这个方法的返回值是第一个符合要求的Java对象的值。它的使用方法如下:

<%

    String username=pageContext.findAttribute(“username”);

%>

13)getAttributeScope(String name)

使用这个方法可以知道特定的参数或者Java对象和哪一个JSP对象绑定在一起。该方法的返回值是整型常数,可能是下面4个常数之一:

l        pageContext.PAGE_SCOPE

l        pageContext.REQUEST_SCOPE

l        pageContext.SESSION_SCOPE

l        pageContext.APPLICATION_SCOPE

如果返回值是pageContext.SESSION_SCOPE,表明这个Java对象和session对象绑定在一起。如果是其他返回值,读者可以依次类推。它的使用方法如下:

<%

    Int scope=pageContext.getAttributeScope(“username”);

%>

14)getAttributeNameInScope(int scope)

该方法可以获取特定JSP对象内部绑定了哪些参数或者Java对象,scope参数指定了该方法的作用范围。这个方法的返回值是一个枚举对象(Enumeration)。它的用法示例如下:

<%

    Enumeration enum=null;

    enum=pageContext.getAttributeNamesInScope(pageContext.SESSION_SCOPE);

    while(enum.hasMoreElements())

    {

        out.println(enum.nextElement()+”<br>”);

    }

%>

上面的JSP代码段将返回session对象中所绑定的参数或者Java对象的名字。

15)release()

该方法将会释放pageContext对象所占的资源。

16)forward(String url)

该方法可以实现网页的重定向功能,类似于response.sendRedirect()方法。

17)include(String relativeUrlPath)

该方法可以让当前文件包含进一个外部文件,类似于JSP的include编译指令和<jsp:include>操作指令。

由上面对pageContext对象的介绍,读者应该不难看出,pageContext对象有两大主要功能,分别是获取各JSP内部对象,以及直接操作与某些JSP对象绑定在一起的参数或者Java对象。下面我们将举出两个比较完整的例子,分别演示pageContext对象的这两个主要功能,如程序4-14和程序4-15所示。

【程序4-14】pageContext1.jsp

01        <%@ page language="java" import="java.util.*"

02            pageEncoding="ISO-8859-1"%>

03        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

04        <html>

05        <body>

06        <%

07            JspWriter myout=pageContext.getOut();

08            myout.println(“myout write: hello world”+”<br>”);

09            out.println(“out write: hello world”+”<br>”);

10         

11            String username1=”george”;

12            String password1=”george”;

13            HttpSession mySession= pageContext. getSession();

14            mySession.putValue(“username”,username1);

15            mySession.putValue(“password”, password1);

16         

17            out.println(“Session bind username:”+session.getValue

18                 (“username”)+”<br>”);

19            out.println(“Session bind password:”+session.getValue

20                 (“password”)+”<br><br>”);

21         

22            Object mypage=pageContext.getPage();

23            out.println(“Compile Class Came:”+mypage.toString()+”<br><br>”);

24         

25            ServletResponse myresponse=pageContext.getResponse();

26            out.println(“Character Encoding:”+

27                myresponse.getCharacterEncoding()+”<br><br>”);

28         

29            ServletRequest myrequest=pageContext.getRequest();

30            out.println(myrequest.getRemoteHost());

31            String username2=”robin”;

32            String password2=”robin”;

33            myrequest.setAttribute(“username”,username2);

34            myrequest.setAttribute(“password”, password2);

35         

36            out.println(“Request bind username:”+request.getAttribute

37                 (“username”)+”<br>”);

38            out.println(“Request bind password:”+request.getAttribute

39                 (“password”) +”<br><br>”);

40         

41            ServletContext myapplication=pageContext.getServletContext();

42            out.println(myapplication.getServerInfo());

43            String username3=”java”;

44            String password3=”java”;

45            myapplication.setAttribute(“username”,username3);

46            myapplication.setAttribute(“password”, password3);

47            

48            out.println(“Application bind username:”+application.getAttribute

49                 (“username”)+”<br>”);

50            out.println(“Application bind password:” +application.getAttribute

51                (“password”)+”<br><br>”);

52        %>

53        </body>

54        </html>

执行结果如图4-13所示。

 

图4-13  pageContext.jsp程序的运行效果

【程序4-15】pageContext2.jsp

01        <%@ page language="java" import="java.util.*"

02            pageEncoding="ISO-8859-1"%>

03        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

04        <html>

05        <body>

06        <%

07            pageContext.setAttribute(“username”,”george”, pageContext.

08                APPLICATION_SCOPE);

09            pageContext.setAttribute(“username”,”robin”,

10                pageContext.SESSION_SCOPE);

11            pageContext.setAttribute(“username”,”java”,

12                pageContext.REQUEST_SCOPE);

13            pageContext.setAttribute(“username”,”test”,

14                pageContext.PAGE_SCOPE);

15         

16            out.println(pageContext.getAttribute(“username”,

17            pageContext.APPLICATION_SCOPE)+”<br>”);

18            out.println(pageContext.getAttribute(“username”,

19            pageContext.SESSION_SCOPE)+”<br>”);

20            out.println(pageContext.getAttribute(“username”,

21            pageContext.REQUEST_SCOPE)+”<br>”);

22            out.println(pageContext.getAttribute(“username”,

23            pageContext.PAGE_SCOPE)+”<br><br>”);

24         

25            out.println(application.getAttribute(“username”)+”<br>”);

26            out.println(session.getValue(“username”)+”<br>”);

27            out.println(request.getAttribute(“username”)+”<br>”);

28            out.println(username+”<br>”);

29            out.println(“<br>”);

30         

31            out.println(pageContext.getAttributesScope(“username”)+”<br>”);

32            out.println(“<br>”);

33         

34            out.println(pageContext.findAttribute(“username”)+”<br>”);

35            out.println(“<br>”);

36         

37            pageContext.removeAttribute(“username”,

38                pageContext.APPLICATION_SCOPE);

39            pageContext.removeAttribute(“username”,

40                pageContext.SESSION_SCOPE);

41         

42            out.println(pageContext.getAttribute(“username”,

43            pageContext.APPLICATION_SCOPE)+”<br>”);

44            out.println(pageContext.getAttribute(“username”,

45            pageContext.SESSION_SCOPE)+”<br>”);

46            out.println(pageContext.getAttribute(“username”,

47            pageContext.REQUEST_SCOPE)+”<br>”);

48            out.println(pageContext.getAttribute(“username”,

49            pageContext.PAGE_SCOPE)+”<br><br>”);

50         

51            Enumeration enum=null;

52            enum=pageContext.getAttributeNamesInScope(

53                pageContext. REQUEST_SCOPE);

54         

55            while(enum.hasMoreElements()) {

56                String name=(String)enum.nextElement();

57                out.println(“name----->”+name+”<br>”);

58                out.println(“value----->”+request.getAttribute(name)+”<br>”);

59            }

60         

61            pageContext.release();

62        %>

63        </body>

64        </html>

程序4-15演示了如何使用pageContext对象的各种方法直接操作application对象、session对象、request对象、page对象所绑定的参数或者Java对象。这个程序的流程十分简单,在这里就不详细介绍了,读者不妨自己运行这个程序,看看和直接用application等对象的方法操作绑定对象有何不同。程序4-15的运行效果如图4-14所示。

-------------------------------------------------------------------------------------------

pageContex对象引用一个javax.servlet.jsp.PageContext对象,用户可以通过该对象访问开发商所独有的特性,可以在多个作用域上进行操作(页面作用域、请求作用域和应用程序作用域),它还为简便方法提供了一个与开发商无关的接口。pageContext是一个抽象类,因此JSP容器开发商必须扩展它。JSP容器使用pageContext简便方法来初始化其他隐含对象。具体思想是一个给定的开发商可以该对象提供一种自定义实现,可能返回其他隐含对象的优化版本,还可能提供开发商独有的额外方法。pageContext对象是通过javax.servlet.jsp.JspFactory对象上的一个创建方法来获得的,该对象也是一个抽象类,带有开发商提供的自定义实现。

JSP容器启动时,在初始化时,它通常注册自己的JspFactory对象实现。在转换时,JSP容器按照以下步骤进行:

  • 在生成的服务器程序中的_jspService方法的开始位置,使用JspFactory.getDefaultFactory静态方法获取与开发商有关的JspFactory的实现。
  • Factory对象的getPageContext方法初始化并返回一个与开发商有关的pageContext对象。
  • 服务器程序使用这个对象获取其他几个具有混合作用域的隐含对象,包括ServletContext对象、ServletConfigHttpSession对象和JspWriter对象。
  • 服务器程序将其中的每一个对象都赋给一个局部变量,JSP的创作者可以在表达式、脚本程序和JSP动作中使用这些变量。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值