版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、索迪教育索迪教育IT教育成就人生教育成就人生基于基于 Java 的的 Web 编程技术编程技术第六章第六章 Servlet索迪教育索迪教育IT教育成就人生教育成就人生上章回顾上章回顾q 了解代理事件模型了解代理事件模型q 在在JavaBean中访问数据库中访问数据库索迪教育索迪教育IT教育成就人生教育成就人生我们的目标我们的目标q 了解了解Servlet体系结构体系结构q 掌握请求和响应掌握请求和响应索迪教育索迪教育IT教育成就人生教育成就人生简介简介-1q Java编程中一个最激动人心的最新趋势是服编程中一个最激动人心的最新趋势是服务器端务器端Java应用程序的兴起。应用程序的兴起。Java
2、这种面向这种面向对象的通用编程语言最初旨在用于小型嵌入对象的通用编程语言最初旨在用于小型嵌入设备,而后被认为是一种用于以设备,而后被认为是一种用于以Applet形式形式开发客户端开发客户端Web内容的语言,如今内容的语言,如今Java已是已是一种非常适合服务器端开发的语言,商家迅一种非常适合服务器端开发的语言,商家迅速认识到速认识到Java在服务器上的潜力。在服务器上的潜力。索迪教育索迪教育IT教育成就人生教育成就人生简介简介-2q Applet是以是以Java语言开发的程序,它运行在语言开发的程序,它运行在客户端机器的浏览器上,这些客户端机器的浏览器上,这些Applet不连接不连接到服务器。
3、在很多情况下需要访问服务器上到服务器。在很多情况下需要访问服务器上的数据,而这无法通过的数据,而这无法通过Applet实现。为了访实现。为了访问数据和执行服务器端的请求处理,必须使问数据和执行服务器端的请求处理,必须使用另一个称为用另一个称为Servlet的应用程序。的应用程序。Servlet是是以以Java编程语言开发的服务器端程序,它运编程语言开发的服务器端程序,它运行在行在Web服务器中,由于服务器中,由于Servlet在服务器内在服务器内运行,所以这些程序可用于扩展运行,所以这些程序可用于扩展Web服务器服务器的功能。的功能。索迪教育索迪教育IT教育成就人生教育成就人生简介简介-3客户
4、端客户端Servlet数据库数据库HTTP服务器服务器Servlet体系结构体系结构索迪教育索迪教育IT教育成就人生教育成就人生简介简介-4q 使用使用Servlet的优点是:的优点是:Servlet是持久性的。是持久性的。 Servlet只须由只须由Web服务器加载一次即可服务器加载一次即可维护请求之间的服务。相比之下,每次向维护请求之间的服务。相比之下,每次向Web服务器发出请服务器发出请求时,求时,Web服务器都必须加载和执行服务器都必须加载和执行CGI脚本。脚本。Servlet运行速度快。由于只须加载一次,所以提供更佳的性运行速度快。由于只须加载一次,所以提供更佳的性能。能。由于是用由
5、于是用Java编写,所以编写,所以Servlet可跨平台。可跨平台。Servlet可扩展。可扩展。Java的所有优点都可以在的所有优点都可以在Servlet中体现。中体现。Servlet很安全。访问很安全。访问Servlet的唯一途径是通过服务器。的唯一途径是通过服务器。Servlet可以与各种客户端一起使用。可以与各种客户端一起使用。索迪教育索迪教育IT教育成就人生教育成就人生6.1 Servlet体系结构体系结构-1q Servlet是服务器端程序,运行在是服务器端程序,运行在Web服务器服务器上对客户端的请求做出响应。上对客户端的请求做出响应。Web服务器向服务器向Servlet发送请求
6、,发送请求, Servlet的输出结果返回至的输出结果返回至Web服务器,然后服务器,然后Web服务器将结果返回至服务器将结果返回至Web浏览器,最后浏览器,最后Web浏览器在屏幕上显示浏览器在屏幕上显示结果。该过程称为结果。该过程称为“请求请求-响应响应”模型。模型。Web浏览器浏览器ServletWeb服务器服务器HTTP请求请求HTTP响应响应索迪教育索迪教育IT教育成就人生教育成就人生6.1 Servlet体系结构体系结构-2q Servlet使用以下两个包中的类和接口:使用以下两个包中的类和接口:javax.servletjavax.servlet.httpq 包名以包名以javax
7、开头而不是开头而不是java,表示,表示Servlet API是一个是一个标准扩展。标准扩展。q javax.servlet包包含了可以支持通用、跨协议的包包含了可以支持通用、跨协议的Servlet的类。的类。q javax.servlet.http包中的类增加了特定于包中的类增加了特定于HTTP的功能。的功能。每个每个Servlet都必须实现都必须实现javax.servlet.Servlet接口。大接口。大部分部分Servlet通过扩展以下其中一个特殊类来实现这一通过扩展以下其中一个特殊类来实现这一接口:接口:javax.servlet.GenericServlet或或javax.serv
8、let.http.HttpServlet。索迪教育索迪教育IT教育成就人生教育成就人生6.1 Servlet体系结构体系结构-3q 跨协议跨协议Servlet应该继承应该继承GenericServlet。HTTP Servlet应继承应继承HttpServlet,而,而HttpServlet本身是本身是GenericServlet的子类,但的子类,但添加了特定于添加了特定于HTTP的功能。的功能。Servlet接口只声接口只声明而不实现用于管理明而不实现用于管理Servlet及其与客户端通及其与客户端通信的方法。信的方法。索迪教育索迪教育IT教育成就人生教育成就人生6.1 Servlet体系结
9、构体系结构-4ServletGenericServletHttpServlet自定义自定义Servlet索迪教育索迪教育IT教育成就人生教育成就人生6.1.1 常用接口和类常用接口和类- javax.servlet包包q 其中最常用的接口如下:其中最常用的接口如下:ServletRequest此接口用于将请求信息传送给此接口用于将请求信息传送给Servlet。在收到请求时,。在收到请求时,Servlet引擎会将关键的请求信息封装在实现引擎会将关键的请求信息封装在实现ServletRequest接口的对象接口的对象中,传递至中,传递至Servlet的的service()方法。方法。Servlet
10、Response此接口提供服务器对客户端请求的响应的对象表示。此接口提供服务器对客户端请求的响应的对象表示。Servlet引引擎会将实现擎会将实现ServletResponse接口的对象传递给接口的对象传递给Servlet的的service()方法。接着方法。接着Servlet就可以使用此对象对客户端请求做出响应。就可以使用此对象对客户端请求做出响应。RequestDispatcher此接口定义一个用于接收客户端的请求并将其发送至任何资源此接口定义一个用于接收客户端的请求并将其发送至任何资源的对象。此接口还可用于封装的对象。此接口还可用于封装Servlet。RequestDispatcher对
11、象对象用作资源的封装器,通过路径或名称指定。资源可以是服务器用作资源的封装器,通过路径或名称指定。资源可以是服务器上的上的Servlet、HTML文件或文件或JSP文件。文件。索迪教育索迪教育IT教育成就人生教育成就人生6.1.1 常用接口和类常用接口和类- javax.servlet包包q 其中最常用的接口如下:其中最常用的接口如下:Servlet这是每个这是每个Servlet都必须实现的接口,它定义必须由都必须实现的接口,它定义必须由Servlet实现实现的方法。的方法。ServletConfig此接口定义此接口定义Servlet配置对象。此对象由配置对象。此对象由Servlet引擎用于将
12、任何引擎用于将任何信息传递给信息传递给Servlet,以便可初始化,以便可初始化Servlet 。 ServletConfig 接接口的其他详情将在本章后面讨论。口的其他详情将在本章后面讨论。ServletContext此接口定义了一组方法,此接口定义了一组方法,Servlet使用这些方法与使用这些方法与Servlet引擎进引擎进行通信。行通信。SingleThreadModel此接口确保每次此接口确保每次Servlet只能处理一个请求。只能处理一个请求。索迪教育索迪教育IT教育成就人生教育成就人生6.1.1 常用接口和类常用接口和类- javax.servlet包包q 其中最常用的类如下:其
13、中最常用的类如下:q GenericServlet 这是大部分非这是大部分非HTTPServlet扩展的类。此类定义通扩展的类。此类定义通知、跨协议的知、跨协议的Servlet。q ServletInputStream 这是提供输入流用于读取来自客户端请求的二进这是提供输入流用于读取来自客户端请求的二进制数据的类。此类包括方法制数据的类。此类包括方法readLine(),以此有效,以此有效实现每次读取一行数据。实现每次读取一行数据。q ServletOutputStream 此类的运行方式与此类的运行方式与ServletInputStream相同,但此相同,但此类提供输出流用于将二进制数据发送
14、给客户端。类提供输出流用于将二进制数据发送给客户端。索迪教育索迪教育IT教育成就人生教育成就人生6.1.1 常用接口和类常用接口和类- javax.servlet包包q javax.servlet包还具有某些异常,它们是:包还具有某些异常,它们是:q ServletException 此异常是常规异常,由此异常是常规异常,由Servlet在执行过程中遇到在执行过程中遇到困难时抛出。困难时抛出。q UnavailableException 此异常定义的是由此异常定义的是由Servlet抛出以表示抛出以表示Servlet永久永久或临时不可用的异常。或临时不可用的异常。索迪教育索迪教育IT教育成就人
15、生教育成就人生6.1.1 常用接口和类常用接口和类- javax.servlet.http包包qjavax.servlet.http包中可用的接口包括:包中可用的接口包括:HttpServletRequest此接口扩展此接口扩展ServletRequest接口并支持接口并支持ServletResult接口的所有方法。接口的所有方法。HttpServletRequest定义用于描述定义用于描述HTTP请求的方法。实现请求的方法。实现HttpServletRequest接口的对象被传递给接口的对象被传递给Servlet的的service方法或任何方法或任何do()方法。方法。HttpServlet
16、Response此接口扩展此接口扩展ServletResponse并支持并支持ServletResponse接口的所有方法。接口的所有方法。 HttpServletResponse接口提供服务器对客户端请求的响应的对象表示。接口提供服务器对客户端请求的响应的对象表示。Servlet可以使用实现可以使用实现Servlet引擎传递的引擎传递的HttpServletResponse接口的对接口的对象。此对象将被传递至象。此对象将被传递至Servlet的的service()方法。方法。HttpSession此接口提供一种方法,用于在对此接口提供一种方法,用于在对Web站点的请求或访问超过一个页面站点的
17、请求或访问超过一个页面时标识用户。时标识用户。HttpSessionBindingListener在对象绑定至会话上或解除会话绑定时,此接口将通知对象。在对象绑定至会话上或解除会话绑定时,此接口将通知对象。索迪教育索迪教育IT教育成就人生教育成就人生6.1.1 常用接口和类常用接口和类- javax.servlet.http包包q javax.servlet.http包中常用的类包括:包中常用的类包括:CookieCookie类可以创建类可以创建Cookie , Cookie存储了少量由存储了少量由Servlet发送发送至客户端的信息。客户端可在稍后要访问以前访问过的网页时至客户端的信息。客户
18、端可在稍后要访问以前访问过的网页时使用已存储的信息。使用已存储的信息。HttpServletHttpServlet类是最常用于扩展类是最常用于扩展Servlet的类,这是因为很多的类,这是因为很多Servlet应用程序都按应用程序都按HTTP协议运行。此类支持协议运行。此类支持HTTP功能以及功能以及Servlet类的方法,它是个抽象类。它接收客户端的请求,并向类的方法,它是个抽象类。它接收客户端的请求,并向客户端发送响应。客户端发送响应。HttpSessionBindingEvent在对象绑定至会话上或解除会话绑定时,此类会将对象传递给在对象绑定至会话上或解除会话绑定时,此类会将对象传递给实
19、现实现HttpSessionBindingListener接口的会话。接口的会话。索迪教育索迪教育IT教育成就人生教育成就人生6.1.2 Servlet生命周期生命周期-1q Servlet是普通是普通Java类,在需要时被创建,在不用时被类,在需要时被创建,在不用时被破坏。破坏。Servlet的创建和破坏均由的创建和破坏均由Servlet容器自动处理,容器自动处理,这是因为这是因为Servlet是在是在Servlet容器内运行。容器内运行。Servlet容器容器可以在单个可以在单个Java虚拟机中执行所有虚拟机中执行所有Servlet。Servlet容容器必须遵循下列生命周期:器必须遵循下列
20、生命周期:创建和初始化创建和初始化Servlet(加载)(加载)处理客户端的服务调用处理客户端的服务调用破坏破坏Servlet并对其进行垃圾收集并对其进行垃圾收集q 这三个步骤对所有这三个步骤对所有Servlet都通用。都通用。 Servlet容器创建容器创建Servlet实例时使用的是实例时使用的是init()方法,而在破坏实例时使方法,而在破坏实例时使用的是用的是destroy()方法。方法。索迪教育索迪教育IT教育成就人生教育成就人生6.1.2 Servlet生命周期生命周期-2服务器加载服务器加载Servlet服务器创建服务器创建Servlet类的实例类的实例调用调用Servlet实例
21、的实例的init()方法方法收到请求收到请求调用调用service()方法方法service()方法处理请求并将输出结果返回客户端方法处理请求并将输出结果返回客户端Servlet等待下一个请求或由服务器卸载等待下一个请求或由服务器卸载Servlet在服务器调用在服务器调用destroy()方法后被卸载方法后被卸载索迪教育索迪教育IT教育成就人生教育成就人生6.1.2 Servlet生命周期生命周期-3q初始化初始化Servlet任何时候将任何时候将Servlet加载至服务器,服务器都会调用加载至服务器,服务器都会调用Servlet的的init()方方法。即使大部分法。即使大部分Servlet在
22、多线程服务器上运行,在多线程服务器上运行,Servlet在初始化过在初始化过程中也不会碰到并发问题。程中也不会碰到并发问题。init()方法在方法在Servlet处理第一个请求之前调用,此方法用于执行处理第一个请求之前调用,此方法用于执行Servlet初始化初始化 创建或加载创建或加载Servlet在处理请求时使用的对象。服务在处理请求时使用的对象。服务器调用器调用Servlet的的init()方法,向新方法,向新Servlet提供任何有关其本身及其环提供任何有关其本身及其环境的信息。境的信息。覆盖覆盖init()方法是为了在方法是为了在Servlet中添加初始化的内容,覆盖中添加初始化的内容
23、,覆盖init()方法方法时必须遵循下列规则:时必须遵循下列规则:如果发生初始化错误,致使如果发生初始化错误,致使Servlet不能处理客户端请求,则抛出不能处理客户端请求,则抛出UnavailableException请勿调用请勿调用System.exit()方法方法ServletConfig对象向对象向Servlet提供其初始化参数信息,这些参数与其提供其初始化参数信息,这些参数与其他任何请求都不关联。他任何请求都不关联。ServletConfig对象还有对对象还有对ServletContext对象的引用,对象的引用,Servlet可以使可以使用此对象调查其环境。用此对象调查其环境。索迪教
24、育索迪教育IT教育成就人生教育成就人生6.1.2 Servlet生命周期生命周期-4q 处理客户端的请求处理客户端的请求Servlet接受客户端的调用时,它将收到两个对象:接受客户端的调用时,它将收到两个对象:ServletRequest,用于封装客户端至服务器的通信。,用于封装客户端至服务器的通信。ServletResponse,用于封装,用于封装Servlet返回至客户端的通信。返回至客户端的通信。HttpServlet接受客户端的调用时,与普通接受客户端的调用时,与普通Servlet相似,它们相似,它们是:是:HttpServletRequestHttpServletResponseHt
25、tpServlet能够并发地为多个客户端服务。在能够并发地为多个客户端服务。在Servlet初始化初始化之后,在调用之后,在调用init()方法时,方法时, Servlet容器收到的任何请求都容器收到的任何请求都将被转发至将被转发至Servlet的的service()方法。根据正在接收的方法。根据正在接收的HTTP请请求类型,求类型, HttpServlet类的类的service()方法可在细分为方法可在细分为doGet()、doPost()、doDelete()、doOptions()、doPut()和和doTrace()方法。方法。其中,其中, doGet()和和doPost()是两个常用
26、于处理服务器的请求并是两个常用于处理服务器的请求并生成响应的方法。生成响应的方法。索迪教育索迪教育IT教育成就人生教育成就人生6.1.2 Servlet生命周期生命周期-5q 破坏破坏Servlet 要卸载要卸载Servlet时,服务器将调用时,服务器将调用Servlet的的destroy()方法。在方法。在destroy()方法中,方法中, Servlet应该释放任何应该释放任何已获得的资源。已获得的资源。 destroy()方法还使方法还使Servlet有机会有机会写出其未保存的高速缓存信息或任何在下次调用写出其未保存的高速缓存信息或任何在下次调用init()时应该读取的持久性信息。时应该
27、读取的持久性信息。索迪教育索迪教育IT教育成就人生教育成就人生6.2 请求和响应请求和响应-1q 下面讨论表示客户端请求和下面讨论表示客户端请求和Servlet响应的对响应的对象。象。Servlet的两个包都具有请求和响应的接的两个包都具有请求和响应的接口和类。口和类。javax.servlet包具有包具有ServletRequest和和ServletResponse接口,接口, javax.servlet.http包具包具有有HttpServletRequest和和HttpServletResponse接口。接口。索迪教育索迪教育IT教育成就人生教育成就人生6.2 请求和响应请求和响应-2q
28、 HttpServlet类类 HttpServlet类扩展了类扩展了GenericServlet,提供,提供Servlet接口的接口的HTTP协议的特定实现。如果协议的特定实现。如果Servlet必须遵必须遵循循HTTP协议,则只能扩展协议,则只能扩展HttpServlet类并覆盖所类并覆盖所需的方法。需的方法。 HttpServlet最常用的两个接口是:最常用的两个接口是: HttpServletRequest HttpServletResponse索迪教育索迪教育IT教育成就人生教育成就人生6.2 请求和响应请求和响应-3q HttpServletRequestHttpServletReq
29、uest对象提供对对象提供对HTTP头数据的访问,获得客头数据的访问,获得客户端作为请求一部分进行发送的参数。通过扩展户端作为请求一部分进行发送的参数。通过扩展HttpServlet类并覆盖相应方法可以处理类并覆盖相应方法可以处理HTTP请求,这些请求的方法包请求,这些请求的方法包括括doGet()和和doPost()。客户端数据可以通过下列方式访问:客户端数据可以通过下列方式访问:getParameter()方法,用于返回指定参数的值方法,用于返回指定参数的值getParameterValues()方法,在参数具有多个值时使用,此方法方法,在参数具有多个值时使用,此方法返回指定参数的值数组。
30、返回指定参数的值数组。如果所需数据是文本格式,则如果所需数据是文本格式,则getReader()方法返回方法返回BufferedReader对象用于读取数据,如果所需数据是二进制对象用于读取数据,如果所需数据是二进制格式,则格式,则getInputStream()方法返回方法返回ServletInputStream对象对象用于读取数据。用于读取数据。索迪教育索迪教育IT教育成就人生教育成就人生6.2 请求和响应请求和响应-4q HttpServletResponse HttpServletResponse对象提供两个将数据返回给对象提供两个将数据返回给用户的方法。用户的方法。 getWrite
31、r()方法,返回方法,返回Writer对象,用于将文本数据返对象,用于将文本数据返回给用户回给用户 getOutputStream()方法,返回方法,返回ServletOutputStream对象,对象,用于返回二进制数据用于返回二进制数据 在发送响应后关闭在发送响应后关闭Writer或或ServletOutputStream可让服务器知道何时完成响应。可让服务器知道何时完成响应。索迪教育索迪教育IT教育成就人生教育成就人生6.2 请求和响应请求和响应-5q HttpServlet类中的常用方法类中的常用方法void init()在初始化在初始化Servlet时调用一次时调用一次void de
32、stroy()在要破坏在要破坏Servlet实例时调用一次实例时调用一次void service(HttpServletRequest req,HttpServletResponse resp)请勿覆盖此方法请勿覆盖此方法doGet()、doPost()、doPut()、doDelete()、doOptions()、doTrace()这些方法根据收到的这些方法根据收到的HTTP请求的类型来请求的类型来调用。必须覆盖以便生成响应。调用。必须覆盖以便生成响应。void log(String msg)将消息写入将消息写入Servlet的日志文件的日志文件long getLastModified(Ht
33、tpServlet req)返回返回Servlet的最后修改日期的最后修改日期String getServletInfo()提供提供Servlet的一般信息字符串,例如作的一般信息字符串,例如作者、版本、版权等者、版本、版权等String getServletName()返回返回 Servlet的名称的名称String getInitParameter(String name)返回给定初始化参数的值返回给定初始化参数的值Enumeration getInitParameterNames()返回一个包含了所有提供的初始化参数返回一个包含了所有提供的初始化参数名称的名称的Enumeration对象
34、对象索迪教育索迪教育IT教育成就人生教育成就人生6.3 会话和环境会话和环境-1q HTTP没有为服务器提供识别请求序列是否来没有为服务器提供识别请求序列是否来自同一客户端的方法,这就引起一个问题,自同一客户端的方法,这就引起一个问题,因为许多因为许多Web应用程序都是有状态的。应用程序都是有状态的。HTTP服务器不能通过连接机器的服务器不能通过连接机器的IP地址来标识客地址来标识客户端,这是因为报告的户端,这是因为报告的IP地址可能是代理服地址可能是代理服务器的地址或者是有多个用户的服务器的地务器的地址或者是有多个用户的服务器的地址。此问题的解决方案是客户端任何时候做址。此问题的解决方案是客
35、户端任何时候做出新请求都必须进行自我介绍。每个客户端出新请求都必须进行自我介绍。每个客户端都必须提供一个唯一标识以便服务器可识别都必须提供一个唯一标识以便服务器可识别它,或者客户端必须提供某些信息以便服务它,或者客户端必须提供某些信息以便服务器可用于正确处理请求。器可用于正确处理请求。索迪教育索迪教育IT教育成就人生教育成就人生6.3 会话和环境会话和环境-2q 用户在站点上浏览时,会话跟踪使用户在站点上浏览时,会话跟踪使Servlet和其他服务和其他服务器端应用程序可以跟踪用户。服务器端应用程序可以器端应用程序可以跟踪用户。服务器端应用程序可以使用此功能跟踪客户端在站点上的操作。使用此功能跟
36、踪客户端在站点上的操作。Web服务器服务器通过为站点上的每个用户创建通过为站点上的每个用户创建Session对象来维护用户对象来维护用户状态,这些状态,这些Session对象存储在服务器中,并在服务器对象存储在服务器中,并在服务器中进行维护。在用户向站点做出请求时,用户就分配中进行维护。在用户向站点做出请求时,用户就分配有一个新的有一个新的Session对象和唯一的会话对象和唯一的会话ID。此会话。此会话ID在后续的请求中会将用户与在后续的请求中会将用户与Session对象进行匹配然后对象进行匹配然后Session对象就作为请求的一部分被传递至处理请求的对象就作为请求的一部分被传递至处理请求的
37、Servlet。 Servlet可以在可以在Session对象中添加信息或读对象中添加信息或读取其中的信息。会话对于由多个取其中的信息。会话对于由多个Servlet组成的应用程组成的应用程序来说很方便。序来说很方便。索迪教育索迪教育IT教育成就人生教育成就人生6.3 会话和环境会话和环境-3q 下面讨论不同的会话跟踪技术下面讨论不同的会话跟踪技术 用户认证用户认证 隐藏表单字段隐藏表单字段 URL重写重写 持久持久Cookie 会话交换和持久会话交换和持久索迪教育索迪教育IT教育成就人生教育成就人生6.3.1 用户认证用户认证q在在Web服务器只允许那些使用用户名和口令进行登录的客户端服务器只
38、允许那些使用用户名和口令进行登录的客户端访问某些资源时,就需要使用用户认证。在客户端登录后,用访问某些资源时,就需要使用用户认证。在客户端登录后,用户名即通过户名即通过getRemoteUser()提供给提供给Servlet。用户名可用于跟踪。用户名可用于跟踪客户端会话。一旦用户登录,浏览器即记住用户名,并在用户客户端会话。一旦用户登录,浏览器即记住用户名,并在用户查看站点的新页面时返回用户名和口令。查看站点的新页面时返回用户名和口令。Servlet可以通过用户可以通过用户名标识用户,并以此跟踪用户。名标识用户,并以此跟踪用户。q使用用户认证的优点是:使用用户认证的优点是:容易实现。可让服务器
39、保护一组页面,并使用容易实现。可让服务器保护一组页面,并使用getRemoteUser()标识标识每个客户端。每个客户端。此技术即使在用户从不同机器访问站点时也有效。此技术即使在用户从不同机器访问站点时也有效。即使用户离开站点或在返回站点前退出浏览器,此技术同样有效。即使用户离开站点或在返回站点前退出浏览器,此技术同样有效。q使用用户认证的缺点是:使用用户认证的缺点是:要求每个用户都注册一个帐户,然后在每次访问站点时登录。要求每个用户都注册一个帐户,然后在每次访问站点时登录。用户在同一站点上不能同时维护多个会话。用户在同一站点上不能同时维护多个会话。索迪教育索迪教育IT教育成就人生教育成就人生
40、6.3.2 隐藏表单字段隐藏表单字段q 隐藏表单字段是指添加到隐藏表单字段是指添加到HTML表单中,但不在客户表单中,但不在客户端的浏览器中显示的字段。在提交包含字段的表单时,端的浏览器中显示的字段。在提交包含字段的表单时,字段将被发送至服务器。隐藏表单字段定义表单的常字段将被发送至服务器。隐藏表单字段定义表单的常变量,但对于接收提交的表单的变量,但对于接收提交的表单的Servlet,隐藏字段和,隐藏字段和可见字段没有区别。可见字段没有区别。q 使用隐藏表单字段的优点是其功能强大并支持匿名。使用隐藏表单字段的优点是其功能强大并支持匿名。所有常用浏览器都支持隐藏字段,而且它们可用于未所有常用浏览
41、器都支持隐藏字段,而且它们可用于未登录或注册的客户端。隐藏表单字段的缺点是只适用登录或注册的客户端。隐藏表单字段的缺点是只适用于动态生成的表单序列。在遇到静态文档、以电子邮于动态生成的表单序列。在遇到静态文档、以电子邮件发送的文档、设计为书签的文档和浏览器关闭时,件发送的文档、设计为书签的文档和浏览器关闭时,该技术即束手无策。该技术即束手无策。索迪教育索迪教育IT教育成就人生教育成就人生6.3.3 URL重写重写q 使用使用URL重写技术,用户单击的每个重写技术,用户单击的每个URL都可被动都可被动态修改或重写,以包括附加信息。附加信息的形式可态修改或重写,以包括附加信息。附加信息的形式可为附
42、加路径信息、添加的参数或某些特定于服务器的为附加路径信息、添加的参数或某些特定于服务器的自定义自定义URL修改。重写修改。重写URL的可用空间是有限的,的可用空间是有限的,因此附加信息通常只限于唯一的会话因此附加信息通常只限于唯一的会话ID。q 每种重写技术都有其优点和缺点。附加路径信息适用每种重写技术都有其优点和缺点。附加路径信息适用于所有服务器,并作为使用于所有服务器,并作为使用GET和和POST方法的表单方法的表单的目标,但是,如果的目标,但是,如果Servlet必须使用附加路径信息作必须使用附加路径信息作为实际路径信息时,它就不适用。添加的参数适用于为实际路径信息时,它就不适用。添加的
43、参数适用于所有服务器,但在作为使用所有服务器,但在作为使用POST方法的表单的目标方法的表单的目标时将失效,并可能引起参数命名冲突。特定于服务器时将失效,并可能引起参数命名冲突。特定于服务器的自定义修改在任何情况下都适用于支持此类修改的的自定义修改在任何情况下都适用于支持此类修改的服务器。服务器。索迪教育索迪教育IT教育成就人生教育成就人生6.3.4 持久持久Cookieq Cookie是是Web服务器发送至浏览器,以后可服务器发送至浏览器,以后可从该浏览器上读回的少量信息。浏览器收到从该浏览器上读回的少量信息。浏览器收到Cookie后,在每次访问服务器上的页面时都后,在每次访问服务器上的页面
44、时都会将其发送回服务器。由于会将其发送回服务器。由于Cookie的值可以的值可以方便地标识客户端,因此方便地标识客户端,因此Cookie通常用于会通常用于会话跟踪。话跟踪。索迪教育索迪教育IT教育成就人生教育成就人生6.3.5 会话交换和持久会话交换和持久-1q 因为访问一个站点的用户可有许多个,所以就会有许因为访问一个站点的用户可有许多个,所以就会有许多会话访问同一站点。多会话访问同一站点。q Internet站点必须支持许多有效会话,例如,大型站站点必须支持许多有效会话,例如,大型站点可能同时有几百甚至几千个有效会话。由于每个会点可能同时有几百甚至几千个有效会话。由于每个会话都可以包含应用
45、程序话都可以包含应用程序Servlet放置的任意数据对象,放置的任意数据对象,所以整个系统的内存要求就很高。所以整个系统的内存要求就很高。q 内存中可以存在的会话数受到会话跟踪系统的限制。内存中可以存在的会话数受到会话跟踪系统的限制。session.maxresidents属性设置此限制,当同时进行的属性设置此限制,当同时进行的会话的数量超过会话的数量超过session.maxresidents设置的限制时,设置的限制时,会话跟踪器会将最近最不常用的会话交换到磁盘。被会话跟踪器会将最近最不常用的会话交换到磁盘。被交换的会话没有丢失,它们可以重载入内存。如果收交换的会话没有丢失,它们可以重载入内
46、存。如果收到请求,会话将被重载。会话交换使得系统中的有效到请求,会话将被重载。会话交换使得系统中的有效会话比内存所能容纳的会话要多。会话比内存所能容纳的会话要多。索迪教育索迪教育IT教育成就人生教育成就人生6.3.5 会话交换和持久会话交换和持久-2q会话交换绝不会影响会话的无效性。如果会话的未使用时间超会话交换绝不会影响会话的无效性。如果会话的未使用时间超过正常失效时间,它就会无效,不管会话是在内存还是在磁盘。过正常失效时间,它就会无效,不管会话是在内存还是在磁盘。session.invalidationinterval属性设置会话无效时间。属性设置会话无效时间。q串行化用于将会话写入磁盘和
47、从磁盘读取会话。所以,可以串串行化用于将会话写入磁盘和从磁盘读取会话。所以,可以串行化并置于会话中的对象将被写入磁盘,而不能串行化的对象行化并置于会话中的对象将被写入磁盘,而不能串行化的对象将保留在内存中(即使会话的一部分已被写入磁盘),会话跟将保留在内存中(即使会话的一部分已被写入磁盘),会话跟踪操作不会受串行化的影响。因此,踪操作不会受串行化的影响。因此,Servlet开发者只保存会话开发者只保存会话中的可串行化对象。实现中的可串行化对象。实现java.io.Serializable或或java.io.Externalizable接口的对象都可串行化。接口的对象都可串行化。q在启用了会话持
48、久功能时,会话跟踪器将使用会话交换机制实在启用了会话持久功能时,会话跟踪器将使用会话交换机制实现会话持久。服务器关闭时,内存中的会话即被写入现会话持久。服务器关闭时,内存中的会话即被写入session.swapdirectory属性中指定的磁盘。一旦启动服务器,写属性中指定的磁盘。一旦启动服务器,写入磁盘的会话就变得有效。这就使服务器在重启时不会丢失任入磁盘的会话就变得有效。这就使服务器在重启时不会丢失任何现有会话。会话中的可串行化数据元素在关闭何现有会话。会话中的可串行化数据元素在关闭/重启操作时可重启操作时可以继续运行。以继续运行。索迪教育索迪教育IT教育成就人生教育成就人生6.4 Htt
49、pSession接口接口-1q HttpSession接口定义一个对象,用于在客户接口定义一个对象,用于在客户端和服务器之间提供关联,此关联在经过多端和服务器之间提供关联,此关联在经过多次连接后仍然持久。它还可以维护事务处理次连接后仍然持久。它还可以维护事务处理之间的状态。之间的状态。q Servlet API提供提供HttpSession接口以实现存储接口以实现存储功能。功能。Servlet引擎可以创建一个对象,用于引擎可以创建一个对象,用于实现此接口,自动创建唯一的密钥和将此密实现此接口,自动创建唯一的密钥和将此密钥附加至响应。钥附加至响应。 Servlet引擎负责存储会话、引擎负责存储会
50、话、跟踪会话持久时间以及根据跟踪会话持久时间以及根据Servlet需要检索需要检索会话。会话。Session对象必须具有生命周期,这样对象必须具有生命周期,这样引擎才能将其抛弃。引擎才能将其抛弃。索迪教育索迪教育IT教育成就人生教育成就人生6.4 HttpSession接口接口-2q 为了创建为了创建HTTP客户端和客户端和HTTP服务器之间的会话,服务器之间的会话,Servlet引擎使用引擎使用HttpSession接口。对于用户的多个连接口。对于用户的多个连接或页面请求,会话可持久的时间比实际指定的更长。接或页面请求,会话可持久的时间比实际指定的更长。正常情况下,会话对应一个建立至站点的连
51、接并多次正常情况下,会话对应一个建立至站点的连接并多次访问站点的用户。服务器通过使用访问站点的用户。服务器通过使用Cookie或重写或重写URL来维护会话。来维护会话。q Servlet可通过可通过HttpSession接口来查看和操纵会话的相接口来查看和操纵会话的相关信息,如会话标识符、创建时间和环境。此接口允关信息,如会话标识符、创建时间和环境。此接口允许许Servlet将对象绑定至会话,并允许将对象绑定至会话,并允许Servlet访问标准访问标准会话属性,例如会话标识符或会话环境。会话属性,例如会话标识符或会话环境。 HttpSession接口允许接口允许Servlet从会话获得数据和修
52、改此从会话获得数据和修改此数据,然后将其返回给会话。数据,然后将其返回给会话。索迪教育索迪教育IT教育成就人生教育成就人生6.4 HttpSession接口接口-3q 会话跟踪器检查对象是否实现会话跟踪器检查对象是否实现HttpSessionBindingListener接口。任何时候应用程序接口。任何时候应用程序存储对象或将其从会话中删除,如果对象实现存储对象或将其从会话中删除,如果对象实现HttpSessionBindingListener接口,则接口,则Servlet都会通知都会通知此对象它已被绑定至会话或已解除会话绑定。此对象它已被绑定至会话或已解除会话绑定。q 在下列任何一种情况下,
53、服务器都会将会话视为新的在下列任何一种情况下,服务器都会将会话视为新的会话:会话:客户端首次进入页面或站点时客户端首次进入页面或站点时会话还未启动时会话还未启动时客户端选择不参与会话时客户端选择不参与会话时索迪教育索迪教育IT教育成就人生教育成就人生6.5 ServletConfig接口接口q ServletConfig接口定义接口定义Servlet配置对象,配置对象, Servlet引擎引擎使用此对象将信息传递给使用此对象将信息传递给Servlet以初始化以初始化Servlet。它。它包含包含Servlet初始化参数的名称初始化参数的名称/值对,还包含对值对,还包含对ServletConte
54、xt对象的引用。此接口定义了三个访问此对象的引用。此接口定义了三个访问此信息的方法。信息的方法。String getInitParameter(String name) 返回包含了指定初始化参返回包含了指定初始化参数值的字符串,如果参数数值的字符串,如果参数不存在则返回不存在则返回nullEnumeration getInitParameterNames()将将Servlet初始化参数的名初始化参数的名称作为字符串对象的枚举称作为字符串对象的枚举返回,如果返回,如果Servlet没有初没有初始化参数则返回空枚举始化参数则返回空枚举ServletCntext getServletContext(
55、)返回服务器传递至此返回服务器传递至此Servlet的的ServletContext对对象象索迪教育索迪教育IT教育成就人生教育成就人生6.6 ServletContext-1q 使用此接口的对象让使用此接口的对象让Servlet查找有关查找有关Servlet引擎及其引擎及其环境的信息。从环境的信息。从ServletConfig对象可以获得对象可以获得ServletContext。 ServletContext类中常用的方法如下:类中常用的方法如下:Object getAttribute(String name)返回给定名称的返回给定名称的Servlet引擎属性,引擎属性,若无则返回若无则返回nullEnumeration getAttributeNames()返回包含了此返回包含了此Servlet环境中可用环境中可用属性名称的枚举属性名称的枚举ServletContext getContext(String uripath)返回对应于服务器上指定返回对应于服务器上指定URL的的ServletContext对象对象int getMajorVersion()返回此返回此Web服务器支持的服务器支持的Java Servlet API的主要
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人消费性借款合同(2024版)9篇
- 二零二五年度可再生能源发电特许经营合作协议合同范本
- 二零二五年度医疗健康信息化运维保障合同2篇
- 2025版商业物业安全责任书(含应急预案)3篇
- 2025年度个性化产后恢复与新生儿护理个人月嫂服务协议4篇
- 2025年度个人退伙经营协议书(房地产租赁合作版)4篇
- 2025年重型化工设备运输及环保处理合同4篇
- 二零二五版船舶停靠码头运输保障合同4篇
- 二零二五年度国际货运代理服务合同15篇
- 2025年环保项目投资中介服务费及佣金协议3篇
- 《装配式蒸压加气混凝土外墙板保温系统构造》中
- T-CSTM 01124-2024 油气管道工程用工厂预制袖管三通
- 2019版新人教版高中英语必修+选择性必修共7册词汇表汇总(带音标)
- 新译林版高中英语必修二全册短语汇总
- 基于自适应神经网络模糊推理系统的游客规模预测研究
- 河道保洁服务投标方案(完整技术标)
- 品管圈(QCC)案例-缩短接台手术送手术时间
- 精神科病程记录
- 阅读理解特训卷-英语四年级上册译林版三起含答案
- 清华大学考博英语历年真题详解
- 人教版三年级上册口算题(全册完整20份 )
评论
0/150
提交评论