WEB应用及开发_07JAVA服务器小程序(ServLet)之定义、方法及编程_第1页
WEB应用及开发_07JAVA服务器小程序(ServLet)之定义、方法及编程_第2页
WEB应用及开发_07JAVA服务器小程序(ServLet)之定义、方法及编程_第3页
WEB应用及开发_07JAVA服务器小程序(ServLet)之定义、方法及编程_第4页
WEB应用及开发_07JAVA服务器小程序(ServLet)之定义、方法及编程_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、课题课题JAVAJAVA服务器小程序(服务器小程序(ServLetServLet)之定义、)之定义、方法及编程方法及编程 目的要求目的要求 掌握掌握ServLetServLet的定义、方法及编程的定义、方法及编程 教学重点教学重点ServLetServLet的含义、步曙、方法与编程的含义、步曙、方法与编程教学难点教学难点 ServLetServLet编程编程教学课时教学课时 4 4(含(含2 2课时上机)课时上机)教学方法教学方法 讲解、示例与启发式教学相结合讲解、示例与启发式教学相结合教学内容和步骤教学内容和步骤7.1 ServLet7.1 ServLet概概述述ServletServlet

2、是一是一种独种独立于平台和立于平台和协议协议的服的服务务器端的器端的JavaJava应应用程序,可以生成用程序,可以生成动态动态的的WebWeb页页面。面。ServletServlet是位于是位于WeWeb b 服服务务器器内内部的服部的服务务器端的器端的JavaJava应应用程序,用程序,与传统与传统的的从从命命令行令行启动启动的的JavaJava应应用程序不同,用程序不同,ServletServlet由由WebWeb服服务务器器进进行加行加载载,该该WebWeb服服务务器必器必须须包含支持包含支持ServletServlet的的JavaJava虚拟虚拟机。机。 7.1.1 Java Ser

3、vlet 7.1.1 Java Servlet 与与 Applet Applet 的比的比较较: : 相似之处:相似之处: (1 1)它们不是独立的应用程序,没有)它们不是独立的应用程序,没有main()main()方法。方法。 (2 2)它们不是由用户或程序员调用,而是由另外一个)它们不是由用户或程序员调用,而是由另外一个应用程序应用程序( (容器容器) )调用。调用。 (3 3)它们都有一个生存周期,包含)它们都有一个生存周期,包含init()init()和和destroy()destroy()方法。方法。不同之处:不同之处: (4 4)AppletApplet具有很好的图形界面具有很好的

4、图形界面(AWT)(AWT),与浏览器一,与浏览器一起,在客户端运行。起,在客户端运行。(5 5) Servlet Servlet 则没有图形界面,运行在服务器端。则没有图形界面,运行在服务器端。(6 6)Java Servlet Java Servlet 与与 CGI(Common Gateway InterfaCGI(Common Gateway Interface) ce) 的比较的比较: : (7) 与传统的与传统的CGI和许多其他类似和许多其他类似CGI的技术相比,的技术相比,Java Servlet具有更高的效率,更容易使用,功能更强大,具有具有更高的效率,更容易使用,功能更强大,

5、具有更好的可移植性,更节省投资。在未来的技术发展过程中,更好的可移植性,更节省投资。在未来的技术发展过程中,Servlet有可能彻底取代有可能彻底取代CGI。 高效在传统的高效在传统的CGI中,每个请求都要启动一个新的中,每个请求都要启动一个新的进程,如果进程,如果CGI程序本身的执行时间较短,启动进程所需程序本身的执行时间较短,启动进程所需要的开销很可能反而超过实际执行时间。而在要的开销很可能反而超过实际执行时间。而在Servlet中,中,每个请求由一个轻量级的每个请求由一个轻量级的Java线程处理线程处理(而不是重量级的而不是重量级的操作系统进程操作系统进程)。 在传统在传统CGI中,如果

