参考 Java Web开发基础_第1页
参考 Java Web开发基础_第2页
参考 Java Web开发基础_第3页
参考 Java Web开发基础_第4页
参考 Java Web开发基础_第5页
已阅读5页,还剩198页未读 继续免费阅读

下载本文档

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

文档简介

1、第3章 Java Web开发(kif)基础151共二百零三页第3章 Java Web开发(kif)基础3.1 概述3.2 JSP技术3.3 Servlet技术3.4 JavaBean组件模型3.5 JDBC数据库访问技术 3.6 EL与JSTL标记库3.7 MVC模式(msh)及应用实例2共二百零三页3.1 概述(i sh)3.1.1 静态网页与动态网页3.1.2 Servlet与JSP概述3.1.3 JSP程序(chngx)示例3共二百零三页3.1.1 静态网页(wn y)和动态网页(wn y)静态网页静态网页:指页面内容在访问前就已制作好的页面,通常为标准的HTML文件(.htm或.htm

2、l),可以包含文本、图像(t xin)、声音、Flash动画、客户端JavaScript脚本、Applet以及ActiveX控件等。 动态网页动态网页:通常为含有服务器端代码的网页,这些代码会在下载前由服务器解释执行,结果与静态内容合并后返回客户端。动态网页的优点能够访问服务器端的数据库具有交互性网页维护的工作量有所减少4共二百零三页3.1.2 Servlet与JSP Servlet概述Servlet称为(chn wi)Java的服务器端应用小程序,是Sun的服务器端组件技术之一。属于Web服务器扩展,是Java平台下实现动态网页的基本技术,具有占用资源少、效率高、可移植性和安全性强等特点。S

3、ervlet应用模型如图3.1所示:Servlet客户端EJB组件JavaBean组件数据库JDBC5共二百零三页JSP与Servlet的关系JSP,即Java Server Pages的简写,是由Sun公司(n s)和多家公司(n s)共同建立的一种基于Java语言的动态网页技术标准。 Servlet向客户端返回的内容需要用out.print()输出,不便于网页版面的设计和修改。为了解决这个问题,Sun制订了JSP技术规范,JSP网页版面的设计与维护可通过DreamWeaver等工具软件来实现,比Servlet要直观和容易。JSP页面最终会被JSP服务器编译成一个Servlet程序来运行。6

4、共二百零三页3.1.3 JSP程序(chngx)示例本示例设计一个名为rate.jsp的网页,实现美元对人民币的汇率转换功能。 代码详见光盘源码chapter3/rate.jsp,运行结果(ji gu)如下:7共二百零三页3.2 JSP技术(jsh)3.2.1 JSP元素(yun s)3.2.2 JSP隐含对象368共二百零三页3.2.1 JSP元素(yun s)36JSP页面构成JSP页面文件是一个(y )文本文件,文件中的内容由若干个元素构成。JSP页面元素构成如下图所示。JSP页面的组成元素注释元素指令元素脚本元素动作元素HTML元素JSP元素图3-2 JSP页面元素构成9共二百零三页H

5、TML,即HyperText Markup Language,超文本标记(bioj)语言,由一组代表不同类型内容(文本、图像、动画等)的标记构成页面,通过浏览器解释显示,页面间通过超接链串连起来,方便在各网页间跳转。(1) HTML元素(yun s)10共二百零三页(2) JSP指令(zhlng)元素JSP指令元素(Directive Elements)供JSP容器使用,为JSP容器提供相关的页面属性信息,用于指示JSP容器如何正确地翻译(fny)代码,或者执行特定的操作。 JSP指令元素主要包括三个:include、page和taglib,它们的基本语法格式形如: 11共二百零三页inclu

6、de指令基本(jbn)语法include指令元素称为文件包含。JSP容器在翻译JSP网页前将指定文本文件的内容嵌入当前页面中。其基本语法为:file属性指出被包含资源的URL,可使用相对路径或绝对路径。如:注意事项include指令适合于包含静态内容。 include指令是代码静态绑定,被include指令包含的内容在编译时会被静态地嵌入Servlet程序中 。include指令影响JSP页面的可读性。12共二百零三页page指令(zhlng)page指令用于设置当前JSP页面的属性,共有十余个属性。page指令中的属性大多数只需要在JSP页面中定义一次 。page指令中允许重复使用多次的属性

