第八章 Servlet技术

上传人:cn****1 文档编号:569942532 上传时间:2024-07-31 格式:PPT 页数:36 大小:693.50KB
返回 下载 相关 举报
第八章 Servlet技术_第1页
第1页 / 共36页
第八章 Servlet技术_第2页
第2页 / 共36页
第八章 Servlet技术_第3页
第3页 / 共36页
第八章 Servlet技术_第4页
第4页 / 共36页
第八章 Servlet技术_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《第八章 Servlet技术》由会员分享,可在线阅读,更多相关《第八章 Servlet技术(36页珍藏版)》请在金锄头文库上搜索。

1、第八章第八章 ServletServlet技术技术课程目标了解什么是Servlet及处理流程了解Servlet的相关类和接口掌握Servlet的开发步骤8.1.1 8.1.1 ServletServlet的概念的概念Servlet是一种用在服务器端且使用应用程序设计接口(API)及相关类和方法的Java程序,具有独立于平台和协议的特性,可以生成动态的Web页面。实际应用中经常将它放在客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。 Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序

2、不同,Servlet由服务器端的Web容器进行加载。Servlet和Jsp是JavaEE Web层的主要技术。在介绍Jsp的时候,我们曾经讲到Jsp最终会转换成Servlet并被编译成Java的class文件。当有Web请求到达Web服务器时,如果请求的是动态资源,Web服务器会将请求交由Web容器处理,Web容器会载入相应的Servlet并调用其service()方法来处理请求。因此Servlet是一种运行在服务器上的组件,它依赖于Servlet容器,并由Servlet容器负责Servlet和客户的通信以及调用Servlet的方法。Servlet看起来像是通常的Java程序。Servlet导

3、入特定的属于Java Servlet API的包并实现其相应方法。因为是对象字节码,可动态地从网络加载,可以说Servlet对Server就如同Applet对Client一样。但是,由于Servlet运行于Server中,它们并不需要一个图形用户界面,从这个角度讲,Servlet也被称为FacelessObject。一个Servlet就是Java编程语言中的一个类,只不过它不具有通常意义的Java程序的Main函数,它被用来扩展服务器的功能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然servlet可以对任何类型的请求产生响应,但通常只用来扩展Web服务器的应用程序。Se

4、rvlet的命名可以看出sun命名的特点,如Applet=Application+let,表示小应用程序;Scriptlet=Script+let,表示小脚本程序;同样Servlet=Server+let,表示小服务程序。8.1.2 Servlet功能功能 Servlet 通过创建一个框架来扩展服务器的能力,以提供在 Web 上进行请求和响应服务。当客户机发送请求至服务器时,服务器可以将请求信息发送给 Servlet,并让 Servlet 建立起服务器返回给客户机的响应。 当启动 Web 服务器或客户机第一次请求服务时,可以自动装入 Servlet。装入后, Servlet 继续运行直到其它客

5、户机发出请求。Servlet 的功能涉及范围很广。例如,Servlet 可完成如下功能: 创建并返回一个包含基于客户请求性质的动态内容的完整的 HTML页面。 创建可嵌入到现有 HTML 页面中的一部分 HTML 页面(HTML 片段)。 与其它服务器资源(包括数据库和基于 Java 的应用程序)进行通信。 用多个客户机处理连接,接收多个客户机的输入,并将结果广播到多个客户机上。例如,Servlet 可以是多参与者的游戏服务器。 当允许在单连接方式下传送数据的情况下,在浏览器上打开服务器至applet的新连接,并将该连接保持在打开状态。当允许客户机和服务器简单、高效地执行会话的情况下,appl

6、et也可以启动客户浏览器和服务器之间的连接。可以通过定制协议或标准(如 IIOP)进行通信。 对特殊的处理采用 MIME 类型过滤数据,例如图像转换和服务器端包括(SSI)。 将定制的处理提供给所有服务器的标准例行程序。例如,Servlet 可以修改如何认证用户。8.1.3 Servlet的生命周期的生命周期我们知道Servlet依靠Web容器运作。Servlet程序本身不是直接在Java虚拟机上运行的,它需要Web容器程序控制其载入和运行过程。理解整个Servlet的生命周期能够加深我们对Servlet技术的认识并提高我们的编程技巧。Web容器控制整个Servlet的生命周期,它一般分为如图