6、有中,如果有N个并发的对同一个并发的对同一CGI程序的请程序的请求,则该求,则该CGI程序的代码在内存中重复装载了程序的代码在内存中重复装载了N次;而对次;而对于于Servlet,处理请求的是,处理请求的是N个线程,只需要一份个线程,只需要一份Servlet类代码。在性能优化方面,类代码。在性能优化方面,Servlet也比也比CGI有着更多的选有着更多的选择。择。 方便方便Servlet提供了大量的实用工具例程,例如自动地解析提供了大量的实用工具例程,例如自动地解析和解码和解码HTML表单数据、读取和设置表单数据、读取和设置HTTP头、处理头、处理Cookie、跟踪会话状态等。、跟踪会话状态等

7、。(8)功能强大)功能强大 在在Servlet中,许多使用传统中,许多使用传统CGI程序很难完成的任务都程序很难完成的任务都可以轻松地完成。例如,可以轻松地完成。例如,Servlet能够直接和能够直接和Web服务器服务器交互,而普通的交互,而普通的CGI程序不能。程序不能。Servlet还能够在各个程序还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。之间共享数据,使得数据库连接池之类的功能很容易实现。 (9)可移植性好可移植性好Servlet用用Java编写,编写,Servlet API具有完善的标具有完善的标准。因此,为准。因此,为IPlanet Enterprise S

8、erver写的写的Servlet无需任何实质上的改动即可移植到无需任何实质上的改动即可移植到Apache、Microsoft IIS或者或者WebStar。几乎所有的主流服务器。几乎所有的主流服务器都直接或通过插件支持都直接或通过插件支持Servlet。 (10)节省投资)节省投资 不仅有许多廉价甚至免费的不仅有许多廉价甚至免费的Web服务器可供个人或服务器可供个人或小规模网站使用,而且对于现有的服务器,如果它不小规模网站使用,而且对于现有的服务器,如果它不支持支持Servlet的话,要加上这部分功能也往往是免费的的话,要加上这部分功能也往往是免费的(或只需要极少的投资或只需要极少的投资)。7

9、.1.2Java Servlet 与与 JSP(JavaServer Pages) 的的比较比较: JavaServer Pages(JSP)是一种实现普通静态是一种实现普通静态HTML和动态和动态HTML混合编码的技术,混合编码的技术,JSP并没有增加并没有增加任何本质上不能用任何本质上不能用Servlet实现的功能。但是,在实现的功能。但是,在JSP中中编写静态编写静态HTML更加方便,不必再用更加方便,不必再用println语句来输出语句来输出每一行每一行HTML代码。更重要的是,借助内容和外观的分代码。更重要的是,借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开:比如,离,

10、页面制作中不同性质的任务可以方便地分开:比如,由页面设计者进行由页面设计者进行HTML设计,同时留出供设计,同时留出供Servlet程序程序员插入动态内容的空间。员插入动态内容的空间。从网络三层结构的角度看,一个网络项目最少分三层:从网络三层结构的角度看,一个网络项目最少分三层:数据层、应用层和表示层。数据层、应用层和表示层。Servlet用来写应用层用来写应用层是很强大的,但是对于写表示层就很不方便。是很强大的,但是对于写表示层就很不方便。 JSP则则主要是为了方便写表示层而设计的,当然也可以写应主要是为了方便写表示层而设计的,当然也可以写应用层。写惯了用层。写惯了ASP、PHP、CGI的朋

11、友,经常会不自觉的朋友,经常会不自觉地把表示层和应用层混在一起。比如把数据库处理信地把表示层和应用层混在一起。比如把数据库处理信息放到息放到JSP中,其实,它应该放在应用层中。中,其实,它应该放在应用层中。 JSP中中应该仅仅存放与表示层有关的部分,也就是说,只放应该仅仅存放与表示层有关的部分,也就是说,只放输出输出HTML网页的部分。而所有的数据计算、数据分析、网页的部分。而所有的数据计算、数据分析、数据库连接处理,统统是属于应用层,应该放在数据库连接处理,统统是属于应用层,应该放在Java Beans中。通过中。通过JSP调用调用Java Beans,实现两层的整,实现两层的整合。合。 综

