全面解析JSP内置对象
java提供了预设的内置对象并内置在jsp的网页环境中,而且提供了编写jsp所需的基本功能。目前jsp中有9个隐含对象,分别为request、response、out、session、application、pageContext、config、page、和exception。使用这些对象可以方便请求、响应或会话等信息。
jsp内置对象:
request:取得客户端数据与系统的信息。
response:响应客户端信息。
application:记录与处理上线者共享的数据。
session:记录与处理上线者的个别数据。
out:控制数据输出的操作。
config:取得JSP编译后Servlet的信息。
pageContext:存取与处理系统运行时期的各项信息。
page:表示当前的JSP网页。
request对象常用方法:
方法 | 说明 |
---|---|
Object getAttribute(String name) | 返回name 所指定的属性值 |
void setAttribute(String name,Object obj) | 设定name所指定的属性值为obj |
void removeAttribute(String name) | 删除name所指定的属性 |
java.util.Enumeraton getAttributeNames() | 返回request对象所有属性的名称集合 |
String getParameter(String name) | 从客户端获取name所指定的参数值 |
java.util.Enumeraton getParameterNames() | 从客户端获取所有参数名称 |
String [] getParameterValues(String name) | 从客户端获取name所指定参数的所有值 |
int getServerPort() | 返回服务器接收请求的端口 |
String getServerName() | 返回服务器名称 |
String getRemoteAddr() | 获取客户端的IP地址 |
int getRemotePort | 获取客户端的请求端口 |
String getContextPath() | 返回环境路径(Web服务程序根目录) |
String getCharacterEncoding() | 返回请求正文中所使用的字符编码 |
void setCharacterEncoding(String chaen) | 设定请求正文中所使用的字符编码 |
Cookie[] getCookies() | 返回客户端所有的Cookie对象 |
Session getSession() | 返回请求相关的session对象 |
String getContentType() | 返回请求正文的MIME类型 |
int getContentLength() | 返回请求的Body的长度,单位为字节 |
response对象的常用方法
方法 | 说明 |
---|---|
void sendRedirect(String redirectURL) | 将客户端重定向到指定的URL |
void setContentType(String contentType) | 设置响应数据内容的类型 |
void setContentLength(int contentLength) | 设置响应数据内容的长度 |
void setHeader(Stringname ,String value) | 设置HTTP应答报文的首部字段和值以及页面的自动刷新 |
void setStatus(int n) | 设置响应的状态行 |
ServletOutputStream getOutputStream() | 获取二进制类型的输出流对象 |
printWriter getWriter() | 获取字符类型的输出流对象 |
String encodeRedirectURL(String url) | 编码指定的URL,以便向sendRedirect发送 |
int getBufferSize(int bufferSize) | 获取缓冲区的大小 |
void setBufferSize(int bufferSize) | 设置缓冲区的大小 |
void flushBuffer() | 强制发送当前缓冲区的内容到客户端 |
void resetBuffer() | 清楚响应缓冲区的内容 |
void addCookie(Cookie cookie) | 向客户端发送一个cookie |
void addHeader(String name,String value) | 添加HTTP文件的头文件 |
boolean isCommitted() | 判断服务器是否已将数据输出客户端 |
String encodeURL(String url) | 编码指定的url |
out对象
方法 | 说明 |
---|---|
clear() | 清除缓冲区的数据,若缓冲区中已经是空的,则会产生IOException的异常 |
clearBuffer() | 清除缓冲区的数据,若缓冲区中已经是空的,并不会产生IOException的异常 |
flush() | 直接将目前暂存于缓冲区中的数据输出 |
getBufferSize() | 返回缓冲区的大小 |
getRemaining() | 返回缓冲区中剩余的空间大小 |
isAutoFlush() | 返回布尔值表示是否自动输出缓冲区中的数据 |
newLine() | 输出换行 |
print(datatype data) | 输出数据类型为datatype的数据data |
println(datatype data) | 输出数据类型为datatype的数据data并自动换行 |
session对象
建立session变量:session.setAttribute(“变量名称”,变量内容)
eg:session.setAttribute(“id”,编号);
返回session变量:session.getAttribute(“变量名称”);
返回所有session中的变量名称:session.getAttributeNames();
清除session中的变量:session.removeAttribute(“变量名称”);
结束session : session.invalidate();
其他session对象的常用方法:
方法 | 说明 |
---|---|
getCreationTime() | 返回session建立的时间,返回值为格林威治时间1970年1月1日开始算起到session建立时的毫秒数 |
getLastAceessedTime() | 返回客户端对服务器端提出请求至处理session中数据最后的时间,若为新建立的session则返回-1 |
getMaxInactiveInterval() | 返回客户端未对session提出请求而session开始停滞到自动消失之间所间隔的时间,返回值以秒为单位 |
isNew() | 返回布尔值表示是否为新建的session |
SetMaxInactiveInterval(int interval) | 设置客户端未对session提出请求而session开始停滞到自动消失之间所间隔的时间为interval,以秒为单位 |
application 内置对象
建立application变量:application.setAttribute(“变量名称”,变量内容)
返回application中的变量:application.getAttribute(“变量名称”);
删除application中的变量数据:application.removeAttribute(“变量名称”);
返回所有的application变量:application.getAttributeNames();
使用application对象取得信息
方法 | 说明 |
---|---|
getMajorVersion() | 返回服务器解释引擎所支持的最新servlet API版本 |
getMinorVersion | 返回服务器解释引擎所支持的最低servlet API版本 |
getMimeType(String file) | 返回文件file的文件格式与编码格式 |
getRealPath(String path) | 返回虚拟路径path的真实路径 |
getServerInfo() | 返回服务器解释引擎的信息 |
application与session对象存储数据变量的方式有何区别?
application:记录联机用户共享的数据。
session:记录联机用户的个别数据。
pageContext 对象
方法 | 说明 |
---|---|
Object getAttribute(String name) | 返回当前页面内的name变量 |
void setAttribute(String name,Object obj) | 设定当前页面内name的变量值为obj |
void removeAttribute(String name) | 删除当前页面内的name变量 |
HttpSession getSession() | 取得页面的session对象 |
ServletContext getServletContext() | 返回ServletContext对象,这个对象对所有的页面都是共享的 |
javax.servlet.ServletRequest getRequest() | 该方法的返回对象时jsp内置对象request,主要用于获取客户端的信息 |
pageContext.setAttribute(“useName”,name)设置的属性在当前页面内有效
pageContext.getSession().setAttribute(“session value”,name)设置的属性在 session中有效
pageContext.getServeltContext().setAttribute(“sharevalue”,name)设置的属性对所有页面共享
config对象
方法 | 说明 |
---|---|
String getInitParameter(String name) | 返回name所指定的初始参数 |
java.util.Enumeration getInitParameterNames() | 返回所有初始参数 |
ServletContext getServletContext | 返回Servlet相关的上下文对象 |
String getServletName() | 返回Servlet名称 |
exception对象
方法 | 说明 |
---|---|
String getMessage() | 返回错误信息 |
String getLocalizedMessage() | 取得本地语系的错误提示信息 |
void printStackTrace() | 以标准错误的形式输出一个错误和错误的堆栈 |
String toString() | 该方法以字符串的形式返回一个对异常的描述 |
Throwable fillInStackTrace() | 重写错误的堆栈 |
response重定向方法sendRedirect()和动作元素jsp:forward的区别
(1)response.sendredirect()会在客户端呈现跳转后的URL地址;
这种跳转称为客户端跳转。使用response.sendredirect()将重定向的URL发送到客户端,
浏览器再根据这个URL重新发起请求。所以用这个方法时,
你在浏览器地址栏上会看到新的请求资源的地址。
并且这个时候的request,response都和第一次的不一样了。
这时是重新产生了新的request,response。
(2)使用<jsp:forward>完全是在服务器上进行,浏览器地址栏中的地址保持不变;
这种跳转称为服务器端跳转。所以使用这个方法时没有产生新的用request,response。
因为request没有变,在同一个请求内,可以用request来转递参数。
(3)response.sendRedirect()想带参数的话,
自己在地址中写成 xxx.jsp?param1=aaa&... 这种形式传递参数。
<jsp:forward>能够使用<jsp:param/>标签向目标文件传送参数和值 ,
目标文件必须是一个动态的文件,能够处理参数。
(4)<jsp:forward>后面的语句不会被执行也不会继续发送到客户端,
response.sendRedirect()后面的语句会继续执行,除非语句前面有return。
(5)<jsp:forward>是在服务器的内部进行转换,只发送给客户端最后转到的页面,
速度会比较快;response.sendRedirect()需要服务器与客户端之间的往返,
可以转到任何页面,包括网络有效域名。但速度比较慢。
session对象的生命周期在哪些状况下会结束
当以下四种情形之一发生时,session与其中的数据便会消失:
(1)用户关闭当前正在使用的浏览器程序。
(2)关闭网页服务器。
(3)用户未向服务器提出请求超过预设的时间,Tomcat服务器预设为30分钟。
(4)运行程序结束session。
上一篇: 深入理解JSP的九个内置对象及其功能
下一篇: 深入理解JSP中的内置对象及其作用范围