JSP中的隐含对象_第1页
JSP中的隐含对象_第2页
JSP中的隐含对象_第3页
JSP中的隐含对象_第4页
JSP中的隐含对象_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章JSP中的隐含对象

JSP中隐含对象的概念属性(Attribute)JSP中的隐含对象错误处理JSP中隐含对象的概念在本节中,您将了解以下内容:

什么是JSP的隐藏对象JSP中有哪些隐藏对象JSP隐藏对象的定义JSP隐藏对象的由来JSP隐藏对象的定义6.1节publicvoid_jspService(HttpServletRequestrequest,HttpServletResponseresponse)

throwsjava.io.IOException,ServletException{

JspFactory_jspxFactory=null;

PageContextpageContext=null;

HttpSessionsession=null;

ServletContextapplication=null;

ServletConfigconfig=null;

JspWriterout=null;

Objectpage=this;

...

_jspxFactory=JspFactory.getDefaultFactory();

response.setContentType("text/html;charset=GBK");

pageContext=_jspxFactory.getPageContext(this,request,response,

"",true,8192,true);

application=pageContext.getServletContext();

config=pageContext.getServletConfig();

session=pageContext.getSession();

out=pageContext.getOut();

...

}下面是一个普通的jsp页面文件helloworld.jsp<%@pagecontentType="text/html;charset=GB2312"%><html><head><title>CH5-helloworld.jsp</title></head><body><%out.println("Helloworld,JSP!");%></body></html>我们知道,该文件被第一次浏览时,jsp引擎将对其进行转译。转译JSP隐藏对象的概念JSP隐藏对象的定义6.1节概念jsp页面在运行之前的转译过程中,jsp引擎为其_jspService方法定义了一些局部对象。由于jsp脚本都将转译成_jspService方法的代码,因此这些局部对象在jsp脚本中是可直接使用的。这些局部对象一个通常的叫法为隐藏对象。通过分析_jspService方法的代码,可知常用的隐藏对象有:pageContext PageContext类型session HttpSession类型

application ServletContext类型

config ServletConfig类型

out JspWriter类型

page Object类型

request HttpServletRequest类型response HttpServletResponse类型

常用的JSP隐藏对象JSP隐藏对象的定义6.1节隐含对象类型说明pageContextjavax.servlet.jsp.PageContext本JSP页面的上下文对象requestjavax.servlet.http.HttpServletRequest隐含请求信息sessionjavax.servlet.HttpSession表示会话对象applicationjavax.servlet.ServletContextJSP页面所在Web应用的上下文对象pagejava.lang.Object对当前JSP页面的引用,即Java中的thisconfigjavax.servlet.ServletConfigJSP页面的ServletConfig对象responsejavax.servlet.HttpServletResponse响应信息outjavax.servlet.JspWriterJSP的数据输出对象exceptionjava.lang.Throwable异常处理第六章JSP中的隐含对象

JSP中隐含对象的概念属性(Attribute)JSP中的隐含对象错误处理属性(Attribute)在本节中,您将了解以下内容:

哪些JSP隐藏对象可以保存属性属性的作用范围(Scope)可以使用属性的隐藏对象属性(Attribute)属性6.2节我们通常会将request、session、application和pageContext归为一类,原因在于:它们皆能借助属性来做到数据分享。下表列出了一般储存和取得属性的方法,这些方法pageContext、request、session和application皆可使用。方法说明voidsetAttribute(Stringname,Objectvalue)设定名称为name的属性,属性的设置为valueEnumerationgetAttributeNamesInScope(intscope)取得所有scope范围的属性名称组成的列举表ObjectgetAttribute(Stringname)取得name属性的值voidremoveAttribute(Stringname)删除名称为name的属性可以使用属性的隐藏对象属性6.2节使用属性的一般注意事项当我们使用getAttribute(Stringname)取得name属性的值时,它返回一个java.lang.Object类型的对象,因此,还必须根据name属性值的类型进行类型转换(Casting)工作。

例如,如果要取得String类型的Name属性时:

StringuserName=(String)pageContext.getAttribute(“userName”);

如果是Integer类型的Year属性时:

IntegerYear=(Integer)session.getAttribute("Year");在使用属性存储数据前,应该首先根据对属性的功能要求,确定准备将属性存储在Request、Session、Application或PageContext的哪个之中,以便将相应数据存入选定对象之中。