12、上所述,综上所述,Servlet是一个不完善的产品,写是一个不完善的产品,写应用层很好,写表示层就逊色许多了,并且两层混杂。应用层很好,写表示层就逊色许多了,并且两层混杂。7.2 Java Servlet API 2.2 简介简介Java Servlet API 2.2 的类和接口组成两个的类和接口组成两个Java 包,包,即:即:javax.servlet 和和 javax.servlet.http(还包括还包括javax.servlet.jsp包,不在本篇文章讨论范围之内包,不在本篇文章讨论范围之内)。javax.servlet 包提供了控制包提供了控制 Servlet 生命周期所必需的生

13、命周期所必需的 Servlet 接口,是编写接口,是编写 Servlet 时必须要实现的。时必须要实现的。javax.servlet.http 包提供了从包提供了从Servlet 接口派生出的专接口派生出的专门用于处理门用于处理 HTTP 请求的抽象类和一般的工具类。所有请求的抽象类和一般的工具类。所有的的Servlet 对象都要实现对象都要实现Servlet 接口,大多数情况下是接口,大多数情况下是作为已经实现了作为已经实现了Servlet 接口的接口的javax.servlet.GenericServlet 和和 javax.servlet.http.HttpServlet 这两个抽象类的

14、子类来这两个抽象类的子类来间接实现间接实现Servlet 接口。接口。7.2.1 javax.servlet 包定义的类和接口:包定义的类和接口: interface RequestDispatcher /定义一种对象,用于从客户接受请求,并将请求发定义一种对象,用于从客户接受请求,并将请求发送到服务器上任何指定的资源,如一个送到服务器上任何指定的资源,如一个Servlet 、JSP 或或 HTML 文件。文件。 interface Servlet /定义了所有定义了所有 Servlet 必须实现的方法。必须实现的方法。 interface ServletConfig/定义定义Servlet

15、config 对象,由对象,由Servlet 引擎用在引擎用在 Servlet 初始化时,向初始化时,向 Servlet 传递信息。传递信息。 interface ServletContext /定义了一系列方法,以便定义了一系列方法,以便Servlet与其运行的环境通信。与其运行的环境通信。 interface ServletRequest/定义了用于向定义了用于向Servlet传递客户请求信息的对象。传递客户请求信息的对象。 interface ServletResponse/定义了一个对象,由定义了一个对象,由Servlet用于向客户发送响应。用于向客户发送响应。 interface S

16、ingleThreadModel/用于保证用于保证Servlet在任一时刻,只处理一个请求。在任一时刻,只处理一个请求。 class GenericServlet/继承继承Servlet接口,定义了一个通用的,与协议无关的接口,定义了一个通用的,与协议无关的Servlet。 class ServletInputStream/定义了一个输入流,用于由定义了一个输入流,用于由Servlet从中读取客从中读取客户请求的二进制数据。户请求的二进制数据。 class ServletOutputStream/定义了一个输出流,用于由定义了一个输出流,用于由Servlet向客户发送向客户发送二进制数据。二进

17、制数据。 class ServletException/定义了一个当定义了一个当Servlet遇到问题时可以抛出的异遇到问题时可以抛出的异常。常。class UnavailableException/定义了一种异常,用于由定义了一种异常,用于由Servlet指明它永远或指明它永远或暂时不可用暂时不可用 7.2.2 javax.servlet.http 包定义的类和接口:包定义的类和接口: interface HttpServletRequest/继承了继承了ServletRequest 接口,为接口,为HTTPServlet 提供请求信息。提供请求信息。 interface HttpServl

18、etResponse/继承了继承了ServletResponse 接口,为接口,为HTTPServlet 输出响应信息提供支持。输出响应信息提供支持。 interface HttpSession/为维护为维护 HTTP 用户的会话状态提供支持。用户的会话状态提供支持。 interface HttpSessionBindingListener/使得某对象在加入一个会话或从会话中删除使得某对象在加入一个会话或从会话中删除时能够得到通知。时能够得到通知。 interface HttpSessionContext/由由Servlet 2.1 定义,该对象在新版本已不定义,该对象在新版本已不被支持。被支

