第3章内置对象技术 JSP 页面或Servlet 页面的内置对象由容器(服务器)提供, 可以使用标准的变量访问这些对象,并且不用编写任何额外的 代码,在JSP 页面或Servlet 页面中使用。在JSP 2.0 规范中定 义了以下 9 个内置对象:request(请求对象)、response(响应 对象)、session(会话对象)、application(应用程序对象)、out (输出对象)、page(页面对象)、config(配置对象)、exception (异常对象)、pageContext(页面上下文对象)。在本章中,将对 它们进行介绍,并通过示例介绍它们的具体使用方法。 3.内置对象概述 1 Web应用程序的特点是一个JSP文件(或者一个Servlet)相当于一个独立的运行单元, 类似于一个独立的应用程序,并由容器(Tomcat)统一管理。对于一个实际项目来说,不可 能只有一张页面,且页面之间存在着各类内部数据的实时通信及共享问题,例如,把A页面 登录数据传递到B页面进行验证,购物车的设计涉及若干页面共享数据问题,公告栏涉及不 同用户的数据共享问题。而且,在实际项目中,存在着对各类请求/响应的一些特殊要求等。 因此,容器根据规范要求,向用户提供了一些内置对象,用于解决上述问题,并负责对这些对 象的管理,包括内置对象的生存期、作用域等。 在这些内置对象中,request、response对象是在客户端请求JSP页面或Servlet页面 时,由容器实时生成并作为服务参数传递给JSP文件(实际上是Servlet),在请求/响应过 程结束时由容器回收;sesion一般是在用户开始登录系统时生成的,在退出系统时由容器 回收。 3.2 request对象 request对象最主要的作用在当次请求中进行数据传递,当请求发起方(JSP页面或 Servlet页面,甚至是HTML页面)向另一方(JSP页面或Servlet页面)发起请求时,容器(服 务器)会将客户端的请求信息包装在这个request对象中,请求信息的内容包括请求的头信 息、请求的方式、请求的参数名称和参数值等信息。request对象封装了用户提交的信息,通 过调用该对象相应的方法可以获取来自客户端的请求信息,然后根据不同需求做出响应。 它是HtpServletRequest类的实例。 3.2.1 主要方法 request对象的主要方法如表3-1所示。 表3- 1 request对象的主要方法 方法名 方法说明 getAtribute(Stringname) getAtributeNames( ) getCharacterEncoding( ) getContentLength( ) getContentType( ) getInputStream( ) getParameter(Stringname) getParameterNames( ) getParameterValues(Stringname) getProtocol( ) getServerName( ) getServerPort( ) getReader( ) getRemoteAddr( ) getRemoteHost( ) setAtribute(Stringkey,Objectobj) getRealPath(Stringpath) 返回指定属性的值 返回所有可用属性名 返回字符编码方式 返回请求体的长度(以字节为单位) 得到请求体的MIME类型 得到请求体中的二进制流 返回指定参数的值 返回所有可用参数名 返回包含指定参数的所有值的数组 返回请求方使用的协议类型及版本号 返回接收请求的服务器主机名 返回服务器接收请求所用的端口号 返回解码后的请求体 返回发送请求的客户端IP地址 返回发送请求的客户端主机名 设置指定属性的值 返回指定虚拟路径的真实路径 45 续表 46 方 法 名方法说明 getMethod() 返回客户端向服务器传输数据的方式 getRequestURL() 返回发出请求字符串的客户端地址 getSession() 创建一个session对象 下面的程序给出了request对象的常用方法示例,通常使用request对象获得客户端传 来的数据。 Example3_1.jsp代码如下: <%@ page contentType="text/html;charset=utf-8" %> requestHTML.html
用户名:
   密码:
  

RequestHTML.java代码如下: public class RequestHTML extends HttpServlet { … }p ublic void doGet ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); //请求方式 System.out.println(request.getMethod()); //请求的资源 System.out.println(request.getRequestURI()); //请求用的协议 47 System.out.println(request.getProtocol()); //请求的文件名 System.out.println(request.getServletPath()); //服务器主机名 System.out.println(request.getServerName()); //服务器的端口号 System.out.println(request.getServerPort()); //客户端IP 地址 System.out.println(request.getRemoteAddr()); //客户端主机名 System.out.println(request.getRemoteHost()); String user=request.getParameter("name"); if(user==null)user="无输入"; String pass=request.getParameter("pass"); if(pass==null)user="无输入"; System.out.println("user="+user+"pass="+pass); } 如果输入123和123,输出如下: POST /JSP1501/RequestHTML HTTP/1.1 /RequestHTML localhost 8080 127.0.0.1 127.0.0.1 user=123 pass=123 3.2.2 常用技术 1.用getParameter()方法获取表单提交的信息 request对象获取客户端提交的信息的常用方法是getParameter(Stringkey),其中key 与JSP(或HTML)页面中表单的各输入域(如text、checkbox等)的name属性一致。在下 面的示例中,form1.jsp页面通过表单向servlet(requestForm1)提交用户名和密码信息, requestForm1通过request对象获取表单提交的信息。 form1.jsp示例代码: <%@ page contentType="text/html;charset=utf-8" %>
48

