首页 > 代码库 > JSP总结(三)——JSP中九大内置对象(汇总)
JSP总结(三)——JSP中九大内置对象(汇总)
注:后缀为汇总的基本上是整理一些网上的。
一、九大内置对象分类:
1. request 请求对象
类型 javax.servlet.ServletRequest 作用域 Request
2. response 响应对象
类型 javax.servlet.SrvletResponse 作用域 Page
3. pageContext 页面上下文对象
类型 javax.servlet.jsp.PageContext 作用域 Page
4. session会话对象
类型 javax.servlet.http.HttpSession 作用域 Session
5. application 应用程序对象
类型 javax.servlet.ServletContext 作用域 Application
6. out 输出对象
类型 javax.servlet.jsp.JspWriter 作用域 Page
7. config 配置对象
类型 javax.servlet.ServletConfig 作用域 Page
8. page 页面对象
类型 javax.lang.Object 作用域 Page
9. exception 例外对象
类型 javax.lang.Throwable 作用域 page
二、九大内置对象解析:
(一) 范围对象:
其中,有4个是范围对象: pageContext,request,session,application
对应<jsp:useBean/>指令的scope分别是:page,reqeust,session,application
也就是说,指定不同scope的bean对象(Java Bean)会被绑定到不同的范围对象中
选择范围对象的原则:作用域的范围越小越好;因为作用域小的生命周期短,有利于性能提高。
例如:
<jsp:useBean id="stu" class="vo.Student" scope="page"/>
表示stu对象被绑定到javax.servlet.jsp.PageContext对象(pageContext)中,其等价的代码
<%
Student stu = pageContext.getAttribute("stu");
if(stu==null) { stu=new Student(); pageContext.setAttribute("stu",stu); }
%>
1. pageContext
(1) 对象含义:
每一个jsp页面对应着一个pageContext。一般地,在实际应用中,主要是使用它来存取属性。
另外,pageContext对象能够存取其他隐含对象。
(2) 使用方法:
A. pageContext对象存取其他隐含对象属性的方法,此时需要指定范围的参数。
Object getAttribute(String name, int scope) Enumeration getAttributeNamesInScope(int scope) void removeAttribute(String name, int scope) void setAttribute(String name, Object value, int scope)
其中,范围参数有四个,分别代表四种范围:
PAGE_SCOPE、REQUEST_SCOPE、SESSION_SCOPE、APPLICATION_SCOPE
B. PageContext对象取得其他隐含对象的方法
Exception getException() //回传目前网页的异常,不过此网页要为error page, JspWriter getOut() //回传目前网页的输出流,例如:out Object getPage() //回传目前网页的Servlet 实体(instance),例如:page ServletRequest getRequest() //回传目前网页的请求,例如:request ServletResponse getResponse() //回传目前网页的响应,例如:response ServletConfig getServletConfig() //回传目前此网页的ServletConfig 对象,例如:config ServletContext getServletContext() //回传目前此网页的执行环境(context),例如:application HttpSession getSession() //回传和目前网页有联系的会话(session),例如:session
C. PageContext对象提供取得属性的方法
Object getAttribute(String name, int scope) //回传name 属性(范围为scope;类型为Object) Enumeration getAttributeNamesInScope(int scope) // 回传所有属性范围为scope 的属性名称,回传类型为Enumeration int getAttributesScope(String name) //回传属性名称为name 的属性范围 void removeAttribute(String name) //移除属性名称为name 的属性对象 void removeAttribute(String name, int scope) //移除属性名称为name,范围为scope 的属性对象 void setAttribute(String name, Object value, int scope) //指定属性对象的名称为name、值为value、范围为scope Object findAttribute(String name) //寻找在所有范围中属性名称为name 的属性对象
2. Request
(1) 对象含义:
该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以获取用户提交的信息。
如:请求的来源、标头、cookies和请求相关的参数值等等。
(2) 实现接口:
request 对象实现javax.servlet.http.HttpServletRequest接口的
(3) 使用方法:
当Request对象获取客户提交的汉字字符时,会出现乱码问题,必须进行特殊处理。
Eg:
request.setCharacterEncoding("utf-8");
A. 储存和取得属性方法:
void setAttribute(String name, Object value) //设定name属性的值为value Enumeration getAttributeNamesInScope(int scope) //取得所有scope 范围的属性 Object getAttribute(String name) //取得name 属性的值 void removeAttribute(String name) //移除name 属性的值
B. 取得请求参数的方法
String getParameter(String name) // 取得name 的参数值 Enumeration getParameterNames() //取得所有的参数名称 String [] getParameterValues(String name) //取得所有name 的参数值 Map getParameterMap() // 取得一个要求参数的Map
C. 能够取得请求HTTP 标头的方法
String getHeader(String name) //取得name 的标头 Enumeration getHeaderNames() //取得所有的标头名称 Enumeration getHeaders(String name) //取得所有name 的标头 int getIntHeader(String name) //取得整数类型name 的标头 long getDateHeader(String name) // 取得日期类型name 的标头 Cookie [] getCookies() // 取得与请求有关的cookies
D. 其他的方法
String getContextPath() //取得Context 路径(即站台名称) String getMethod() //取得HTTP 的方法(GET、POST) String getProtocol() //取得使用的协议 (HTTP/1.1、HTTP/1.0 ) String getQueryString() //取得请求的参数字符串,不过,HTTP的方法必须为GET String getRequestedSessionId() // 取得用户端的Session ID String getRequestURI() // 取得请求的URL,但是不包括请求的参数字符串 String getRemoteAddr() //取得用户的IP 地址 String getRemoteHost() // 取得用户的主机名称 int getRemotePort() // 取得用户的主机端口 String getRemoteUser() // 取得用户的名称 void getCharacterEncoding(String encoding) //设定编码格式,用来解决窗体传递中文的问题
3. Session
(1) 对象含义
a) 什么是Session对象
Session对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要Session对象。
b) Session对象的ID
当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个Session对象,同时分配一个String类型的ID号,JSP引擎同时将这换个 ID号发送到客户端,存放在Cookie中,这样Session对象,直到客户关闭浏览器后,服务器端该客户的Session对象才取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的Session对象。
(2) session对象简单来说就是表示目前个别用户的会话(session)状况。
(3) 实现的接口:
javax.servlet.http.HttpSession接口所提供的方法
(4) Session对象的常用方法
long getCreationTime() //取得session产生的时间,单位是毫秒 String getId() // 取得session 的ID long getLastAccessedTime() // 取得用户最后通过这个session送出请求的时间 long getMaxInactiveInterval() //取得最大session不活动的时间,若超过这时间,session 将会失效 void invalidate() // 取消session 对象,并将对象存放的内容完全抛弃 boolean isNew() //判断session 是否为"新"的会话 void setMaxInactiveInterval(int interval) //设定最大session不活动的时间,若超过这时间,session 将会失效
4. Application
(1) 对象含义
服务器启动后就产生了这个Application对象,当客户再所访问的网站的各个页面 之间浏览时,这个Application对象都时同一个,直到服务器关闭。但是与Session对象不同的时,所有客户的Application对象都时 同一个,即所有客户共享这个内置的Application对象。
application对象最常被使用在存取环境的信息。
因为环境的信息通常都储存在ServletContext中,所以常利用application对象来存取ServletContext中的信息。
(2) 实现接口:
application 对象实现javax.servlet.ServletContext 接口
(3) ServletContext接口容器所提供的方法
int getMajorVersion() //取得Container主要的Servlet API版本 int getMinorVersion() // 取得Container次要的Servlet API 版本 String getServerInfo() //取得Container的名称和版本 String getMimeType(String file) //取得指定文件的MIME 类型 ServletContext getContext(String uripath) //取得指定Local URL的Application context String getRealPath(String path) //取得本地端path的绝对路径 void log(String message) // 将信息写入log文件中 void log(String message, Throwable throwable) // 将stack trace 所产生的异常信息写入log文件中
(二) 五个其他对象:
1. page 对象
(1) 对象含义:
(2) 实现接口
page对象代表JSP本身,更准确地说page对象是当前页面转换后的Servlet类的实例。
从转换后的Servlet类的代码中,可以看到这种关系: Object page = this;
在JSP页面中,很少使用page对象。
(3) 使用方法:
2. response 对象
(1) 对象含义:
response 对象主要将JSP 处理数据后的结果传回到客户端。
(2) 实现接口:
response 对象是实现javax.servlet.http.HttpServletResponse 接口。response对象所提供的方法。
(3) 使用方法:
a. 设定表头的方法
void addCookie(Cookie cookie) // 新增cookie void addDateHeader(String name, long date) // 新增long类型的值到name标头 void addHeader(String name, String value) //新增String类型的值到name标头 void addIntHeader(String name, int value) //新增int类型的值到name标头 void setDateHeader(String name, long date) //指定long类型的值到name标头 void setHeader(String name, String value) //指定String类型的值到name标头 void setIntHeader(String name, int value) // 指定int类型的值到name标头
b. 设定响应状态码的方法
void sendError(int sc) // 传送状态码(status code) void sendError(int sc, String msg) //传送状态码和错误信息 void setStatus(int sc) //设定状态码
c. 用来URL 重写(rewriting)的方法
String encodeRedirectURL(String url) 对使用sendRedirect()方法的URL予以编码
3. out 对象
(1) 对象含义:
out 对象能把结果输出到网页上。
out对象实际上是PrintWriter对象的带缓冲的版本(在out对象内部使用PrintWriter对象来输出数据),可以通过page指令的buffer属性来调整缓冲区的大小,默认的缓冲区是8kb。
out主要是用来控制管理输出的缓冲区(buffer)和输出流(output stream)。
(2) 实现接口:
out对象的类型是javax.servlet.jsp.JspWriter,该类从java.io.Writer类派生,以字符流的形式输出数据
(3) 使用方法:
void clear( ) //清除输出缓冲区的内容 void clearBuffer( ) //发送数据到客户端后,清空缓冲区的内容 void close( ) // 关闭输出流,清除所有的内容 int getBufferSize( ) //取得目前缓冲区的大小(KB) int getRemaining( ) //取得目前使用后还剩下的缓冲区大小(KB) boolean isAutoFlush( ) //回传true表示缓冲区满时会自动清除;false表示不会自动清除并且产生异常处理 .flush() //输出缓冲区的数据 .newLine() //输出一个换行字符,换到下一行 .print(String str) //"str"是将要被写入页面缓冲区的字符(字符不以"/r/n"结尾) .println(String str) //"str"是将要被写入页面缓冲区的字符(字符以"/r/n"结尾) .flush() //清空缓冲区,发送全部数据到客户端page
4. exception对象
(1) 对象含义:
用于处理异常的网页
若要使用exception 对象时,必须在page 指令中设定:<%@ page isErrorPage="true" %>才能使用。
(2) 实现接口:
(3) 使用方法:
getMessage() getLocalizedMessage() printStackTrace(new java.io.PrintWriter(out))
5. config 对象
(1) 对象含义:
config 对象里存放着一些Servlet 初始的数据结构
(2) 实现接口:
config 对象实现于javax.servlet.ServletConfig 接口
(3) 使用方法:
public String getInitParameter(name) public java.util.Enumeration getInitParameterNames( ) public ServletContext getServletContext() public Sring getServletName()