19、持。 class Cookie/用在用在Servlet 中使用中使用Cookie 技术技术 class HttpServlet/定义了一个抽象类,继承定义了一个抽象类,继承 GenericServlet 抽象类,应被抽象类,应被 HTTPServlet 继承。继承。 class HttpSessionBindingEvent/定义了一种对象,当某一个实现了定义了一种对象,当某一个实现了HttpSessionBindingListener接口的对象被加入接口的对象被加入会话或从会会话或从会/话中删除时,会收到该类对象的一个话中删除时,会收到该类对象的一个句柄句柄 class HttpUtils/

20、提供了一系列便于编写提供了一系列便于编写HTTPServlet 的方的方法。法。7.3 Servlet 的主要方法的主要方法 HTTP Servlet 使用一个使用一个 HTML 表格来发送和接收数据。表格来发送和接收数据。要创建一个要创建一个 HTTP Servlet,请扩展,请扩展 HttpServlet 类,类, 该该类是用专门的方法来处理类是用专门的方法来处理 HTML 表格的表格的 GenericServlet 的一个子类。的一个子类。 HTML 表单是由表单是由 和和 标标记定义的。表单中典型地包含输入字段记定义的。表单中典型地包含输入字段(如文本输入字段、如文本输入字段、复选框、

21、单选按钮和选择列表复选框、单选按钮和选择列表)和用于提交数据的按钮。和用于提交数据的按钮。当提交信息时,它们还指定服务器应执行哪一个当提交信息时,它们还指定服务器应执行哪一个Servlet(或其它的程序或其它的程序)。 HttpServlet 类包含类包含 init()、destroy()、service() 等方法。其中等方法。其中 init() 和和 destroy() 方法是继承的。方法是继承的。 (1)init() 方法方法 在在 Servlet 的生命期中,仅执行一次的生命期中,仅执行一次 init() 方法。方法。它是在服务器装入它是在服务器装入 Servlet时执行的。时执行的。

22、 可以配置服务器,以在启动服务器或客可以配置服务器,以在启动服务器或客户机首次访问户机首次访问 Servlet 时装入时装入 Servlet。 无论有多少无论有多少客户机访问客户机访问 Servlet,都不会重复执行,都不会重复执行 init() 。 缺省的缺省的 init() 方法通常是符合要求的,但也可以用方法通常是符合要求的,但也可以用定制定制 init() 方法来覆盖它,典型的是管理服务器端资方法来覆盖它,典型的是管理服务器端资源。源。 例如,可能编写一个定制例如,可能编写一个定制 init() 来只用于一次装来只用于一次装入入 GIF 图像,改进图像,改进 Servlet 返回返回

23、GIF 图像和含有多个图像和含有多个客户机请求的性能。另一个示例是初始化数据库连接。客户机请求的性能。另一个示例是初始化数据库连接。缺省的缺省的 init() 方法设置了方法设置了 Servlet 的初始化参数,并的初始化参数,并用它的用它的 ServletConfig 对象参数来启动配置,对象参数来启动配置, 因此所因此所有覆盖有覆盖 init() 方法的方法的 Servlet 应调用应调用 super.init() 以确以确保仍然执行这些任务。在调用保仍然执行这些任务。在调用 service() 方法之前,方法之前,应确保已完成了应确保已完成了 init() 方法。方法。(2)servic

24、e() 方法方法 语法格式:语法格式:public void service(HttpServletRequest request,HttpServletResponse response)throws servletException,IOException 例例1 serviceDemo.javaimport javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;public class serviceDemo extends HttpServlet static final priv

25、ate String CONTENT_TYPE=text/html;charset=GBK;public void init() throws ServletException public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException response.setContentType(CONTENT_TYPE); request.setCharacterEncoding(GBK); PrintWriter out = resp

