随笔-59  评论-31  文章-0  trackbacks-0

JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对象。如request,session,response,out等。

下面就JSP2.0给出的9个内置对象:

 

内置对象类型作用域
requestjavax.servlet.http.HttpServletRequestrequest
responsejavax.servlet.http.HttpServletResponseresponse
pageContextjavax.servlet.jsp.PageContextpage
sessionjavax.servlet.http.HtpSessionsession
applicationjavax.servlet.jsp.ServletContextapplication
outjavax.servlet.jsp.JspWriterpage
configjavax.servlet.ServletConfigpage
pagejava.lang.Objectpage
exceptionjava.lang.Throwablepage

 

我们同样可以根据它们的作用进行分类:

第一类:与Servlet有关:page和config

第二类:与Input/Output有关:out,request和response

第三类:与Context有关:application,session和pageContext

第四类:与Error有关:exception

 

一、属性保存范围

在JSP中可以通过setAttribute()和getAttribute()这两个方法来设置和取得属性。从而实现数据的共享。JSP提供了四种属性保存范围:response,request,session和application。

1、page:就是设置的属性只能在当前页面有效。通过pageContext的setAttribute()和getAttribute()。

2、request:指属性在一次请求范围内有效。如果页面从给一个页面跳转到另一个页面,那么该属性就失效了。这里所指的跳转是指客户端跳转,比如客户单击超链接跳转到其他页面或者通过浏览器地址栏浏览其他页面。如果使用服务器端跳转<jsp:forward>,则该属性仍然生效。同理使用request对象的setAttribute()和getAttribute()。

3、session:指客户浏览器与服务器一次会话范围内,如果服务器断开连接,那么属性就失效了。同理通过session对象的setAttribute()和getAttribute()。session范围的例外比如重新打开一个浏览器。

4、application:指在整个服务器范围,知道服务器停止以后才会失效。同理通过application对象的setAttribute()和getAttribute()。application范围就是保存的属性只要服务器不重启,就能在任意页面中获取,就算重新打开浏览器也是可以获取属性的。

 

二、移除属性:在属性的作用域还未到就想清除相应的属性时,必须编程清除。即调用相应对象的removeAttribute()方法就可以移除指定属性。

<%@ page language="java" contentType="text/html;charset=gb2312"%> <html> <head> <title>移除属性</title> </head> <body> <%-- 在page范围设置属性 --%> <% pageContext.setAttribute("name","James"); //设置属性name,其值为James pageContext.setAttribute("age","12"); //设置属性age,其值为12 pageContext.setAttribute("sex","男"); //设置属性sex,其值为男 %> <%-- 移除属性--%> <% pageContext.removeAttribute("sex"); %> <%-- 取得page范围属性--%> <% String strName = (String)pageContext.getAttribute("name"); //取值属性name的值 String strAge = (String)pageContext.getAttribute("age"); //取值属性age的值 String strSex = (String)pageContext.getAttribute("sex"); //取值属性sex的值 out.println("page范围:name属性值为" + strName + "<br>"); out.println("page范围:age属性值为" + strAge+ "<br>"); out.println("page范围:sex属性值为" + strSex); %> </body> </html>

  

 

 结果页面输出:page范围:name属性值为James
                        page范围:age属性值为 12

                        page范围:sex属性值为 null

三、request对象:request对象不但可以用来设置和取得request范围变量,还可以用来获取客户端请求参数、请求的来源、表头、Cookies等。

1、request获取客户端请求参数方法

 

 方法返回值类型 方法说明 
 getParameter(String name)String  获取参数名为name的参数值
 getParameterNames()Enumeration  获取所有参数的名称,可与上一个方法合用获取所有参数的值
 getParameterValues(String name) String[] 获取参数名为name的所有参数,比如参数是多个checkbox
 getParameterMap() Map 获取所有参数封装的Map实例,通过Map实例的String[] get("id")方法返回对应参数名为id的值数组

 

2、request的其他方法

 

方法返回值类型方法说明
getHeader(String name)String获取指定标题名称为name的标头
getHeaderName()Enumeration获取所有的标头名称
getIntHeader(String name)int获取标题名称为name的标头,内容以整数类型返回
getDateHeader(String name)long获取标题名称为name的标头,内容以日期类型返回
getCookies()Cookie获取相关的Cookie
getContextPath()String获取Context的路径
getMethod()String获取客户端的提交方式
getProtocol()String获取使用的HTTP协议
getQueryString()String获取请求的字符串
getRequestSessionId()String获取客户端的Session ID
getRequestURI()String获取请求的URI
getRemoteAddr()String获取客户端IP地址

 

四、response对象:用来向客户端传送输出信息。

 

方法返回值方法说明
addCookie(Cookie cookie)void 
addDateHeader(String name,long date)void 
addHeader(String name,String value)void 
addIntHeader(String name,int value)void 
setDateHeader(String name,long date)void 
setHeader(String name,String value)void 
setIntHeader(String name,int value)void 
sendError(int sc)void传送状态码
sendError(int sc,String msg)void传送状态码和错误信息
setStatus(int sc)void设置状态码
sendRedirect(String URL)void页面重定向,用来实现页面跳转

 

注:这里的response对象的sendRedirect(String URL)方法设置页面重定向将改变浏览器地址栏信息,所以也称客户端跳转。

实例1:response对象实现页面的自动刷新:只需要早JSP页面中加上