姓名:

密码:

表单提交的方法主要有两种:get与post,二者的主要区别是前一种方法会在提交过程 中在地址栏中显示提交的信息。 requestForm1核心代码: public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); String name=request.getParameter("UserID"); String pass=request.getParameter("UserPWD"); System.out.println(name); System.out.println(pass); } 中文显示问题包括两方面:其一是页面在浏览器中的中文显示问题,JSP文件的默认编 码为ISO-8859-1,应改为uft-8;其二是中文字符在不同环境(HTML、JSP、Servlet、数据库) 中的传输问题,如从JSP传输到Servlet,因为不同环境下默认编码不一样,会产生中文乱码 问题。解决办法如下: (1)服务器端重新编码技术: String user=request.getParameter("UserID "); if(user==null) user="无输入"; byte b[]=user.getBytes("ISO-8859-1"); user=new String(b); (2)用过滤器技术。5.2节中会有说明。 (3)随着集成开发环境版本的升级,中文问题可以通过平台的设置来解决。以Eclipse 为例,可以通过Window→Properties→General→Workspace→Textfileencoding设置项目 空间的字符编码方式,一般设为UTF-8,如图3-1所示。 2.用getParameterValues()方法获取表单成组信息 通过request对象的getParameterValues()方法可以获得指定参数的成组信息,通常在 表单的复选框中使用。该方法的原型如下: public String[] getParameterValues(String str) 在下面的示例中,form2.jsp表单中有3个复选框。选择复选框后,表单信息提交给 servlet(requestForm2.class)。在Servlet中使用getParameterValues()方法获取复选框的 49 图3-1 设置中文编码 成组信息并输出。 form2.jsp代码如下: <%@ page contentType="text/html;charset=utf-8" %>
请选择喜欢的水果:

apple banana peach