26、onse.getWriter(); String name=request.getParameter(name); String gender=request.getParameter(gender); String age=request.getParameter(age); String method=request.getMethod(); out.println( + service方法演示方法演示 + );out.println( + 上传方法的参数是上传方法的参数是+method + ); out.println(名字名字=+name+); out.println(性别性别=+ge

27、nder+); out.println(年龄年龄=+age+); public void destroy() System.out.println(servlet 的生命结束的生命结束);service() 方法是方法是 Servlet 的核心。每当一个客户请求一的核心。每当一个客户请求一个个HttpServlet 对象,该对象的对象,该对象的service() 方法就要被调用,方法就要被调用,而且传递给这个方法一个而且传递给这个方法一个请求请求(ServletRequest)对象和对象和一个一个响应响应(ServletResponse)对象作为参数。对象作为参数。 在在 HttpServle

28、t 中已存在中已存在 service() 方法。缺省的服务功能是调用方法。缺省的服务功能是调用与与 HTTP 请求的方法相应的请求的方法相应的 do 功能。例如,功能。例如, 如果如果 HTTP 请求方法为请求方法为 GET,则缺省情况下就调用,则缺省情况下就调用 doGet() 。Servlet 应该为应该为 Servlet 支持的支持的 HTTP 方法覆盖方法覆盖 do 功能。因为功能。因为 HttpServlet.service() 方法会检查请求方法是否调用了适方法会检查请求方法是否调用了适当的处理方法,不必要覆盖当的处理方法,不必要覆盖 service() 方法。只需覆盖相方法。只需

29、覆盖相应的应的 do 方法就可以了。方法就可以了。 当一个客户通过当一个客户通过HTML 表单发出一个表单发出一个HTTP POST请求请求时,时,doPost()方法被调用。与方法被调用。与POST请求相关的参数作为请求相关的参数作为一个单独的一个单独的HTTP 请求从浏览器发送到服务器。当需要修请求从浏览器发送到服务器。当需要修改服务器端的数据时,应该使用改服务器端的数据时,应该使用doPost()方法。方法。 一个客户通过一个客户通过HTML 表单发出一个表单发出一个HTTP GET请求或直请求或直接请求一个接请求一个URL时,时,doGet()方法被调用。与方法被调用。与GET请求相请

30、求相关的参数添加到关的参数添加到URL的后面,并与这个请求一起发送。当的后面,并与这个请求一起发送。当不会修改服务器端的数据时,应该使用不会修改服务器端的数据时,应该使用doGet()方法。方法。Servlet的响应可以是下列几种类型:的响应可以是下列几种类型: 一个输出流,浏览器根据它的内容类型一个输出流,浏览器根据它的内容类型(如如text/HTML)进行解释。进行解释。 一个一个HTTP错误响应错误响应, 重定向到另一个重定向到另一个URL、servlet、JSP。 destroy() 方法方法 destroy() 方法仅执行一次,即在服务器停止且卸装方法仅执行一次,即在服务器停止且卸装

31、Servlet 时执行该方法。典型的,将时执行该方法。典型的,将 Servlet 作为服务器作为服务器进程的一部分来关闭。缺省的进程的一部分来关闭。缺省的 destroy() 方法通常是符合方法通常是符合要求的,但也可以覆盖它,典型的是管理服务器端资源。要求的,但也可以覆盖它,典型的是管理服务器端资源。例如,如果例如,如果 Servlet 在运行时会累计统计数据,则可以编在运行时会累计统计数据,则可以编写一个写一个 destroy() 方法,该方法用于在未装入方法,该方法用于在未装入 Servlet 时时将统计数字保存在文件中。另一个示例是关闭数据库连接。将统计数字保存在文件中。另一个示例是关

32、闭数据库连接。 当服务器卸装当服务器卸装 Servlet 时,将在所有时,将在所有 service() 方法调用完成后,或在指定的时间间隔过后调用方法调用完成后,或在指定的时间间隔过后调用 destroy() 方法。一个方法。一个Servlet 在运行在运行service() 方方法时可能会产生其它的线程,因此请确认在调用法时可能会产生其它的线程,因此请确认在调用 destroy() 方法时,这些线程已终止或完成。方法时,这些线程已终止或完成。 GetServletConfig()方法方法 GetServletConfig()方法返回一个方法返回一个 ServletConfig 对象,该对象用