存入不同隐藏对象的属性在功能上有很大区别。

request.setAttribute("Month",newInteger(12));

session.setAttribute("Day",newInteger(27));

application.setAttribute("Times",newInteger(10));属性的范围(Scope)属性6.2节概念在使用属性前,应首先根据对属性的功能要求,确定准备将属性存储在Request、Session、Application或PageContext的哪个之中。这一点十分重要,这是因为这将决定属性的作用范围。换句话说,属性的宿主对象决定了属性的作用域、生存期等重要特性。范围如上所述,JSP的属性有四种宿主对象,也就有了四种作用范围pagerequestsessionapplication。属性的范围(Scope)属性6.2节概念属性的范围为page,指的是属性只作用在当前的JSP页面范围中。操作方法如果要将数据存入Page范围,可用pageContext对象的setAttribute()方法;若要取得page范围的数据,可用pageContext对象的getAttribute()方法。属性的范围(Scope)属性6.2节例子:PageScope1.jsp

<%@pagecontentType="text/html;charset=GB2312"%>

html>

<head>

<title>CH6-PageScope1.jsp</title>

</head>

<body>

<h2>Page范围-pageContext</h2>

<%

pageContext.setAttribute("Name","scott");

pageContext.setAttribute("Password","tiger");

%>

<jsp:forwardpage="PageScope2.jsp"/>

</body>

</html>属性的范围(Scope)属性6.2节例子:PageScope2.jsp

<%@pagecontentType="text/html;charset=GB2312"%>

<html>

<head><title>CH6-PageScope2.jsp</title></head>

<body>

<h2>Page范围-pageContext</h2>

</br>

<%

StringName=(String)pageContext.getAttribute("Name");

StringPassword=(String)pageContext.getAttribute("Password");

out.println("Name="+Name);

out.println("Password="+Password);

%>

</body>

</html>属性的范围(Scope)request属性6.2节概念:Request作用范围的属性隐藏对象request的生存期就是一次用户请求的生存期,即从用户的一次请求到向用户返回相应之间的服务器处理期间。存储在request对象下的属性在request的生存期中有效。为什么要研究request范围在Servlet技术规范中,一次请求处理可能涉及到多个服务器资源或JSP页面。比较典型的如jsp页面的<jsp:forward>动作和<jsp:include>动作,就是在同一个用户请求下在多个页面之间进行传递的。在使用<jsp:forward>动作和<jsp:include>动作时,对于每一个页面,它们处理的都是同一个请求,或者说,它们之间的请求是在这几个页面之间是共享的。当接收到用户发出新的请求时,这个请求随之失效,存放其中的属性也同时失效。属性的范围(Scope)request属性6.2节例子:RequestScope1.jsp

<%@pagecontentType="text/html;charset=GB2312"%>

<html>

<head>

<title>CH6-RequestScope1.jsp</title>

</head>

<body>

<h2>Request范围-request</h2>

<%

request.setAttribute("Name","mike");

request.setAttribute("Password","browser");

%>

<jsp:forwardpage="RequestScope2.jsp"/>

</body>

</html>属性的范围(Scope)request属性6.2节例子:RequestScope2.jsp

<%@pagecontentType="text/html;charset=GB2312"%>

<html><head><title>CH6-RequestScope2.jsp</title></head>

<body>

<h2>Request范围-request</h2>

<%

StringName=(String)request.getAttribute("Name");

StringPassword=(String)request.getAttribute("Password");

out.println("Name="+Name);

out.println("Password="+Password);

%>

</body>

</html>属性的范围(Scope)session属性6.2节概念session属性的作用范围为一段用户持续和服务器所连接的时间,但与服务器断线后,这个属性就无效。在Web应用开发中,Session属性是使用非常频繁的。正如在第四章讲到的,在Servlet中,维护会话的高级形式是利用HttpSession对象,在JSP中维护会话的主要途径就是利用session属性。我们应该注意到,在_jspService()方法中,session对象的初始化是以下方式:

session=pageContext.getSession();也就是说,在jsp脚本中,可以确保session对象是可用的。属性的范围(Scope)session属性6.2节JSP页面中使用session对象的一个典型片断<%

intvisitCount=1;