7、8-1的几种状态。8.2 Servlet的处理流程的处理流程Servlet的主要功能在于交互式地浏览和修改数据,生成动态Web内容,这也是程序员编写Servlet的主要目的。这个过程为:(1)客户端发送请求至服务器端;(2)服务器将请求信息发送至Servlet;(3)Servlet生成响应内容并将其传给Server。响应内容动态生成,通常取决于客户端的请求;(4)服务器将响应返回给客户端。一个Servlet的运行过程如图8-2所示。8.3 Servlet的核心类和接口的核心类和接口在JavaEE规范中,每个与Servelt有关的类或接口都与Servlet的状态有一定的关系。而Servlet A

8、PI有两个软件包:javax.servlet和javax.servlet.http。前者所在的软件包主要提供了Web容器能够使用的Servlet基本类和接口,后者主要包括和Http协议相关的Servlet类和接口。程序员所要做的主要工作就是根据需要,继承这些类并实现需要的功能。下面介绍一下这两个包中的的核心类及其部分重要接口。 1.javax.servlet.Servlet接口javax.servlet.Servlet接口规定了必须由Servlet类实现并由Servlet引擎识别和管理的方法集。Servlet接口的基本目标是提供与生命周期相关的方法init()、service()和destro

9、y()等。Servlet接口包含下面一些主要方法:void init(ServletConfit config) throws ServletException 在servlet被载入后和提供服务前由servlet引擎进行一次性调用。如果init()产生UnavailableException,则Servlet退出服务。 ServletConfig getServletConfig() 返回传递到Servlet的init()方法的ServletConfig对象 。void service(ServletRequest request,ServletResponse response)throw

10、s ServletException,IOException 处理request对象中描述的请求,使用response对象返回请求结果。String getServletInfo() 返回描述Servlet的一个字符串。void destory() 当Servlet将要卸载时由Servlet引擎调用。2. javax.servlet.GenericServlet类(协议无关版本)GenericServlet是一种与协议无关的Servlet,是一种根本不对请求提供服务的Servlet,而是简单地从init()方法启动后台线程并在destory()中杀死。它可以用于模拟操作系统的端口监控进程。此类

11、提供除了service()方法外所有接口中方法的缺省实现。这意味着通过简单地扩展GenericServlte可以编写一个基本的Servlet。 除了Servlet接口外,GenericServlet也实现了ServletConfig接口,处理初始化参数和servlet上下文,提供对授权传递到init()方法中的ServletConfig对象的方法。 3. javax.servlet.http.HttpServlet类(HTTP版本) 虽然Servlet API允许扩展到其它协议,但最终所有的Servlet均在Web环境下实施操作,只有几种Servlet直接扩展了GenericServlet。对

12、Servlet更一般的是继承Servlet的抽象子类HttpServlet。HttpServlet类通过调用指定的HTTP请求方法的方法来实现service(),亦即对DELETE、HEAD、GET、OPTIONS、POST、PUT和TRACE,分别调用doDelete()、doHead()、doGet()、doOptions()、doPost()、doPut()和doTrace()方法,将请求和响应对象置入其HTTP指定子类。 HttpServlet类中的方法如下: void doGet(HttpServletRequest request,HttpServletResponse respo

13、nse)throws ServletException,IOException 由Servlet引擎调用,用于处理一个HTTP GET请求。 void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException 由Servlet引擎调用,用于处理一个HTTP POST请求。void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,I

14、OException 由下面的service方法调用的一个立即方法,带有指定HTTP请求和响应。此方法实际上将请求导向到doGet()、doPost()等等,不应该覆盖此方法。void service(ServletRequest request,ServletResponse response)throws ServletException,IOException将请求和响应对象置入其指定的HTTP子类,并调用指定HTTP的service()方法。4. javax.servlet.ServletRequest类(协议无关版本) ServletRequest接口封装了客户端请求的细节。它与协议