requestForm2.java核心代码: String[] temp=request.getParameterValues("checkbox"); System.out.println("你喜欢的水果是:"); 50 for (int i=0; i用户名或者密码错误"); } %> 另外,利用request可以传递任意类型对象数据。 有时,项目要求传递其他类型值。例如,在一个Servlet中,通过数据库操作,得到一个 学生记录集,以二维数组形式存放,具体可以用ArrayList实现。进一步把该记录集发回 JSP页面,以显示该记录集,此时就可以利用request的setAttribute(Stringkey,Objectobj) 和getAttribute(Stringkey)来设值和取值了。代码如下: (1)Servlet中的代码如下: ArrayList studentList; //其具体值的获得代码略 request.setAttribute("student",studentList ); … //提交到A.jsp (2)A.jsp中的代码如下: ArrayList list=(ArrayList)request. getAttribute("student"); 在实际的项目开发中,目前很少采用这种技术,一般用JSON 数据方式。 4.文件处理 文件上传和下载是Web项目的常用功能。默认情况下,前端通过网络传输的是符合 HTTP要求的文本串(HTML表单的所有内容,包括表单的数据),此时,enctype的值为 application/x-www-form-urlencoded。服务器通过解析,让request的各种方法获取文本串数据。 而文件上传则需要二进制流数据,这需要改变报文格式,enctype=multipart/form-data,表单才 会把文件的内容编码到HTML请求中;在服务器端,用request.getInputStream()方法获得二 进制流数据,具体实现会在以后章节说明。 3.2.3 作用域与生命周期 只要发出一个请求,服务器就会创建一个request对象,它的作用域是当前请求过程。 一般情况下,一个请求过程包括两个对象(发起方与接受方),可以是两个JSP页面之间、两 个Servlet页面之间,当然也可以是JSP页面与Servlet页面之间。其生命周期也是一个请 求过程。 综上所述,t就是两个服务器对象之间的数据传递工具。 reques 3.epne对象 3 rsos request对象和response对象是相辅相成的,request对象用于封装客户端的请求报文 信息。response对象用于处理服务器对客户端的一些响应。response对象可以对客户端做 出动态响应,主要是向客户端发送头部数据。它是HtpServletResponse类的实例。 3.3.1 主要方法 response对象的主要方法如表3-2所示。 表3- 2 response对象的主要方法 方法名 addCoolie(Cookiecookie) addHeader(Stringname,Stringvalue) containsHeader(Stringname) encodeURL(Stringurl) getOutputStream( ) getWriter( ) 方法说明 向客户端写入一个Cookie 添加HTTP头 判断指定的HTTP头是否存在 把SesionID作为URL参数返回客户端 获得到客户端的输出流对象 返回输出字符流 51 续表 52 方 法 名方法说明 sendError(int) 向客户端发送错误信息 sendRedirect(Stringurl) 重定向请求 setContentType(Stringtype) 设置响应的MIME类型 setHeader(Stringname,Stringvalue) 设置指定的元信息值。如果该值已经存在,则新值会覆盖 旧值 3.3.2 常用技术 1.使用response对象设置HTTP头信息 这里主要介绍两个方法:setContentType()和setHeader()。 setContentType()方法可以动态改变ContentType的属性值,参数可设为text/html、 text/plain、application/x-msexcel、application/msworld等。该方法的作用是:客户端浏览 器区分不同种类的数据,并调用浏览器内不同的程序嵌入模块来处理相应的数据。例如, Web浏览器就是通过MIME类型来判断文件是否为GIF图片的。通过MIME类型来处理 JSON 字符串。Tomcat的安装目录\conf\web.xml中定义了大量MIME类型,读者可以自 行了解。 response.setHeader用来设置返回页面的元(meta)信息。元信息用来在HTML文档 中模拟HTTP的响应头报文。标签用于网页的与中,例如: 用于说明页面生成工具。 用于说明页面的关键词。 用于说明网站的主要内容。 用于说明网站的制作者。 例如,利用response对象将contentType属性值设置为application/x-msexcel。 (1)A.txt内容如下: 34 79 51 99
40 69 92 22
67 71 85 20
72 30 78 38
55 61 39 43
43 81 10 55
36 93 41 99
(2)contenttype.html代码如下: 53

您想使用什么方式查看文本文件A.txt?

(3)response1.jsp代码如下: <%@ page contentType="text/html;charset=gb2312"%> <% String str1=request.getParameter("submit1"); String str2=request.getParameter("submit2"); if (str1==null) { str1=""; } if (str2==null) { str2=""; } if (str1.startsWith("word")) { response.setContentType("application/msword;charset=GB2312"); out.print(str1); } if (str2.startsWith("excel")) { response.setContentType("application/x-msexcel;charset=GB2312"); } %> 2.使用response实现重定向 对于response对象的sendRedirect()方法,可以将当前客户端的请求转到其他页面,相 应的代码格式为 response.sendRedirect("URL 地址"); 下面的示例中,login.html提交姓名到response3.jsp页面。如果提交的姓名为空,需要 重定向到login.html页面;否则显示欢迎页面。 54 login.html代码如下:

姓名:

response3.jsp代码如下: <%@ page contentType="text/html;charset=GB2312" %> <% String s=request.getParameter("UserID "); byte b[]=s.getBytes("ISO-8859-1"); s=new String(b); if (s==null) {s="" ; response.sendRedirect("login.html");} else out.println("欢迎您来到本网页!"+s); %> 注意,用dispatcher.forward(request,response)方法和response对象中的sendRedirect ()方法都可以实现页面的重定向,但二者是有区别的。前者只能在本网站内跳转,且跳转 后,在地址栏中仍然显示以前页面的URL,跳转前后的两个页面属同一个request对象,用 户程序可以用request对象设置或传递用户程序数据。response.sendRedirect则不一样,它 相对前者是绝对跳转,在地址栏中显示的是跳转后页面的URL,跳转前后的两个页面不属 于同一个request对象。当然也可以用其他技术手段来保证request对象为同一个,但这不 在本节的讨论范围内。对于后者来说,可以跳转到任何一个地址的页面。例如: response.sendRedirect ("http: //www.baidu. com/") 3.利用response的body数据区 在Web服务的异步处理过程中,服务器一般采用向response的body数据区写数据(一 般是普通文本串或格式化文本串,如JSON 文本串)的方式实现与客户端的异步通信。当 然,写数据的工具是另一个内置对象out。关于异步处理,会在以后章节介绍。 3.eon对象 4 ssi 3.4.1 基本概念和主要方法 sesion是会话的意思,指的是客户端与服务器的一次会话过程,以便跟踪每个用户的 操作状态。一般情况下,sesion对象在第一个JSP页面或Servlet被装载时由服务器自动 创建,并在用户退出应用程序时由服务器销毁,完成会话期管理,这也是sesion对象的生命 周期。服务器为每个访问者都设立一个独立的sesion对象,用于存储sesion变量,并且各 个访问者的sesion对象互不干扰。 sesion对象是HtpSesion类的实例。sesion机制是一种服务器端的机制,服务器使 用类似于散列表的结构(也可能就是散列表)来管理客户端信息,因此在实际项目中,应该注 意慎用sesion对象,以免服务器内存溢出。服务器为每个客户新建一个sesion对象时产 生一个唯一的sesionID与sesion相关联,这个sesionID的值是一个既不会重复又不容易 找到规律以伪造的字符串,而且它保存在客户端的Cookie中。如果客户端不支持Cookie, 那么就不能使用sesion。可以通过重写URL等技术来保证sesionID的唯一性。 在实际的项目中,n对象往往作为一次会话期内共享数据的容器,用户程序可以 sesio 把最能标识用户的信息(如用户名、密码及权限等)存放在sesion对象中,以便对用户进行 管理。表3-3为sesion对象的主要方法。 表3- 3 sesion对象的主要方法 方法名 getAtribute(Stringname) getAtributeNames( ) getCreationTime( ) getId( ) getLastAcesedTime( ) getMaxInactiveInterval( ) getValueNames( ) invalidate( ) isNew( ) removeValue(Stringname) setAtribute(Stringname,Objectvalue) setMaxInactiveInterval( ) 方法说明 获取与指定名称关联的sesion属性值 取得sesion内所有属性的集合 返回sesion创建时间,单位为千分之一秒 返回sesion创建时JSP引擎为它设置的唯一的sesionID 返回当前sesion中客户端最后一次访问时间 返回两次请求间隔时间,以秒为单位 返回一个包含此sesion中所有可用属性的数组 取消sesion,使sesion不可用 判断是否为新创建的sesion 删除sesion中指定的属性 设置指定名称的sesion属性值 设置两次请求间隔时间,以秒为单位 55 56 下面的程序用到了session的一些常用方法,代码如下: <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.util.*;"%> session 对象示例
session 的创建时间:<%=session.getCreationTime()%>   <%=new java.sql.Time(session.getCreationTime())%>
session 的Id 号:<%=session.getId()%>
客户端最近一次请求时间: <%=session.getLastAccessedTime()%>   <%=new java.sql.Time(session.getLastAccessedTime())%>
两次请求间隔多长时间此session 被取消(ms): <%=session.getMaxInactiveInterval()%>
是否是新创建的一个session:<%=session.isNew() ?"是" : "否"%>
<% session. setAttribute ("name", "练习session"); session. setAttribute ("name2", "10000"); out.println("name"=+getAttribute("name")); out.println("name2"=+getAttribute("name2")); %> 以上程序显示了如何获知session的创建时间、sessionID 以及session的生命周期等。 程序运行结果如图3-2所示。 图3-2 程序运行结果 57 session对象生命周期结束有几种情况:客户端关闭浏览器,session 过期,调用 invalidate方法使session失效,等等。 为了保证系统安全,session对象有默认的活动间隔时间,通常为1800s,这个时间可以 通过setMaxInactiveInterval()方法设置,单位是s(秒)。该方法的原型如下: public void setMaxInactiveInterval(int n) 以下程序给出关于session生命周期的设置方法示例: <%@ page contentType="text/html;charset=GB2312" %> <%@ page import="java.util.*"%>

JspSession Page

会话标识:<%=session.getId()%>

创建时间:<%=new Date(session.getCreationTime())%>

最后访问时间:<%=new Date(session.getLastAccessedTime())%>

是否是一次新的对话? ? ? <%=session.isNew()%>

原设置中的一次会话持续的时间:<%=session.getMaxInactiveInterval()%> <%--重新设置会话的持续时间--%> <%session.setMaxInactiveInterval(100);%>

新设置中的一次会话持续的时间:<%=session.getMaxInactiveInterval()%>

属性UserName 的原值:<%=session.getAttribute("UserName")%> <%--设置属性UserName 的值--%> <%session.setAttribute("UserName","The first user!");%>

属性UserName 的新值:<%=session.getAttribute("UserName")%> 程序运行结果如图3-3所示。 图3-3 程序运行结果 58 3.4.2 常用技术 1.多页面数据共享技术 对于多页面的Web应用系统,一个用户在一个会话期内可能出现以下两种多页面数据 共享的情况: . 登录后,把相关登录信息(如用户名、角色、权限等)保存在数据共享区内,相当于一 个会话期内的全局变量,给其他页面或Servlet查询这些信息提供便利。 . 在特定情形下,多页面数据共享也是电子商务购物车技术实现的方案之一。多页面 相当于多货架,购物车相当于多页面数据共享。 实现以上技术的原理简述如下: (1)数据录入: session.setAttribute(String key, Object value) 其中,value是任意类型的Java对象,当然也可以是JSON 对象,可存放各类数据。需要注意 的是,在Servlet中,需要通过以下方法获得session对象: session=request. getSession() (2)数据查询: session.getAttribute(String key) 2.安全控制技术 主要安全控制技术如下: . 防止非法用户绕过登录页面,直接利用URL进入需要登录才能进入的页面。具体 解决办法有两种:其一是利用session中的信息,在页面中进行合法性验证;其二是 利用过滤器技术(以后章节会详细介绍)。 . 当登录用户由于特殊原因暂时离开时,非法用户趁机进行非法操作,会带来意想不 到的损失。对于这种情况,除了安全意识教育外,还可以利用session进行技术防 范,其主要原理是:设置有效的session活动间隔时间,默认是30min,可以人工设置 session对象的生命周期。 . 实现安全退出机制。关闭浏览器,并不能马上触发后台结束session,这会带来意想 不到的安全隐患。可在系统中专门设立“安全退出”按钮,单击该按钮,后台实际上 调用session.invalidate()方法,服务器同时回收内存。 3.其他内置对象介绍 5 3.5.1 application 对象 application对象实现了用户间数据的共享。与sesion对象只存放一个用户的共享 数据不同,application对象可存放所有用户的全局变量。application对象开始于服务器 的启动,随着服务器的关闭而消亡。在此期间,此对象将一直存在,这样,在用户的前后 两次连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对 此对象属性的操作都将影响到其他用户对此对象的访问。服务器的启动和关闭决定了 application对象的生命周期。它是ServletContext类的实例。表3-4是application对象 的主要方法。 表3- 4 application对象的主要方法 方法名 方法说明 getAtribute(Stringname) getAtributeNames() setAtribute(Stringname,Objectobject) removeAtribute(Stringname) getServerInfo() getRealPath(Stringpath) getInitParameter(Stringname) 返回指定属性的值 返回所有可用属性名 设置指定属性的值 删除属性及其值 返回JSP(或Servlet)引擎名及版本号 返回指定虚拟路径的真实路径 返回指定属性的初始值 从表34可见,n对象的数据存取方式与sn对象相似。在具体应用过程 -applicatioesio 中,可以把Web应用的状态数据放入application对象中,如实时在线人数、公共留言等信 息;也可使用application对象的getlnitParameter(StringparamName)方法获取Web应用 的参数,这些参数在web.xml文件中使用context-param元素配置。 3.5.2 out 对象 out对象代表向客户端发送数据,发送的内容是浏览器需要显示的内容。out对象是 PrintWriter类的实例,是向客户端输出内容时的常用对象。out对象的主要方法如表3-5 所示。 59 60 表3-5 out对象的主要方法 方 法 名方法说明 clear() 清除缓冲区的内容 clearBuffer() 清除缓冲区的当前内容 flush() 清空流 getBufferSize() 返回缓冲区的大小(以字节为单位),如不设缓冲区则为0 getRemaining() 返回缓冲区剩余空间大小 isAutoFlush() 返回缓冲区满时是自动清空还是抛出异常 println() 向页面输出内容 close() 关闭输出流 在同步请求/响应过程中,可以用request对象传递数据。而在异步请求/响应过程中, 则可以用response对象向请求端输出字符数据流(如JSON 文本串),这是通过out内置对 象完成的,具体如下: (1)前端(浏览器)的JSP页面或者HTML页面发起一个异常请求(以后章节会介绍)。 (2)后端(如Tomcat、Servlet)接收数据,并在处理后写回文本串数据。 PrintWriter out=response.getWriter(); out.write("文本串"); 文本串可以是简单的字符串,如"ok",也可以是JSON 文本串。具体应用在以后章节会 介绍。 3.5.3 config 对象 config对象用于在一个Servlet初始化时JSP引擎向它传递信息,此信息包括Servlet 初始化时要用到的参数(由属性名和属性值构成)以及服务器的有关信息(通过传递一个 ServletContext对象提供)。config对象的主要方法如表3-6所示。 表3-6 config对象的主要方法 方 法 名方法说明 getServletContext() 返回含有服务器相关信息的ServletContext对象 getInitParameter(Stringname) 返回初始化参数的值 getInitParameterNames() 返回初始化所需的所有参数 config对象提供了对每一个给定的服务器小程序或JSP页面的javax.servlet.Servlet Config对象的访问方法。它封装了初始化参数以及一些方法。其作用范围是当前页面,而 61 在别的页面无效。config对象在JSP中作用不大,而在Servlet中作用比较大。 3.5.4 exception 对象 exception对象用于异常处理。当一个页面在运行过程中发生了异常,就会产生此对 象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。此 对象是java.lang.Throwable的实例。exception对象的主要方法如表3-7所示。 表3-7 exception对象的主要方法 方 法 名方法说明 getMessage() 返回描述异常的消息 toString() 返回关于异常的简短描述消息 printStackTrace() 显示异常及其栈轨迹 FillInStackTrace() 重写异常的执行栈轨迹 下面用一个示例来说明exception对象的用法。首先在errorthrow.jsp中抛出一个异 常,代码如下: <%@ page language="java" import="java.util.*;" pageEncoding="ISO-8859-1" errorPage="error.jsp"%> <% int result=1 / 0; %> 在上面的代码中,使用page指令设定当前页面发生异常时重定向到error.jsp,error.jsp 的代码如下: <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1" isErrorPage="true"%> <% String path=request.getContextPath(); String basePath=request.getScheme() + "://" + request.getServerName() + ":"+request.getServerPort()+path+"/"; %> My JSP 'error.jsp' starting page error Message:getMessage() Method
62 <% out.println(exception.getMessage());%>

Error String:toString() Method
<% out.println(exception.toString());%> 程序运行结果如图3-4所示。 图3-4 程序运行结果 注意,exception对象不能在JSP文件中直接使用。如果要使用exception对象,要在 page指令中设定<%@isErrorPage="true"%>。 3.5.5 page 对象与pageContext 对象 page对象指向当前JSP页面本身,有点像类中的this指针。它是java.lang.Object类的 实例,可以使用Object类的方法,例如hashCode()、toString()等。page对象在JSP程序中 的应用不是很广,但是java.lang.Object类还是十分重要的,因为JSP内置对象的很多方法 的返回类型是Object,需要用到Object类的方法。读者可以参考相关的文档,这里就不详 细介绍了。 pageContext对象提供了对JSP页面内所有对象及名字空间的访问,也就是说它可以访 问本页面所在的session,也可以获取本页面所在的application对象的某一属性值。因此, 相当于页面中所有功能的集大成者,它所属的类名也是PageContext。pageContext对象的 主要方法如表3-8所示。 表3- 8 pageContext对象的主要方法 方法名 方法说明 getSesion( ) getRequest( ) getResponse( ) getException( ) getServletConfig( ) getServletContext( ) setAtribute(Stringname,Objectatribute) seiue(tignObetobitsoe) tAtrbtSrname,jcj,ncp getAtribute(Stringname) geiue(tignitsoe) tAtrbtSrname,ncp findAtribute(Stringname) removeAtribute(Stringname) remoeAtrbutStrngnitsop vie(iame,nce) getAtributeScope(Stringname) forward(StringrelativeUrlPath) 返回当前页中的HtpSesion对象(sesion) 返回当前页的ServletRequest对象(request) 返回当前页的ServletResponse对象(response) 返回当前页的Exception对象(exception) 返回当前页的ServletConfig对象(config) 返回当前页的ServletContext对象 设置属性的值 在指定范围内设置属性的值 取属性的值 在指定范围内取属性的值 寻找指定属性,返回其属性值或NULL 删除指定属性 在指定范围内删除属性 返回指定属性的作用范围 使当前页面导向另一页面 其中,scope参数的值是4个常数,代表4种范围:PAGE_SCOPE代表page范围, REQUEST_SCOPE 代表request范围,SESSION_SCOPE 代表sesion 范围, APPLICATION_SCOPE代表application范围。 3.案例———主页面中的用户管理 6 3.6.1 需求分析 主页面如图3-5所示。 图3-5 主页面 63