JSP隐藏对象
JSP有9大隐藏对象,其中常用的隐藏对象是:request、response、session、application。
out输出流对象
隐藏对象out是javax.servlet.jsp.JspWriter类的实例。服务器向客户端输出的字符类内容可以通过out对象输出。out对象的API如下:
方法名 | 概述 |
---|---|
void append(CharSequence cs) | 向out缓存中扩展字符类输出。当缓存满或者执行out.flush()操作时,这些内容会输出到客户端浏览器 |
void clear() | 清空要输出的内容 |
void flush() | 将缓存内容flush到客户端浏览器 |
void println() | 向客户端输出内容 |
boolean isAutoFlush() | 返回缓存满时是否自动flush。如果为false,缓存满时会抛出异常 |
int getBufferSize() | 返回缓存大小。单位KB |
int getRemaining() | 返回缓存剩余大小,单位KB |
demo2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>out输出流对象</title>
</head>
<body>
<h1>out输出流对象</h1>
<form action="/xjm/demo2.jsp" method="get">
<input type="submit" value="clear" name="clear"/>
</form>
<%
out.println("out对象打印:123<br/>");
out.println("out缓存大小:" + out.getBufferSize() + "kb<br/>");
out.append("append对象:123asd<br/>");
out.println("out缓存占用大小:" + out.getRemaining() + "kb<br/>");
out.println("out是否自动flush:" + out.isAutoFlush() + "<br/>");
if(request.getParameter("clear") != null) {
out.clear();
out.println("clear over");
}
%>
</body>
</html>
运行结果
点击clear之后
request
隐藏对象out是javax.servlet.ServletRequest类的实例,代表客户端的请求。request包含客户端的信息以及请求的信息。每次客户端的请求都会变成一个request实例。具体用法类同于Servlet中的request。request对象的API如下:
方法名 | 概述 |
---|---|
void setAttribute(String name, Object value) | 在request域中保存一个对象。本页面内或者z转发(forward)之后的页面均可通过getAttribute(String name)方法获取该对象 |
Object getAttribute(String name) | 返回属性 |
String getMethod() | 返回请求方式,一般为GET或POST |
String getParameter(String key) | 返回提交的参数 |
String[] getParameterValues(String key) | 返回提交到多个同名参数值。以数组形式返回 |
Enumeration getParameterNames() | 返回所有提交的参数名称 |
Cookie[] getCookie() | 返回所有Cookie |
String getContextPath() | 返回应用程序路径 |
String getRequestURI() | 返回请求的URI路径 |
void setCharacterEncoding(String encoding) | 设置request的编码方式 |
String getHeader(String name) | 获取request头信息 |
Enumeration getHeaderNames() | 返回所有的request头名称 |
Dispacher getRequestDispacher() | 返回Dispatcher对象。Dispatcher对象可以执行转发(forward)操作 |
HttpSession getSession() | 返回内置对象session |
response
隐藏对象out是javax.servlet.ServletResponse类的实例,代表着客户端的响应。服务器端的任何输出都要通过该对象发送到客户端浏览器。每次服务器都会想应一个response对象。具体用法类同于Servlet中的response。response对象的API如下:
方法名 | 概述 |
---|---|
void clear() | 清空暂存在缓存区的输出 |
void addCookie(Cookie cookie) | 设置Cookie |
OutputStream getOutputStream() | 返回服务器输出流,可以通过该流输出二进制信息 |
void sendRedirect(String url) | 使页面重定向(redirect)到另一个页面 |
void setContentType(String contentType) | 设置文档类型 |
PrintWriter getOut() | 返回内置对象out |
void setHeader(String name, String value) | 设置response头信息 |
void setStatus(int status) | 设置response状态码 |
config
隐藏对象out是javax.servlet.ServletConfig类的实例。ServletConfig封装了配置在web.xml中初始化的JSP参数。JSP通过config获取这些参数,一个JSP文件共用一个config对象。config对象的API如下:
方法名 | 概述 |
---|---|
String getInitParameter(String name) | 返回配置在web.xml中的初始化参数 |
Enumeration getInitParameterNames() | 返回所有的初始化参数名称 |
ServletContext getServletContext() | 返回application内置对象 |
String getServletName() | 返回Servlet的名称 |
session
隐藏对象out是javax.servlet.http.HttpSession类的实例。session与cookie是记录客户访问的两种机制,session用于在服务器端保存用户信息,cookie用于在客户端保存用户信息。在Servlet中需要通过request.getSession()方法来获取session对象,而JSP中可以直接使用。如果<%@ page session=“false” %>,则隐藏对象session不可用。每个用户对应一个session对象。session对象的API如下:
方法名 | 概述 |
---|---|
String getId() | 返回session的id |
Object getAttribute(String name) | 返回属性 |
Enumeration getAttributeNames() | 返回session中所有属性名 |
long getCreateTime() | 返回该sessoin创建的时间 |
long getLastAccessedTime() | 返回该session最后一次访问时间 |
int getMaxInactiveInterval() | 返回seesoin的最大允许的间隔时间。单位为秒 |
void setAttribute(String name, Object value) | 设置session |
void setMaxInactiveInterval(long second) | 设置最大允许时间间隔 |
application
隐藏对象out是javax.servlet.ServletContext类的实例。application代表了Servlet的上下文。application封装了JSP所在Web程序的信息。例如web.xml中配置的全局的初始化信息。Servlet中application对象需要通过ServletConfig.getServletContext()获取。整个Web应用对应一个application对象。application对象的API如下:
方法名 | 概述 |
---|---|
Object getAttribute(String name) | 返回属性 |
Enumeration getAttributeNames() | 返回application中所有属性名 |
void setAttribute(String name, Object value) | 设置application属性 |
void removeAttribute(String name) | 移除application属性 |
String getInitParameter(String name) | 返回全局初始化参数 |
Enumeration getInitParameterNames() | 返回所有的全局初始化参数名称 |
String getMimeType(String filename) | 返回文件的文档类型 |
String getRealPath(String relativePath) | 返回相对网址的绝对路径 |
page
隐藏对象out是javax.servlet.jsp.HttpJspPage类的实例。page对象代替了当前JSP页面,是当前JSP编译后的Servlet类的对象,类同于Java类中的this关键字。代表了JSP编译后的java文件。
pageContext
隐藏对象out是javax.servlet.jsp.PageContext类的实例。与application类似,pageContext代表JSP当前页面的上下文,也就是JSP界面编译后的内容。通过该对象可以获取JSP中的资源。可以通过xxxAttribute方法来操作当前页面的域对象,还可以通过xxxAttribute(…,int scope)方法来操作其他三个域对象,pageContext对象的API如下:
方法名 | 概述 |
---|---|
Object findAttribute(String name) | 依次从pageContext,request,session,applicaton中查找指定的属性,若找到则立即返回且结束该次查找,若找不到返回null |
Object getAttribute(String name) | 返回属性 |
Object getAttribute(String name, int scope) | 返回指定范围内的属性。范围:PAGE_SCOPE、REQUEST_SCOPE、SESSION_SCOPE、APPLICATION_SCOPE |
Object setAttribute(String name, Object value) | 设置属性 |
Object setAttribute(String name, Object value, int scope) | 在指定范围内的属性 |
JspWriter getOut() | 返回内置对象out |
Object getPage() | 返回内置对象page |
ServletRequest getRequest() | 返回内置对象request |
ServletResponse getResponse() | 返回内置对象response |
ServletSession getSession() | 返回内置对象session |
scope值均为int型静态变量:
- PAGE_SCOPE:1
- REQUEST_SCOPE:2
- SESSION_SCOPE:3
- APPLICATION_SCOPE:4
使用时,可直接使用对应的int值,也可通过pageContext内置对象获取。
e.g. pageContext.PAGE_SCOPE
exception
隐藏对象out是javax.lang.Exception类的实例。它封装了JSP抛出的异常信息。
如果要使用exception对象,首先要设置<%@ page isErrorPage=“true” %>,exception通常用来处理错误界面。
JSP四个域对象
JSP有4个域对象,依照作用范围从大到小分别为:application、session、request、pageContext。
application当前项目中均可使用。session一次会话中可使用,一次回话可以有多次请求。request一次请求中可使用。pageContext只在当前页面有效。