<%--使用response对象的setIntHeader设置属性Refresh的值(单位为秒)来实现页面自动刷新--%> <% response.addIntHeader("Refresh",10); %>

 

实例2:实现页面自动跳转:可以通过response对象的setHeader()方法添加一个标题为Refresh的标头,并制定页面跳转时间及跳转页面,从而实现页面自动跳转。 <% response.setHeader("Refresh","10;URL=http://www.baidu.com"); %>

  这里使用setHeader方法添加一个标题为"Refresh",值为"10,URL=http://www.baidu.com"的标头。

 

 

五、out对象:用来向页面输出信息。

 

方法返回值类型方法说明
clear()void清除网页上输出内容
clearBuffer()void清除缓冲区内容
close()void关闭缓冲区,清除所有内容
getBufferSize()int取得缓冲区大小
getRemaining()int取得缓冲区剩余大小
isAutoFulsh()boolean获得缓冲区是否进行自动清除的信息
print(String str)void进行页面输出
println(String str)void进行页面输出并换行

 

 

 

六、session对象:用来表示用户的会话状况,一般用于保存用户的各种信息,直到生命周期超时或者被认为释放掉为止。

 

方法返回值类型方法说明
getId()String获取session的ID
getCreationTime()long获取session的生成时间
getLashAccessedTime()long获取用户最后通过session发送请求时间
getMaxInactiveInterval()long获取session生命周期,如果超过这个时间则失效
invalidate()void清空session内容
isNew()boolean判断session是否为“新”的
setMaxInactiveInterval()void设置session生命周期,如果超过这个时间则失效

 

七、application对象:用来取得和设置Servlet的相关信息。

 

方法返回值类型方法说明
getMajorVersion()int获取主要的Servlet API版本
getMinorVersion()int获取次要的Servlet API版本
getServerInfo()String获取服务器版本
getMimeType()String获取指定文件的MIME类型
getContext()ServerContext获取指定Local的Application context
getRealPathString获取指定path的绝对路径

 

八、pageContext对象:可以用来设置page范围的属性,还可以设置其他范围属性,不过需要指定范围参数,同时还可以获取其他内置对象。

 

方法返回值方法说明
getException()Exception获取当前的exception内置对象
getOut()JspWriter 
getPage()Object 
getRequest()ServletRequset 
getResponse()ServletResponse 
getServletConfig()ServletConfig 
getServeltContext()ServletContext 
getSession()HttpSession 
getAttribute(String name,int scope)Object获取指定范围的name属性值
getAttributeNamesInScope(int scope)Enumeration获取指定范围所有属性名称
getAttributesScope(String name)int获取属性名称为name的属性范围
removeAttribute(String name)void移除属性名称为name的 属性
removeAttribute(String name,int scope)void移除指定范围的属性名称为name的 属性
setAttribute(String name,Object value,int scope)void设置指定范围的name属性
findAttribute(String name)Object寻找所有范围的属性名称为name的属性

 

九、page对象:page对象代表JSP转译后的Servlet,通过page对象可以非常方便地调用Servlet类中定义的方法。

实例1:通过page对象调用Servlet类中定义的方法 

<%@ page language="java" contentType="text/html;charset=gb2312"%> <%@ page info="this is the page Object Practice" %> <html> <head> <title>page对象</title> </head> <body> <%--通过page对象调用Servlet中的getServletInfo()方法 --%> <% String info = ((javax.servlet.jsp.HttpJspPage)page).getServletInfo(); %> <%=info %> </body> </html>

  

输出:this is the page Object Practice.

 

十、config对象:可以用来获取Servlet的配置信息。

 

方法返回值类型方法说明
getInitParameter(name)String获取Servlet初始化参数
getInitParameterNames()Enumeration获取Servlet所有初始化参数名称
getServletContext()ServletContext获取当前Application context
getServletName()String获取Servlet名称

 

十一、exception对象:用来处理错误异常,如果要用exception对象,必须指定page中的isErrorPage属性值为true。

实例:exception用来处理错误异常

1、包含错误的页面:error.jsp

<%@ page language="java" contentType="text/html;charset=gb2312" errorPage="ExceptionDemo01.jsp"%> <html> <head> <title>错误页面</title> </head> <body> <% int[] arr = {1,2,3}; out.println(arr[3]); %> </body> </html>

 

 注:error.jsp中arr[3]数组下表越界.需在page指令中指定errorPage的属性值为相应的异常处理程序。

2、异常处理页面:exceptionDo.jsp

<%@ page language="java" contentType="text/html;charset=gb2312" isErrorPage="true"%> <%@page import="java.io.PrintStream"%> <html> <head> <title>处理错误异常</title> </head> <body> <%=exception%><br> <%=exception.getMessage()%><br> <%=exception.getLocalizedMessage()%><br> <% exception.printStackTrace(new java.io.PrintWriter(out)); %> </body> </html>

 

 注:必须在page指令中指定属性isErrorPage属性值为true。也就是说这个页面可以用于异常处理。

将会在exceptionDo.jsp中打印出error.jsp中的数组下标越界异常 信息

posted on 2012-01-05 16:36 RoyPayne 阅读(18570) 评论(1)  编辑  收藏 所属分类: jsp相关

评论:
# re: JSP系列四:JSP9个内置对象 2014-02-07 14:40 | struts自媒体
这篇文章写的不错,我重新整理了一下,并且加深了分析,大家可以看:http://www.strutshome.com/index.php/archives/1  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: