JSP9个内置对象



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地址

 request 对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,是最常用的对象常用的方法有:getParameter、getParameterNames 和getParameterValues 通过调用这几个方法来获取请求对象中所包含的参数的值。

四、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进行页面输出并换行

 out 对象代表了向客户端发送数据的对象,与“response” 对象不同,通过“out” 对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了pirnt和println之外,还包括clear、clearBuffer、 flush、getBufferSize和getRemaining,这是因为“out” 对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法

 

 

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

 

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

 session    对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。“session” 对象建立在cookie的基础上,所以使用时应注意判断一下客户端是否打开了cookie。常用的方法包括getId、 getValue、 getValueNames和putValue等。

七、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的属性

 pageContext 对象直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性

  常用的方法有 :findAttribute、getAttribute、getAttributesScope 和getAttributeNamesInScope

  一般情况下pageContext对象用到得也不是很多,只有在项目所面临的情况比较复杂的情况下,才会利用到页面属性来辅助处理。

pageContext对象是JSP中很重要的一个内置对象,不过在一般的JSP程序中,很少用到它。它是javax.servlet.jsp.PageContext类的实例对象,可以使用PageContext类的方法。实际上,pageContext对象提供了对JSP页面所有的对象及命名空间的访问。
pageContext对象能够存取其他隐含对象。
1.pageContext对象存取其他隐含对象属性的方法,此时需要指定范围的参数。
void setAttribute(String name, Object value, int scope)
范围参数有四个,分别代表四种范围:PAGE_SCOPE、REQUEST_SCOPE、SESSION_SCOPE、APPLICATION_SCOPE
3.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 的属性对象
      <%
//使用pageContext设置属性,该属性默认在page范围内
//pageContext.setAttribute("name","jason test");
request.setAttribute("name","霖苑编程");
session.setAttribute("name","霖苑计算机编程技术培训");
//session.putValue("name","计算机编程");
application.setAttribute("name","培训");
%>
page设定的值:<%=pageContext.getAttribute("name")%><br>
request设定的值:<%=pageContext.getRequest().getAttribute("name")%><br>
session设定的值:<%=pageContext.getSession().getAttribute("name")%><br>
application设定的值:<%=pageContext.getServletContext().getAttribute("name")%><br>
范围1内的值:<%=pageContext.getAttribute("name",1)%><br>
范围2内的值:<%=pageContext.getAttribute("name",2)%><br>
范围3内的值:<%=pageContext.getAttribute("name",3)%><br>
范围4内的值:<%=pageContext.getAttribute("name",4)%><br>
<!--从最小的范围page开始,然后是reques、session以及application-->
<%pageContext.removeAttribute("name",3);%>
pageContext修改后的session设定的值:<%=session.getValue("name")%><br>
<%pageContext.setAttribute("name","应用技术培训",4);%>
pageContext修改后的application设定的值:<%=pageContext.getServletContext().getAttribute("name")%><br>
值的查找:<%=pageContext.findAttribute("name")%><br>
属性name的范围:<%=pageContext.getAttributesScope("name")%><br> <%=application.getAttribute("name") %><br><%=pageContext.getAttributeNamesInScope(4) %><br><%=pageContext.getAttributesScope("name") %>
  </body>
页面显示结果:::
page设定的值:null request设定的值:霖苑编程session设定的值:霖苑计算机编程技术培训application设定的值:培训 范围1内的值:null范围2内的值:霖苑编程 范围3内的值:霖苑计算机编程技术培训 范围4内的值:培训 pageContext修改后的session设定的值:null pageContext修改后的application设定的值:应用技术培训 值的查找:霖苑编程 属性name的范围:2应用技术培训org.apache.catalina.util.Enumerator@5f2db0 2

九、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.

 “page” 对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。

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

 

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

 “config” 对象提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得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中的数组下标越界异常 信息

“exception” 对象则代表了JSP文件运行时所产生的例外对象,此对象不能在一般JSP文件中直接使用,而只能在使用了“<%@ page isErrorPage="true "%>”的JSP文件中使用四个作用域:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值