33、来返回初始化参数对象,该对象用来返回初始化参数和和ServletContext。ServletContext 接口提供有接口提供有关关servlet 的环境信息。的环境信息。 GetServletInfo()方法方法 GetServletInfo()方法是一个可选的方法,它提供方法是一个可选的方法,它提供有关有关servlet 的信息,如作者、的信息,如作者、版本、版权。版本、版权。 doPost方法方法doPost()只可以接受浏览器和只可以接受浏览器和Form表单的表单的post方法访方法访问,格式:问,格式:public void doPost(HttpServletRequest re

34、quest,HttpServletResponse response)throws servletException,IOException通过通过HTML表单提交了表单提交了HTTP POST请求时,将调用该请求时,将调用该方法。与方法。与POST请求相关联的参数独立传递给请求相关联的参数独立传递给Web服务服务器。当在器。当在server端需对发来的数据作修改时采用端需对发来的数据作修改时采用doPost方法。方法。 doGet方法方法doGet()方法可以接受浏览器直接访问和方法可以接受浏览器直接访问和Form表单表单的的get方法访问,格式:方法访问,格式:public void do

35、Get(HttpServletRequest request,HttpServletResponse response)throws servletException,IOException当在游览器中指定了一个当在游览器中指定了一个URL时,时,HTTP GET是客是客户端采用的缺省方法。户端采用的缺省方法。doGet是是Web server对用户对用户端请求的响应方法。与端请求的响应方法。与doPost不同的是,当在不同的是,当在server端不需要对发来的数据修改时或是发来的参数端不需要对发来的数据修改时或是发来的参数非敏感数据时采用非敏感数据时采用doGet方法。参数数据被附加在方法。

36、参数数据被附加在URL之后通过一个之后通过一个HTTP请求发送给请求发送给Web server。 doDelete()方法方法public void doDelete(HttpServletRequest request,HttpServletResponse response)throws servletException,IOException该方法删除服务器端的文件。该方法删除服务器端的文件。servlet的输出响应可以是以下几种情况之一,的输出响应可以是以下几种情况之一,HTML页面、页面、HTTP错误代码、重定向到别外的错误代码、重定向到别外的URL、servlet或或JSP。当服务

37、器调用。当服务器调用sevlet 的的Service()、doGet()和和doPost()这三个方法时,这三个方法时,均需要均需要 请求请求和和响应响应对象作为参数。对象作为参数。请求请求对对象提供有关请求的信息,而象提供有关请求的信息,而响应响应对象提供了一对象提供了一个将响应信息返回给浏览器的一个通信途径。个将响应信息返回给浏览器的一个通信途径。javax.servlet 软件包中的相关类为软件包中的相关类为ServletResponse和和ServletRequest,而,而javax.servlet.http 软件软件包中的相关类为包中的相关类为HttpServletRequest

38、和和 HttpServletResponse。Servlet 通过这些对象与服务器通通过这些对象与服务器通信并最终与客户机通信。信并最终与客户机通信。Servlet 能通过调用能通过调用请求请求对象的方法获知客户机环境,服务器环境的信息对象的方法获知客户机环境,服务器环境的信息和所有由客户机提供的信息。和所有由客户机提供的信息。Servlet 可以调用可以调用响响应应对象的方法发送响应,该响应是准备发回客户对象的方法发送响应,该响应是准备发回客户机的。机的。7.4 Servlets编程编程Servlets是生成动态页面的是生成动态页面的Java解决方案。解决方案。它有如下特点:它有如下特点:

39、移植性好:移植性好:Servlets以以Java写成,在服务写成,在服务器端执行,拥有良好的跨平台特性,适应于各器端执行,拥有良好的跨平台特性,适应于各种种Web服务器。服务器。Servlet API在在Servlet和和Web服服务器之间定义了标准接口。务器之间定义了标准接口。 良好的一致性和性能良好的一致性和性能:Servlet代码被代码被Web服务器一次装入,为每一个客户端的请求而激服务器一次装入,为每一个客户端的请求而激活。不同的请求间可以共享系统资源(如数据活。不同的请求间可以共享系统资源(如数据库连接)因此不存在为每一个请求初使化新的库连接)因此不存在为每一个请求初使化新的Serv

