jsp的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所示。

图4-14  pageContext2.jsp程序的运行效果

 

另一篇网摘

pageContext的中文含义是页面上下文,其代表了当前页面的所有属性和对象。

它的主要函数有:

1、void forward(String relativeUrlPath)

将当前页面重定向到另一个页面或者Servlet上

2、object getAttribute(String name[,int scope])

该函数用来获得一个特定的已经命名为name的对象的属性,该函数中参数scope是可选的。

3、exception getException()

获得当前网页的一场对象(exception),此网页需要进行以下设置:<%@ page isErrorPage="true"%>

4、servletRequest getRequest()

获得当前页面的request对象

5、servletResponse getresponse()

获得当前页面的response对象

6、httpSession getSession()

获得当前页面的Session对象

7、servletConfig getServletConfig()

获得当前页面的Config对象

8、servletContent getServletContent()

获得ServletContent对象,该对象对所有的页面都是共享的

9、public Object findAttribute(String name)

寻找对所有单位中属性名称为name的属性

10、void setAttribute()

设置默认页面范围或特定对象范围之中的属性

11、void removeAttribute()

删除默认页面范围或特定对象范围之中的属性

12、enumeratio  getAttributeNamesInScope(int scope)

返回所有属性范围为scope的属性名称

 

 

关于PageContent对象主要函数的使用举例:

(1)新建一个文件PageContext.jsp,代码如下:

<%@ page import="javax.servlet.http.*,javax.servlet.*"%>
<%@ page language="java" contentType="text/html; charset=gb2312"%>
<html>
<head>
 <title>测试pageContext属性</title>
</head>
<body>
<center>
PageContext 的测试页面,设置属性如下:<br>
<%
ServletRequest req=pageContext.getRequest(); //取得页面的信息。
String name=req.getParameter("name");
out.println("name="+name);  //获取用户发送给服务器的name。
pageContext.getServletContext().setAttribute("sharevalue","多个页面共享的值");
pageContext.getSession().setAttribute("sessionValue","只有在Session中才是共享的值");
out.println("<br>pageContext.getAttribute('useName')");
%>
<a href="DaPageContext.jsp">next--></a> //转向DaPageContext页面
<hr>
人生除了学习还是学习!<br>
活到老学到老。
</center>
</body>
</html>

(2)新建一个文件DaPageContext.jsp,代码如下:

<%@ page language="java" contentType="text/html; charset=gb2312"%>
pageContext 的测试页面- 获得前一页面设置的值:<br>
<%
out.pringln("<br>pageContext.getSession().getAttribute('sessionValue')=");
out.println(pageContext.getSession().getAttribute("sessionValue"));
out.println("pageContext.getServletContext().getAttribute('sharevalue')=");
out.println(pageContext.getServletContext().getAttribute("sharevalue"));
%>

(3)新建一个文件ZuoPageContext.jsp,代码如下:

<html>
<body>
<form method=post action="PageContext.jsp">
<table>
<tr><td>name:</td></td>
<input type=text name=name:>
</td></tr>
<tr colspan=2>
<td>
<input type=sumit value=登录>
</td>
</tr>
</table>
</body>
</html>

 

然后在浏览器上运行一下既可以看到效果了。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值