15、无关,并有一个指定HTTP协议的子接口。 ServletRequest主要处理:1、找到客户端的主机名和IP地址;2、检索请求参数;3、取得和设置属性;4、取得输入和输出流。 ServletRequest类中的方法:Object getAttribute(String name) 返回具有指定名字的请求属性,如果不存在则返回null。此属性可由Servlet引擎设置或使用setAttribute()显式加入。 Enumeration getAttributeName() 返回请求中所有属性名的枚举。如果不存在属性,则返回一个空的枚举。 String getParameter(String na

16、me) 返回指定输入参数,如果不存在,返回null。 Enumeration getParameterName() 返回请求中所有参数名的一个可能为空的枚举。 String getParameterValues(String name) 返回指定输入参数名的取值数组,如果取值不存在则返回null。它在参数具有多个取值的情况下十分有用。 5.javax.servlet.http.HttpServletRequest接口(HTTP版本)HttpServletRequest类主要处理:1、读取和写入HTTP头标;2、取得和设置cookies;3、取得路径信息;4.标识HTTP会话。HttpServl

17、etRequest接口中的方法:Cookie getCookies() 返回与请求相关cookie的一个数组。String getMethod() 返回HTTP请求方法(例如GET、POST等等)。 String getPathInfo() 返回在URL中指定的任意附加路径信息。 5.javax.servlet.ServletResponse接口(协议无关版本)ServletResponse对象将一个Servlet生成的结果传到发出请求的客户端。ServletResponse操作主要是作为输出流及其内容类型和长度的包容器,它由Servlet引擎创建。ServletResponse接口中的方法:

18、String getCharacterEncoding() 返回响应使用的字符解码的名字。除非显式设置,否则为ISO-8859-1。OutputStream getOutputStream()throws IOException 返回用于将返回的二进制输出写入客户端的流,此方法和getWrite()方法二者只能调用其一。Writer getWriter()throws IOException 返回用于将返回的文本输出写入客户端的一个字符写入器,此方法和getOutputStream()二者只能调用其一。void setContentType(String type) 设置内容类型。在HTTP

19、servlet中即设置Content-Type头标。void setLocale(Locale locale) 设置响应使用的语言环境等相关的Locale。在HTTP servlet中,将对Content-Type头标取值产生影响。 6.javax.servlet.http.HttpServletResponse接口(HTTP版本)HttpServletResponse加入表示状态码、状态信息和响应头标的方法,它还负责对URL中写入一Web页面的HTTP会话ID进行解码。HttpServletResponse接口中的方法:void addCookie(Cookie cookie) 将一个Set

20、-Cookie头标加入到响应。 String encodeRedirectURL(String url) 如果客户端不知道接受cookies id,则向URL加入会话ID。第一种形式只对在sendRedirect()中使用的URL进行调用。其他被编码的URLs应被传递到encodeURL()。void sendError(int status) 设置响应状态码为指定值(可选的状态信息)。HttpServleetResponse定义了一个完整的整数常量集合表示有效状态值。void setStatus(int status) 设置响应状态码为指定指。7.javax.servlet.ServletC

21、ontext接口一个Servlet上下文是Servlet引擎提供用来服务于Web应用的接口。Servlet上下文具有名字(它属于Web应用的名字)唯一映射到文件系统的一个目录。一个Servlet可以通过ServletConfig对象的getServletContext()方法得到Servlet上下文的引用,如果Servlet直接或间接调用子类GenericServlet,则可以使用getServletContext()方法。8.javax.servlet.http.HttpSession接口HttpSession类似于哈希表的接口,它提供了setAttribute()和getAttribute

22、()方法存储和检索对象。HttpSession提供了一个会话ID关键字,一个参与会话行为的客户端在同一会话的请求中存储和返回它。Servlet引擎查找适当的会话对象,并使之对当前请求可用。HttpSession接口中的方法:Object getAttribute(String name) 返回保存在session中的指定名称的对象。void setAttribute(String name,Object value) 将指定名称的对象设置为value。void removeAttribute(String name) 从session中移出指定名称的属性。Enumeration getAttr

23、ibuteName() 返回捆绑到当前会话的所有属性名的枚举值。 long getCreationTime() 返回表示会话创建的日期和时间的一个长整型,该整型形式为java.util.Date()构造器中使用的形式。 long getLastAccessedTime() 返回表示会话最后访问日期和时间的一个长整型,该整型形式为java.util.Date()构造器中使用的形式。String getId() 返回会话ID,Servlet引擎设置的一个唯一关键字。 int getMaxInactiveInterval() 返加一个秒数,这个秒数表示客户端在不发出请求时,session被Servl