40、let程序的额外开销。程序的额外开销。Servlet可以动态装入可以动态装入可以在可以在Web服务器启动时装入。服务器启动时装入。 基于基于Java语言:语言:Servlet采用采用Java书写,书写,它继承了它继承了Java语言的所有优点。通过垃圾内存语言的所有优点。通过垃圾内存清理机制而且不使用指针,使得清理机制而且不使用指针,使得Servlet避免了避免了内存管理的大多数问题。内存管理的大多数问题。 servlet是运行于是运行于Web服务器或应用服务器的服务服务器或应用服务器的服务器端器端Java程序(注意,这里的应用服务器的是指应程序(注意,这里的应用服务器的是指应用的部署和运行平台

41、软件:用的部署和运行平台软件:Application Server)。)。servlet和和Web服务器的关系就象服务器的关系就象applet与浏览器的与浏览器的关系一样。关系一样。Applet在游览器中装入和执行,而在游览器中装入和执行,而servlet是在是在Web服务器中装入和执行。服务器中装入和执行。servlet API定义定义了了servlet与与Web服务器间的标准接口,这使得服务器间的标准接口,这使得servlet的开发独立于的开发独立于Web服务器。服务器。7.4.1 servlet的访问方式的访问方式通过浏览器可以有几种途径访问通过浏览器可以有几种途径访问servlet:

42、HTML表单:通常表单:通常servlet由由HTML表单表单中的中的Sumbit按钮驱动,用户的输入数据通过按钮驱动,用户的输入数据通过POST或或GET方法传递给方法传递给servlet。 超链接:超链接:servlet也可以超链接的形式指也可以超链接的形式指定,通过超链接激活服务或定,通过超链接激活服务或servlet的的doGet方法。方法。 SERVLET标记:一些标记:一些Web服务器支持服务器支持HTML文档的文档的SERVLET标记或者标记或者标记。执行时标记。执行时servlet的的doGet方法被激活,输出方法被激活,输出结果代替结果代替SERVLET标记出现在标记出现在H

43、TML文档中。在文档中。在JSP0.92和和1.0规范中,支持的规范中,支持的include语法是:语法是: 通过通过servlet访问:通过访问:通过getServletContext().getServlet(servletname)可访问其它的可访问其它的servlet。值得注意的是,。值得注意的是,Java servlet API2.1建议不采用这种方法,它提供了建议不采用这种方法,它提供了RequestDispatcher接口,它可以转发请求调用接口,它可以转发请求调用另外的另外的servlet。7.4.2 Servlet生命周期管理生命周期管理基于基于servlet的网络应用的用户