//查看是否绑定了visitCount属性。如果没有绑定,则说明用户是第一次访问页面

if(session.getAttribute("visitCount")==null){//是第一次访问

visitCount=1;

}else{//不是第一次访问

visitCount=((Integer)session.getAttribute("visitCount")).intValue();

visitCount++;

}

session.setAttribute("visitCount",newInteger(visitCount));

%><p>SessionID=<%=session.getId()%></p>属性的范围(Scope)application属性6.2节概念application对象的作用范围在服务器一开始执行服务,到服务器关闭为止。application的范围最大、停留的时间也最久,所以使用时要特别注意,不然可能会造成服务器负载越来越重的情况。建立范围为application的属性只要将数据存入application对象,数据的Scope就为application。如

application.setAttribute("visitCount",newInteger(visitCount));

第六章JSP中的隐含对象

JSP中隐含对象的概念属性(Attribute)JSP中的隐含对象错误处理JSP中的隐含对象在本节中,您将了解以下隐藏对象的具体操作方法:

page对象config对象request对象response对象out对象session对象application对象pageContext对象JSP中的隐藏对象page对象JSP中的隐藏对象6.3节page对象代表JSP本身,更准确地说它代表JSP被转译后的Servlet,我们在JSP转义后生成的Servlet类源代码中,可以看到JSP容器是这样初始化page对象的:

Objectpage=this;因此,它可以调用Servlet类所定义的方法。如:<%@pageinfo="这是一个JSP页面"ContentType="text/html;charset=GB2312"%>

<html><head><title>CH6-PageInfo.jsp</title></head>

<body>

<h2>page隐含对象</h2>

PageInfo=<%=((javax.servlet.jsp.HttpJspPage)page).getServletInfo()%>

</body>

</html>config对象

JSP中的隐藏对象6.3节config对象里存放着一些Servlet初始化的数据,config对象和page对象一样都很少被用到。config对象实现了javax.servlet.ServletConfig接口,它共有下列四种方法:

publicStringgetInitParameter(name)publicjava.util.EnumerationgetInitParameterNames()publicServletContextgetServletContext()publicSringgetServletName()上述前两种方法可以让config对象取得Servlet初始参数值,如果指定的初始参数值不存在,就返回null。config对象

JSP中的隐藏对象6.3节config.jsp<%@pagecontentType="text/html;charset=GBK"%>

<html>

<head><title>CH6–Config.jsp</title></head>

<bodybgcolor="#ffffff">

<h3>

ServletName:<%=config.getServletName()%><br>

JSPAuthor:<%=config.getInitParameter("Author")%><br>

Date:<%=config.getInitParameter("Date")%><br>

Info:<%=config.getInitParameter("Info")%><br>

</h3>

</body>

</html>request对象

JSP中的隐藏对象6.3节request对象包含所有请求的信息,如:请求的来源、标头、cookies和请求相关的参数值等等。JSP网页中的request对象实现了javax.servlet.http.HttpServletRequest接口。所以在JSP中,如果需要用户请求信息的所有细节,都可以通过request对象获得。request对象

JSP中的隐藏对象6.3节Request.jsp<body>

<h2>request对象所提供的方法</h2>

getParameter("Name"):<%=request.getParameter("name")%><br>

getParameter("Number"):<%=request.getParameter("password")%><br>

<%

request.setAttribute("Produce","JBuilder9");

request.setAttribute("Manufacturer:","Borland");

%>

getAttribute("Name"):<%=request.getAttribute("Name")%><br>

getAttribute("Number"):<%=request.getAttribute("Number")%><br><br>

getAuthType():<%=request.getAuthType()%><br>

getProtocol():<%=request.getProtocol()%><br>

getMethod():<%=request.getMethod()%><br>

……request对象

JSP中的隐藏对象6.3节http://localhost:8080/RequestResponse/request.jsp?name=Scott&password=Tigerresponse对象

JSP中的隐藏对象6.3节JSP中的response对象实现了javax.servlet.http.HttpServletResponse接口。它的主要用途就是将JSP处理数据后的结果传回到客户端。

<%@pageimport="java.util.*"%>

<%

response.setContentType("text/html");

response.setStatus(HttpServletResponse.SC_OK);

response.addHeader("MyName","Scott");

response.addIntHeader("MyAge",21);