7、有pageEncoding和import属性等。page指令的基本语法13共二百零三页page指令各属性的作用language用于定义JSP页面脚本代码所采用的编程语言,默认值为java。extendsJSP页面最终会被JSP容器编译成一个Servlet程序,extends属性用于指定这个Servlet程序的父类。 import用于导入当前JSP页面中要用到的其它Java类。如果要导入多个Java类,用逗号来分隔它们(t men),例如要导入java.util.*和java.io.*,可写为:也可以分为两行来写,例如:14共二百零三页pageEncoding定义当前页面的字符编码标准,默认的字

8、符集为ISO-8859-1,如果页面中有简体中文,则字符集应该定义为GB2312或GBK或UTF-8。contentType用于定义MIME类型和字符集。MIME(多功能Internet邮件扩充服务)使用简单的ASCII文本来传递E-mail信息,E-mail中允许包含任意类型的附件文件。浏览器接收完数据后,按照数据的类型调用合适的软件来处理这些数据。如果接收到的信息是一个Excel文件,则浏览器会自动(zdng)启动Excel来处理这些信息,如果Excel软件启动失败或客户端找不到Excel软件时,浏览器提示用户将接收到的信息另存为文件。contentType属性的一般用法如下示: 常见的M

9、IME类型 请参看教程。15共二百零三页session用来指示JSP页面的Servlet实现类中是否要生成一个session隐含对象。关于session隐含对象,在后续的章节中介绍。buffer用于为out对象定义输出流缓冲区。out.write()输出的信息(xnx)会暂时存储在缓冲区中,缓冲区被刷新后,其中的信息(xnx)会通过PrintWriter对象传给客户端。输出缓冲区能够改善系统的性能。buffer默认值为8KB,取值none时表示不设缓冲区,则out对象的输出信息会直接传递给PrintWriter。例如:autoFlush用于定义out对象缓冲区的刷新属性。取值true时表示缓冲

10、区满时自动执行刷新操作,取值为false表示缓冲区满时,抛出一个IOException异常。默认值为true。这个属性一般和buffer属性联合使用。例如:16共二百零三页isThreadSafe取值true时表示JSP编译后所得的Servlet程序以多线程方式工作,采用Servlet多线程方式工作能提高程序的响应速度,减少系统开销。默认值为true。取值false时表示Servlet程序以单线程方式工作。info用于定义JSP页面的版权、开发日期等信息,可通过javax.sevlet. Servlet.getServletInfo()方法读取这些信息。例如:isELIgnored为true时

11、表示忽略JSP页面中的EL表达式,为false时表示JSP页面中的EL表达式要被解释和执行。默认值为true。EL表达式是JSP2.0中新增的技术规范,在后续(hux)章节介绍。17共二百零三页errorPageJSP页面如果发生了运行时异常(ychng),出错原因、出错的类名、出错的行号、出错的方法名等信息会被封装在异常(ychng)对象中。用于设置JSP页面发生运行时异常时把异常对象传递给指定的出错页处理,errorPage中的值为出错页的URL,可用相对路径或绝对路径。若没指定该属性,则运行时异常信息直接显示在浏览器上。例如: 或isErrorPage设为true时定义本JSP页面为异常

12、对象处理页,能接收异常页传递过来的异常信息。默认为false。18共二百零三页【示例3.2】定义一个exam.jsp页面,运行时会发生异常,并能自动切换至error.jsp页面显示出错的类名、方法名、出错原因等信息。exam.jsp的主要(zhyo)代码如下:% String s=null; int i=s.length(); %error.jsp主要代码如下:% StackTraceElement a=exception.getStackTrace(); out.print(出错原因:+exception+);out.print(出错的文件:+a0.getFileName()+); out.

13、print(出错的方法名:+a0.getMethodName()+);out.print(出错的行号:+a0.getLineNumber()+);%19共二百零三页taglib指令 taglib指令用于引入JSP扩展标记库。一个JSP标记的后台有相关的Java程序与之对应,在JSP页面中使用了一个标记,则表示此处调用相应的Java程序,程序运行结果传回至标记处显示。taglib的优势:实现了模型与表示的分离,提高了Java代码的可重用性和可维护性。修改代码时,程序员只须对Java程序进行(jnxng)重新编译,不需要触及网页表示层。在JSP中,taglib主要包括标准标记库和扩展标记库。标准标