44、端程序并非直接与的网络应用的用户端程序并非直接与servlet交互,而是发请求给交互,而是发请求给Web server,由,由Web server通过通过servlet API激活激活servlet。Web server的主的主要任务包括为要任务包括为servlet初使化、活初使化、活servlet的的doGet或或doPost方法、销毁方法、销毁servlet进程等。在进程等。在Web server中,中,每个每个servlet只有一个进程,为每个客户端请求创建一只有一个进程,为每个客户端请求创建一个线程(每个线程处理一个客户端请求个线程(每个线程处理一个客户端请求, 如图如图1,servl

45、et的这一特性使其运行效率非常高效。的这一特性使其运行效率非常高效。 图图1 Servlet生命周期生命周期装载装载Servlet。这项操作一般是动态执行的。然而,。这项操作一般是动态执行的。然而,Server通常会提供一个管理的选项,用于在通常会提供一个管理的选项,用于在Server启动时强制装启动时强制装载和初始化特定的载和初始化特定的Servlet。 Server创建一个创建一个Servlet的实例的实例 Server调用调用Servlet的的init()方法方法 一个客户端的请求到达一个客户端的请求到达Server Server创建一个请求对象创建一个请求对象 Server创建一个响应

46、对象创建一个响应对象 Server激活激活Servlet的的service()方法,传递请求和响应方法,传递请求和响应对象作为参数对象作为参数 service()方法获得关于请求对象的信息,处理请求,方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息访问其他资源,获得需要的信息 service()方法使用响应对象的方法,将响应传回方法使用响应对象的方法,将响应传回Server,最终到达客户端。,最终到达客户端。service()方法可能激活方法可能激活其它方法以处理请求,如其它方法以处理请求,如doGet()或或doPost()或程序或程序员自己开发的新的方法员自己开发的新的方

47、法 对于更多的客户端请求,对于更多的客户端请求,Server创建新的请求创建新的请求和响应对象,仍然激活此和响应对象,仍然激活此Servlet的的service()方法,方法,将这两个对象作为参数传递给它。如此重复以上的将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用循环,但无需再次调用init()方法。一般方法。一般Servlet只初只初始化一次始化一次 ,当当Server不再需要不再需要Servlet时时(一般当一般当Server关闭时关闭时),Server调用调用Servlet的的Destroy()方方法。法。例例2 Servlet生命周期生命周期import javax

48、.servlet.*;import javax.servlet.http.*;import java.io.*;public class servletLifeDemo extends HttpServlet static final private String CONTENT_TYPE=text/html;charset=GBK;public void init() throws ServletException System.out.println(servlet 的生命开始的生命开始);public void doGet(HttpServletRequest request, Http

49、ServletResponse response) throws IOException, ServletException response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); out.println(); out.println(); out.println(); String title = rb.getString(requestinfo.title); out.println( + title + ); out.println(); out.println(); / img stu

50、ff not reqd for source code html showing / all links relative! out.println(); out.println(); out.println(); out.println(); out.println( + title + ); out.println(); out.println(rb.getString(requestinfo.label.method); out.println(); out.println(request.getMethod(); out.println(); out.println(rb.getStr

51、ing(requestinfo.label.requesturi); out.println(); out.println(request.getRequestURI(); out.println(); out.println(rb.getString(tocol); out.println(); out.println(request.getProtocol(); out.println(); out.println(rb.getString(requestinfo.label.pathinfo); out.println(); out.printl

52、n(request.getPathInfo(); out.println(); out.println(rb.getString(requestinfo.label.remoteaddr); out.println(); out.println(request.getRemoteAddr(); out.println(); response.sendRedirect(:8080/examples/servlet/HelloWorldExample); public void destroy() System.out.println(servlet 的生命结束的生命

53、结束);7.5 servlet的步曙:(的步曙:(Tomcat5.0配置配置servlet) 先添加先添加servlet的环境变量的环境变量,我用的是我用的是win2000,所所以只要在我的电脑以只要在我的电脑-属性属性-高级高级-环境变量环境变量,然后新建然后新建一个一个classpath,因为我的因为我的Tomcat5.0目录是在目录是在C:Tomcat 5.0所以变量值为所以变量值为 C:Tomcat 5.0commonlibservlet-api.jar与与tomcat4不同的是不同的是tomvat4的的jar文件是文件是servlet.jar编辑好环境变量后重启计算机编辑好环境变量后

54、重启计算机 写一个写一个servlet文件文件import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;I mport javax.servlet.http.HttpServletResponse;public class Test extends HttpServlet protected void do

55、Get(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException PrintWriter out=response.getWriter();out.println(This is a servlet test.);out.flush();可放在任一可放在任一classes目录目录,此处此处,我选择虚拟目录我选择虚拟目录D:/jsp/webappserver.xml设置设置:Context path=/webapp docBase=d:/jsp/webapp.path是虚拟目录是虚拟目录,docBase是虚拟目录路径是虚拟目录路径虚拟目录的设置网上有很多虚拟目录的设置网上有很多,这里不再介绍这里不再介绍在在D:/jsp/webapp/WEB-INF/classes/下编译生成下编译生成Test.class文件文件请将生成的类文件与请将生成的类文件与LocalStrings

温馨提示

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

评论

0/150

提交评论