response.addDateHeader("MyBirthday",newDate(1982,10,1).getTime());

response.addCookie(newCookie("myCookie","Helloworld!"));

%>

<html>

<head><title></title></head><body><p>HelloWorld!</p></body>

</html>response对象

JSP中的隐藏对象6.3节用TCPMonitor截获的响应信息如下所示

HTTP/1.1200OK

Content-Type:text/html;charset=ISO-8859-1

MyBirthday:Tue,31Oct388216:00:00GMT

Date:Sat,02Apr200515:50:44GMT

MyAge:21

MyName:Scott

Server:ApacheTomcat/4.0.6(HTTP/1.1Connector)

Transfer-Encoding:chunked

Set-Cookie:myCookie=Helloworld!

Set-Cookie:

JSESSIONID=0EC14FBB719910F2BF1E26A0BA7CA639;Path=/responseweb

69

<html>……</html>0out对象

JSP中的隐藏对象6.3节out对象能把结果输出到网页上。通常我们最常使用out.println(Stringname)和out.print(Stringname),它们两者最大的差别在于println()在输出的数据后面会自动加上换行的符号;反之,print()不会在数据后自动换行。out对象除了这两种方法最常使用之外,它还有一些方法(见下表),这些方法主要是用来控制管理输出的缓冲区(buffer)和输出流(outputstream)。方法说明voidclear()清除输出缓冲区的内容voidclearBuffer()清除输出缓冲区的内容voidclose()关闭输出流,清除所有的内容intgetBufferSize()取得目前缓冲区的大小(KB)intgetRemaining()取得目前使用后还剩下的缓冲区大小(KB)booleanisAutoFlush()如果返回为true,表示如缓冲区满了,会自动清除;若为false,表示如果缓冲区满了,不会自动清除,而会产生异常处理session对象

JSP中的隐藏对象6.3节session对象实现javax.servlet.http.HttpSession接口。它主要用于识别每一个用户,然后针对每一个别用户的要求,给予正确的响应。下面程序用来说明JSP网页被编译成Servlet时,session对象是如何初始化的:

HttpSessionsession=null;

……

session=pageContext.getSession();也就是说,在JSP页面中,session对象总是可用的。application对象

JSP中的隐藏对象6.3节application对象实现了javax.servlet.ServletContext接口,它主要功用在于取得或更改Servlet的设定。在_jspService()方法中,application对象以下列形式被初始化:

ServletContextapplication=null;

……

application=pageContext.getServletContext();可以看出application对象存储了当前Web应用的ServletContext。在JSP脚本中,我们可以直接使用application引用当前ServletContext而不必考虑初始化问题。pageContext对象

JSP中的隐藏对象6.3节pageContext对象能够存取其他隐含对象。当隐含对象本身也支持属性时,pageContext对象也提供存取那些属性的方法。不过在使用下列方法时,需要指定范围的参数:ObjectgetAttribute(Stringname,intscope)

返回name属性,范围为scope的属性对象,返回类型为java.lang.ObjectEnumerationgetAttributeNamesInScope(intscope)

返回所有属性范围为scope的属性名称,返回类型为EnumerationvoidremoveAttribute(Stringname,intscope)

删除属性名称为name,范围为scope的属性对象voidsetAttribute(Stringname,Objectvalue,intscope)

指定属性对象的名称为name、值为value、范围为scopeexception对象

JSP中的隐藏对象6.3节当JSP网页有错误时会产生异常,而exception对象就来针对这个异常做处理。exception对象和session对象一样,并不是在每一个JSP网页中都能够使用。若要使用exception对象时,必须在page指令中设定:<%@pagecontentType="text/html;charset=GB2312"isErrorPage="true"%>第六章JSP中的隐含对象

JSP中隐含对象的概念属性(Attribute)JSP中的隐含对象错误处理错误处理在本节中,您将了解以下内容:JSP网页转义成Servlet类时发生的错误转义成的Servlet类处理用户请求阶段的错误两类错误产生的原因和处理方法。错误处理转译时错误

错误处理6.4节转义处理时错误产生的一般原因:

我们在编写JSP时的语法有错误,导致JSP容器无法将JSP网页编译成Servlet类文件(.class),例如:500InternalServerError,500是指HTTP的错误状态码,因此是ServerErro

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论