14、记库就是常用的JSP动作(JSP Action),例如:、等。扩展标记库包括JSTL和用户自定义的标记等,在后续的章节中介绍。20共二百零三页在JSP页面中可以(ky)直接使用JSP动作标记,但若要使用扩展标记则必须在JSP页面头部用taglib指令作出声明。taglib指令的语法格式为:其中,uri属性是待用标记库的URI,每个标记库都有一个唯一的URI,这个URI在标记库的配置文件中已作定义。prefix属性值是待用标记的前缀,在标记库的配置文件中也已经作定义。例如:21共二百零三页(3) JSP脚本(jiobn)元素声明元素:用于声明类成员变量、成员方法或内部(nib)类。基本语法格式为

15、:声明类成员变量22共二百零三页声明(shngmng)成员方法%! int add(int n) /定义add()方法计算1+2+.+n int sum=0; for(int i=1;i23共二百零三页脚本小程序脚本小程序(scriptlet)就是(jish)一段嵌入页面中的Java代码。基本语法格式为: Web服务器会把标记内的Java代码段放在Servlet实现类 _jspService()方法的try内,所以在内定义的变量属于局部变量,并且作用范围仅限于try内。如果有多个标记,则按出现的先后顺序转译到try内。24共二百零三页表达式元素表达式元素的基本功能是执行一条Java表达式,如果

16、表达式有计算结果,则把结果显示在表达式位置上。表达式元素的基本语法格式(g shi)如下: 表达式元素的标记经过Tomcat翻译后,在Servlet实现类中一般表示为: out.write(expression);如果表达式复杂,则标记可能被分解成多条连续的out.write()语句。表达式元素的用法例如:注意:表达式不能带Java语句结束符“;”。25共二百零三页(4) JSP动作(dngzu)元素在JSP中,将类似于的JSP标记(bioj)也称为JSP动作。JSP动作分为标准动作和扩展动作。JSP标准动作是一组形如“”的标记,标记的前缀均为“jsp”。JSP标准动作的标记名是由JSP规范定

17、义,用户不能随意更改。利用JSP动作可以动态地插入文件、将用户重定向到另一个页面、动态生成XML元素等。26共二百零三页下面介绍一些常用JSP动作元素:动作也叫动态包含,它将被包含的文件视为一个独立的文件,在程序(chngx)运行时包含目标资源的返回信息。动态包含一个文件相当于在运行时动态调用这个文件。被包含的资源可以是动态的,也可以是静态的。基本语法格式如下: 或 *page属性用于定义了被包含资源的URL,可用相对路径或绝对路径。flush=true时表示在包含目标资源前,先刷新当前页面输出缓冲区中的内容。flush=false时则不刷新当前页面的输出缓冲区。默认值为false。如果要给被

18、包含的页面传递参数,可以使用标记。27共二百零三页参数标记为、和等动作(dngzu)元素传递参数,如果在其它场合中使用,JSP容器会报告编译错误。的基本语法:28共二百零三页动作标记使程序从当前(dngqin)页面跳转到另一个目标页面运行,目标页面可以是静态资源(如*.htm),也可以是一个JSP页面(*.jsp),还可以是一个Servlet、CGI程序等。会导致当前JSP页面运行中断,断点后的代码将无法被继续执行。 的基本语法格式为:或 *29共二百零三页主要用来在客户端浏览器中加载运行一个(y )Applet或JavaBean,被加载的Applet或JavaBean可以是单个类文件*.cl

19、ass,也可以是一个*.jar包。在JSP页面中使用动作,服务器将把被加载的文件传送到客户端,由客户端的JVM运行Applet或JavaBean。 30共二百零三页是的一部分,只能在中使用,使用于其它场合时会在编译时报错。在内部书写。也是的一部分,用于定义(dngy)启动Applet/JavaBean失败时显示的提示信息。只能在中使用,使用于其它场合时会在编译时报错。31共二百零三页JSP注释JSP注释也叫隐藏注释或服务器端注释,只有打开JSP页面后才能看到它。JSP注释中的内容被编译器忽略(hl),不会出现在Servlet程序中,也不会传至客户端浏览器。其基本语法为: 不同于HTML注释,H

20、TML注释内容会返回到客户端浏览器,但注释信息不会在浏览器中显示。在HTML注释中可以嵌套或等标记,从而输出一些动态的注释信息。其语法:!- 注释内容 | -注意:JSP注释属于标记级的注释,不要把它嵌套在其它“”的标记内。32共二百零三页XML(eXtensible Markup Language, 可扩展的标记语言)允许用户自定义一组标记来描述数据,XML的主要目标是提供结构化数据。XML文档由文件头和文件体两大部分构成。文件头负责向XML解释器传递文档信息,主要包括XML声明、注释和文档类型等。文件体是用XML标记描述的数据。文档声明version:指明XML规范版本号,一般取值为1.0

21、。encoding:可选,用于指明字符的编码标准,默认值是UTF-8,简体中文字符集也可以设为gb2312。standlone:取值yes时表示XML文档是自我(zw)验证,取值no时表示使用DTD等进行验证。(5) XML与XML文档33共二百零三页XML文件体XML的文件体是用XML标记来存储数据的地方。采用(ciyng)树形结构来存储数据,并且有一个标记充当根元素。根元素只有一个,根元素中可以嵌套其它标记(子元素)。例如,一个描述学生信息的XML文档如下: AB0987 张三 4147644 AC88721 李四 5253354 34共二百零三页 AB0987 张三(zhn sn) 41

22、47644 书写XML文档时的注意事项:起始标记和结束标记必须配对出现。如果没有(mi yu)标记体,则称为空标记,空标记可以简写为形式,例如:XML标记大小写敏感。例如不同于。根元素唯一。子元素间允许层次嵌套,但不允许交叉。例如,以下的和子元素出现了交叉现象: AB0987 张三 414764435共二百零三页36JSP规范定义(dngy)了常用的9个隐含对象(implicit objects)。隐含对象由Servlet容器自动创建与管理,然后传给JSP页面的Servlet实现类使用。也就是说,JSP页面可直接使用隐含对象而不须用new关键字来创建。(1) 概述(i sh)3.2.2 JSP

23、隐含对象共二百零三页37JSP隐含对象(duxing)及其依赖的类/接口如下表所示:隐含对象依赖的类/接口outjavax.servlet.jsp.JspWriterrequestjavax.servlet.http.HttpServletRequestresponsejavax.servlet.http.HttpServletResponsesessionjavax.servlet.http.HttpSessionapplicationjavax.servlet.ServletContextexceptionjava.lang.Trowableconfigjavax.servlet.Serv

24、letConfigpagejava.lang.ObjectpageContextjavax.servlet.jsp.PageContext共二百零三页38(2) out 对象(duxing)out对象主要提供输出信息(xnx)的方法:print()和println()方法用于向客户端返回信息。被输出的信息可以是基本数据类型(如int、double等),也可以是对象(如字符串等)。例如:newLine()方法:输出一个回车换行符。共二百零三页39flush()方法输入缓冲区里的数据。out.write()输出的信息暂时存储在流对象缓冲区中,刷新操作(cozu)把缓冲区中的信息传递给目标对象处理。

25、调用flush()方法会导致刷新所有输出流对象链中的缓冲区。如果缓冲区满了,这个方法也会被自动调用来输出缓冲区中的信息。如果调用close()方法关闭了out对象,输出流也就关闭了,再调用print()或flush()将会引发IOException异常,例如: 共二百零三页40clear()方法用于清除缓冲区中的信息。如果缓冲区是空的,执行此方法会引发IOException异常。clearBuffer()方法功能与clear()相似,它将输出缓冲区清除后返回,与clear()不同(b tn)的是它不抛出异常。 getBufferSize()方法返回输出缓冲区的大小,单位字节,如果没有缓冲区,则

26、返回0。getRemaining()方法返回缓冲区剩余的空闲空间,单位字节。isAutoFlush()方法返回一个真假值(true/false),用于查看缓冲区是否设置了自动刷新。共二百零三页41(3) request对象(duxing)与HTTP请求request对象主要(zhyo)用来读取客户端传递来的参数。包括表单数据或附在URL中的参数,后者又称为查询串(query string)参数。也可以利用request 对象来传递变量。共二百零三页42获取单值参数的方法getParameter()方法用于读取单值参数。所谓单值参数是指一个变量(binling)最多只有一个值。方法的定义如下:p

27、ublic String getParameter(String name)name为要读取的参数的变量名,以String形式返回变量的值。如果request对象中没有指定的变量,则返回null。共二百零三页43【示例3.3】制作一个用户登录应用,用户在表单中输入用户名和口令后提交给下一个JSP页面读取并显示。登录页面为Login.jsp,提交的用户名文本域id为userName,口令文本域id为password,提交按钮的action属性设为logcheck.jsp。处理(chl)登录信息页面为logcheck.jsp,可以利用getParameter()方法读取登录页面传递过来的参数值以便

28、验证:共二百零三页44getParameterNames()该方法返回request对象中的参数(cnsh)变量名的枚举表,它的定义为:public java.util.Enumeration getParameterNames()getParameterNames()可以在不知道参数名的情况下访问所有参数。例如:% Enumeration e=request.getParameterNames(); while(e.hasMoreElements() String varName=(String)e.nextElement(); String varValue=request.getPara

29、meter(varName); out.print(toChinese(varName)+=+toChinese(varValue); out.print(); %共二百零三页45获取多值参数的方法多值参数的典型代表是表单复选框,如注册信息的爱好,用户可以选定多个爱好,存储在同一个变量hobby中。exam305在服务器端读取多值参数使用getParameterValues()方法,参数值返回(fnhu)后存储在一个字符串数组中。它的定义如下:public String getParameterValues(String name)对于包含多值参数的表单,上例可修改如下:共二百零三页% Enu

30、meration e=request.getParameterNames(); while(e.hasMoreElements() String varName=(String)e.nextElement(); if(!varName.equals(hobby) String varValue=request.getParameter(varName); out.print(toChinese(varName)+=+toChinese(varValue); else String varValue=request.getParameter(varName); out.print(varName

31、+=); for(int n=0;nvarValue.length;n+) out.print( +toChinese(varValuen); out.print(); %46共二百零三页47request作用域服务器端的两个JSP/Servlet程序间要交换数据时,可通过request域变量(或者称为作用范围变量)来实现。request作用域变量也叫request属性(attributes),是类似于name=value的键值对。属性值一般是一个Java对象,不是Java基本(jbn)数据类型数据。可以通过request对象的setAttribute()和getAttribute()方法设置

32、和读取变量的数据。request作用范围变量的变量名可以采用Java包的命名方式,例如:、jxust.login.pwd等,但不要与Java类库包或类名相同。共二百零三页48在JSP中,除了request作用(zuyng)范围变量外,还有page、session和application作用范围变量,它们的基本含义都是把属性值对象与某个有生命周期的JSP隐含对象相绑定,使属性值对象有一定的生命周期,或者说使属性值对象在一定的作用范围内有效。setAttribute()方法可用于设置一个作用域变量的值,其语法为:public void setAttribute(String name, Objec

33、t o) getAttribute()方法可用于读取一个作用域变量的值,其语法为:public Object getAttribute(String name) removeAttribute()方法可用于删除一个作用范围的属性,语法为:public void removeAttribute(String name)共二百零三页49request转发器getRequestDispatcher()方法该方法用于得到一个request转发器对象,以便将当前Servlet程序的request和response对象转发给目标资源,并跳转至目标资源上运行程序。这样,目标资源就可通过request对象读取

34、上一资源传递给它的request属性。两个Servlet程序间利用request作用范围变量传递数据时,必须(bx)通过转发跳转操作实现从第一个Servlet程序A跳转到另一个Servlet程序B,跳转时,程序A中的request和response隐含对象会被自动转发给程序B。49共二百零三页50request.getRequestDispatcher()的语法为: public requestDispatcher getRequestDispatcher(String uri)形参是目标资源的URI,可以使用相对路径或绝对路径。调用RequestDispatcher的方法传递属性(shxng

35、)和执行跳转。方法有:public void forward(ServletRequest rq, ServletResponse rp) throws ServletException,IOExceptionpublic void include(ServletRequest rq, ServletResponse rp) throws ServletException,java.io.IOException50共二百零三页【例3.4】利用request作用范围(fnwi)变量在两个JSP页面间传递数据。新建JSP文件(wnjin)exam301.jsp。主要代码如下:新建JSP文件exam

36、302.jsp。主要代码如下:51共二百零三页52用request读取系统信息(getSysInfo.jsp)getProtocol()返回request请求使用的协议及版本号,语法为:public String getProtocol()getRemoteHost()返回客户端主机名或最后一个客户端代理服务器的主机名,如果(rgu)主机名读取失败,则返回主机的IP地址。语法为:public String getRemoteHost()getRemoteAddr()返回客户端或最后一个客户端代理服务器的IP地址,语法为:public String getRemoteAddr()共二百零三页53

37、getScheme()返回当前request对象的构造方案,例如http、https和ftp等。例如:getQueryString()返回URL的查询字串,即URL中?后面的name=value对。例如,客户端请求的URL为::8080/untitled.jsp?dd=22&ff=2untitled.jsp页面中有以下代码(di m): 预览后会显示:dd=22&ff=2共二百零三页54getReuquestURI()返回URL请求中目标资源的URI。例如,有以下的HTTP请求::8080/untitled.jsp?dd=22&ff=2目标资源untitled.jsp中有如下的代码(di m)

38、: 预览后会显示:/untitled.jspgetMethod()返回request请求的提交方式,返回GET或POST等。共二百零三页55getServletPath()返回调用Servlet程序的URL请求(qngqi),例如,对于::8080/untitled.jspuntitled.jsp中有如下的代码: 预览后会显示:/untitled.jspgetRealPath(String servletPath)返回虚拟路径在服务器上的真实绝对路径,例如,对于::8080/untitled.jsp目标资源untitled.jsp中有如下的代码:预览后显示:C:tomcatwebappsROO

39、Tuntitled.jsp共二百零三页56用request读取HTTP请求报头信息getHeader()返回指定的HTTP报头信息,语法为:public String getHeader(String name)该方法的形参为报头名字。关于(guny)HTTP的报头名字信息请参考相关的RFC文档。getHeaderNames()返回HTTP报头的名字,名字存储在一个枚举型对象中。共二百零三页57用request读取cookieCookie或称Cookies,在Web技术中指Web服务器暂存在客户端浏览器内存或硬盘文件中的少量数据。把待存储的信息封装在cookie对象中并传回客户端保存,需要时再

40、从客户端读取。Web服务器通过HTTP报头来获得客户端中的cookie信息。Cookie信息的基本结构类似于name=value对,每个数据有一个变量名。Cookie信息有一定的有效期,有效期短的直接存于IE浏览器内存中,关闭浏览器后,这些(zhxi)cookie信息也就丢失。有效期长的信息存储在硬盘文件上,例如Windows XP中用户目录中有一个隐藏的Cookies文件夹(如C:Documents and SettingsHZM Cookies),其中存储有曾经访问过的网站的cookie文件(*.txt)。共二百零三页58Cookie类及其方法javax.servlet.http.Cook

41、ie类用来生成一个(y )cookie对象,这个类中常用的方法有:Cookie(String name, String value):构造方法public void setMaxAge(int expiry):设置cookie对象的生命期,以秒为单位。如果生命周期为负整数,表示这个cookie对象是临时的,浏览器关闭后cookie数据自动丢失。如果生命期为零,表示删除这个cookie。默认值为-1。Cookie的生命期定义要在cookie对象传回客户端前进行。public int getMaxAge():读取cookie对象的生命时间共二百零三页59public void setSecure(

42、boolean flag):是否用https或SSL安全(nqun)协议将cookie传回服务器。取false时表示用当前默认的协议传回cookie。public String getName():返回当前cookie对象的变量名。public String getValue():返回当前cookie对象的值。共二百零三页60使用(shyng)response隐含对象可以将cookie对象传回客户端,方法如下:public void addCookie(Cookie cookie)例如: 使用request对象的getCookies()方法可以读取存储在客户端的Cookies。它的语法为:pu

43、blic Cookie getCookies()共二百零三页61【例3.5】定义一个cookie对象,存储用户的登录名,生命期为30天,在另一个页面中查询这个(zh ge)cookie,如果读取的cookie不为空,则显示用户登录名,否则显示没有登录信息。再定义一个cookie对象,记录客户最近浏览过的五本图书的书号:AB001、KC981、DE345、RD332和PC667,如果已经登录,则显示书号,cookie生命期为30天。保存cookie的JSP页面为:WriteCookies.jsp读取cookie的JSP页面为:ReadCookie.jsp共二百零三页62(4) response对

44、象(duxing)与HTTP响应输出缓冲区与响应提交输出缓冲区用于暂存Servlet程序的输出信息,减少服务器与客户端的网络通信次数。传送给客户端的信息称之为响应信息(response),它们会首先暂存于输出缓冲区中,可设计(shj)当缓冲区满时自动提交或手动提交。共二百零三页63response对象与输出缓冲区相关的方法有: public void flushBuffer() 刷新输出缓冲区,把信息传回客户端。 out.flush()也具有刷新缓冲区的功能。public void setBufferSize(int size) 设置(shzh)输出缓冲区的大小,单位字节。public boo

45、lean isCommitted() 测试缓冲区的响应信息是否已提交。public java.io.PrintWriter getWriter() 返回一个PrintWriter对象(相当于隐含对象out),调用该对象中的flush()方法也可以刷新提交实现响应信息。(response1.jsp)共二百零三页64HTTP响应报头设置 服务器通过HTTP响应报头向客户端浏览器传送通信信息。JSP服务器在默认情况下,响应信息是以字符形式传送。如果要用HTTP响应报头传输二进制数据,应该通过response. getOutputStream()获得一个ServletOutputStream输出流对象

46、输出二进制信息。 public void setContentType(String type)定义返回客户端的信息类型及编码标准,默认是text/html; charset=UTF-8。如果返回给客户端的是二进制信息,则应该调用此方法设置信息的MIME类型,浏览器会根据信息类型自动调用匹配(ppi)的软件来处理,或将信息另存为一个文件。共二百零三页65public void setCharacterEncoding(String charset)定义返回客户端信息的编码标准。如果已经用response. setContentType()定义字符集,则调用此方法将重新设置字符集。信息字符集的定

47、义要在缓冲区刷新前进行。public void sendError(int sc)向客户端返回HTTP响应码,并清空输出缓冲区。HTTP响应码由3位的十进制数构成。如404为访问(fngwn)页面不存在错误码。1xx:请求收到,继续处理,2xx代表成功,行为被成功理解和接受,3xx代表重定向,4xx代表客户端错误,5xx代表服务器出错。共二百零三页66如果(rgu)希望出现某个响应码时,服务器自动转至某页面显示信息,需要在Web应用中的WEB-INFweb.xml部署文件中作出定义。例如,当出现404错误码时,转至e404.jsp显示信息,在web.xml的标记内添加一项部署信息: 404 /

48、e404.jsp (Response2.jsp)共二百零三页67public void setHeader(String name, String value)用于设置HTTP报头参数。例如,HTTP报头有一个名为Refresh参数,其作用是使IE浏览器在若干(rugn)秒后自动刷新当前网页或跳转至指定的URL资源。以下语句设置5秒后自动跳转至: response.setHeader(Refresh,5; URL=login.jsp);共二百零三页68【例3.6】用response返回Excel文档形式(xngsh)的学生成绩表。代码如下:共二百零三页69用response实现JSP页面重定向

49、使用response.sendRedirect()可实现页面重定向跳转。其基本流程是首先服务器将目标URL通过HTTP响应报头发送给客户端,浏览器接收到URL后更新至地址栏中,然后将目标资源的URL提交给服务器。重定向不同于转发跳转(RequestDispatcher.forward():重定向会导致浏览器地址更新;而转发是直接在服务器端切换程序,目标资源的URL不出现在浏览器的地址栏中。转发会把当前JSP页面中的request、response对象传递给目标资源;而重定向会导致当前JSP页面的request、response对象生命期结束,在目标资源中无法取得上一个JSP页面的request

50、对象。转发跳转直接在服务器端进行,基本上没有网络传输时延,重定向有网络传输时延。应根据(gnj)实际需要选择合适的跳转方法。共二百零三页70(5) application对象(duxing) 访问Web应用的初始参数在Web.xml文件(wnjin)中可定义一些全局的初始化参数,它们会在Web服务器启动时自动加载Web容器中,Servlet程序可通过容器访问这些全局初始化参数。共二百零三页71定义Web应用初始化参数Web应用初始化参数是在Web应用的部署文件(wnjin)WEB-INF web.xml中定义,基本语法格式为: 参数名 参数值读取Web应用的初始化参数String getIni

51、tParameter(String name)java.util.Enumeration getInitParameterNames()(exam303.jsp)共二百零三页72访问application域变量application域变量能够被Web应用中的所有程序(chngx)共享。访问application域变量的方法与访问其它域完全相同。主要方法有:java.util.Enumeration getAttributeNames()Object getAttribute(String name)void setAttribute(String name, Object object)voi

52、d removeAttribute(String name)(exam304.jsp)共二百零三页73【例3.10】用application实现一个简单的站点计数器,当访问JSP页面时,页面进行(jnxng)访问次数统计,并显示当前计数值。代码详见count.jsp。每次重新打开浏览器访问count.jsp页面,计数值都会加1。存储在Servlet容器中的application属性会被Web应用中所有的Servlet程序所共享,计数值会累加。关闭和重启Tomcat后再访问count.jsp,将重新从1开始计数。说明关闭Tomcat会导致application属性丢失。共二百零三页74读取Ser

53、vlet容器信息通过aplication对象可以读取Servlet容器的系统信息,相关方法如下:public int getMajorVersion()返回Servlet容器支持(zhch)的Servlet API的主版本号。public int getMinorVersion()返回Servlet容器支持的Servlet API子版本号,若为Servlet 2.4则返回4。public java.lang.String getServerInfo()返回当前Servlet容器的名字与版本号。对于Tomcat5.5.17,返回值为:Apache Tomcat/5.5.17共二百零三页75通过a

54、pplication对象记录操作日志Servlet程序运行过程中如果(rgu)需要把一些信息记录在日志文件中,一个可行的方法是使用application中的log(String msg)方法:log(String msg)形参是待记录的日志信息。 共二百零三页76log(String message, Throwable throwable)这个方法用于记录日志信息及异常堆栈(duzhn)信息。例如:共二百零三页77application对象的其它应用public RequestDispatcher getRequestDispatcher(String path)取得目标资源的Request

55、Dispatcher对象String getMimeType(String file)获取(huq)指定文件的MIME-type,如果文件的MIME-type未知,则返回null。以下代码可输出几个不同文件的MIME-type:共二百零三页78String getRealPath(String path)返回虚拟目录对应的真实绝对路径,例如:运行结果(ji gu)为:C:tomcatwebappsROOTjava.io.InputStream getResourceAsStream(String URL)取得目标资源的输入流对象。例如:共二百零三页79(6) session对象(duxing)

56、与session跟踪Session代表的是一次会话,通常指客户端从登录进入系统到注销退出系统之间所经历的时间,称为一次session通信周期。严格的说是指从客户端打开浏览器访问某Web应用开始直到它关闭浏览器或停止访问直到超过时限。通常把用户登录成功的信息记入session作用域中,以便访问其它页面时不再需要重复登录,也可防止非法访问。如何把一次会话中产生的有用信息保存下来,供后续的操作使用,以及如何标识当前session通信等,这些问题(wnt)称之为session跟踪(Session Tracking)。 共二百零三页80旧法实现session跟踪用URL重写实现session跟踪URL重

57、写(URL Rewriting)就是把session数据编码成name= value对附在目标URL后,用带有查询串的URL访问目标资源(zyun),从而将session数据传送给后续页面。例如,a.jsp页面中程序产生了一个session数据status=90,现重定向至:8080/k.jsp,并且k.jsp要用到status=90这个session数据,则新的URL应该为:response.sendRedrect(:8080/k.jsp?status=90) ;共二百零三页81用cookie实现session跟踪基本原理:把一个session数据封装在一个cookie对象中,将cookie

58、对象传回客户端存储,需要(xyo)用到时用代码从客户端读回。用隐藏表单域实现session跟踪隐藏表单域在页面上不可视,它相当于一个变量, 如果把一个session数据存储在其中,则提交表单时,隐藏表单域中的数据也会被提交给服务器。共二百零三页82用session作用范围变量实现session跟踪这是实现session跟踪最直接的方法。session隐含(yn hn)对象由Web服务器创建,并存储在服务器端,功能强大。session作用范围变量也叫session属性。相关的方法有:boolean isNew()判断session对象是新创建的,还是已经存在。返回true时,表示session对

59、象是刚创建的,也表示本次客户端发出的请求是本次session通信的第一次请求。这个方法返回true,并不表示客户端浏览器窗口是新打开的,只是浏览器窗口打开后第一次访问本应用。可以用session.isNew()判断是否会话开始,返回true值时表示这是一次新的访问,让计数器加1,否则不加。共二百零三页83String getId()返回当前session会话对象的ID号。即使在同一个客户端,每个新开浏览器窗口都是一次新会话,它们的ID不同。long getLastAccessedTime()返回客户端最后一次请求的发送时间,是一个long型的整数(zhngsh),单位毫秒,是从格林威治时间19

60、70-1-1 00:00:00到当前所经历的毫秒数。void invalidate()注销当前session,session作用范围变量也会随之丢失。共二百零三页84void setMaxInactiveInterval(int interval)设置session对象的超时时间,单位秒。如果客户端从最后一次请求开始,在连续的interval秒内一直没有再向服务器发送HTTP请求,则服务器认为出现(chxin)了session超时,将删除本次的session对象。如果超时时间为负数,表示永不超时。session对象的超时检测由服务器实现,这会增加系统开销。Tomcat默认的超时时间是30分钟。

温馨提示

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

评论

0/150

提交评论