24、et引擎维持的最长时间。 void setMasInactiveInterval(int seconds) 设置一个秒数,这个秒数表示客户端在不发出请求时,session被Servlet引擎维持的最长时间。void invalidate() 调用该方法会使得会话被终止,释放其中任意对象。 boolean isNew() 返回一个布尔值以判断这个session是不是新的。如果一个session已经被服务器建立但是还没有收到相应的客户端的请求,这个session将被认为是新的。这意味着,这个客户端还没有加入会话或没有被会话公认。在它发出下一个请求时还不能返回适当的session认证信息。当sess

25、ion无效后再调用这个方法会抛出一个IllegalStateException。8.4 Servlet的编写、配置与调用的编写、配置与调用 8.4.1编写第一个Servlet 第一步:在MyEclipse中新建Web项目。 打开MyEclipse,选择“FileNewWeb Project”菜单项后会出现如图所示的新建Web项目窗口。在新建窗口中的Project Name中输入项目的名称,比如:sample,然后点击Finish完成项目的创建。这时MyEclipse会自动创建相应的文件夹并引入相关的包,其结果如图所示。第二步:在项目中创建第二步:在项目中创建Servlet。创建cn.edu.s

26、ervlet.test包。在相应的包上点击鼠标右键会出现相应的菜单,选择“New-Servlet”菜单项后会出现新建Servlet窗口,如图所示 。在新建Servlet窗口的Name中输入Servlet类名称,本例为:HelloServlet,其所在的包为cn.edu.servlet.test。然后点击Next按钮会出现如图所示的Servlet配置窗口。此窗口主要是用于配置Servlet并保存在项目的Web.xml配置文件中。我们暂时略过此处,不做任何修改,点击Finish按钮完成Servlet的创建并返回到MyEclipse主窗口,如图所示。第三步:修改相应的代码。第三步:修改相应的代码。在

27、示例中,我们看见HelloServlet类中有doGet和doPost方法,且内容完成一样。由于HelloServlet是继承自HttpServlet,因此它是用于处理Http请求的。对于Http请求的Get方法会调用doGet进行处理,而Http请求的Post方法会调用doPost进行处理。在这里我们将这两个方法的内部处理代码修改成一样,如下所示:response.setContentType(text/html);PrintWriter out = response.getWriter();out.println();out.println();out.println( A Servlet

28、);out.println( );out.print(Hello World!);out.println( );out.println();out.flush();out.close();第四步:发布第四步:发布Web项目到项目到Tomcat服务器。服务器。当我们编写完所有Servlet后就需要将整个Web项目发布到Web容器来运行,在发布时MyEclipse会对所有的Java源文件进行编译并将相应的文件复制到Web容器的相应目录,具体如何在MyEclipse中建立Web服务器并进行Web应用的发布请参考相关章节及资料。注意:如果不借助MyEclipse建立Servlet,在编译时需要将相应的

29、类引入类路径,否则会出现编译错误。8.4.2 Servlet的配置的配置 Servlet的配置主要是告诉Web容器项目中有哪些Servlet,它们对应的Java类,有哪些初始化参数需要传入,每一个Servlet类对应哪一个URL等等。这些信息都记录在Web项目的配置文件web.xml中。此文件位于项目的WEB-INF文件夹中,其内容遵循XML语法格式。每一个Servlet在web.xml中都对应和两个配置元素。前面的HelloServlet在web.xml中的配置内容如下: This is the description of my J2EE component This is the dis

30、play name of my J2EE component HelloServlet cn.edu.servlet.test.HelloServlet HelloServlet /servlet/HelloServlet8.4.3 Servlet的调用的调用当将Servlet配置好并发布到服务器后,接下来我们就可以对此Servlet进行调用了,从客户端浏览器对Servlet进行访问时输入的地址是根据url-pattern中指定的内容来决定的,本例中我们的访问地址是:http:/localhost:8080/sample/servlet/HelloServlet。其结果如图所示。 Thank you!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 试题/考题 > 初中试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号