




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 7章 Servlet编程技术 Servlet技术是目前流行的开发模式 MVC的基础,而 JSP技术就是基于 Java Servlet的。因此,要对 JSP有更深入的了解,就需要掌握 Servlet。 7.1Servlet概述 Servlet已经出现了很长时间,目前已经是一种非常成熟的技术。 JSP与 Servlet结合使用非常有效。 7.1.1Servlet简介 Servlet是与平台无关的服务器端小程序,从本质上讲, Servlet是一个 Java类,除图形界面以外, Java语言能实现的功能,Servlet基本上都能实现。 Servlet主要用于处理客户端传来的 HTTP请求,并将处理结果以 HTTP形式返回客户端,从而生成动态网页。 Servlet和客户端协作是通过请求 响应模式来进行处理,如 下图 所示。 Servlet是 Java技术对 CGI(通用网关接口)编程的回应,但与传统的 CGI和许多其他类似 CGI的技术相比, Java Servlet具有更高的效率,更容易使用,功能更强大,并具有更好的可移植性,更节省投资。 Servlet的主要优点有以下几点: ( 1)可移植性。 Servlet是利用 Java语言开发的,因此延续 Java在跨平台上的表现,不论 Server的操作系统是 Windows、 Linux、 FreeBSD或 AIX等,都能够很好地执行。当程序员在开发 Applet 时, “ 可移植性 (portability)” 是比较难以解决的问题。例如,开发 Applet时,为了配合客户端的平台 (即浏览器版本的不同,plug-in的 JDK版本也不尽相同 ),达到满足真正 “ 跨平台 ” 的目的时,需要花费大量时间来修改程序。但即使如此,往往也只能满足大部分用户,而其他少数用户若要执行 Applet,仍须先安装合适的 JRE (Java runtime environment)。但是如果使用 Servlet就比较简单了,主要原因在于 Servlet 是在 Server 端执行的。 ( 2)强大的功能。 Servlet能够完全发挥 Java API 的威力,包括网络和 URL 存取、多线程 (multi thread)、影像处理、 RMI(remote method invocation)、分布式服务器组件 (enterprise Java bean)、对象序列化 (object serialization) 等。 ( 3)高性能。 Servlet 在加载执行之后,其对象实体 (instance)通常会一直停留在 Server的内存中,若有请求 (request)发生时,服务器再调用 Servlet 来服务,若收到相同服务的请求时, Servlet会利用不同的线程来处理,不像 CGI程序必须产生许多进程 (process)来处理数据。因此在性能的表现上, Servlet大大超越 CGI程序。 而且 Servlet在执行时,不是一直停留在内存中,服务器会自动将停留时间过长、一直没有执行的 Servlet从内存中移除,这个过程用户也可以自行编写程序来控制。其停留时间的长短通常和选用的服务器有关。 ( 4)安全性高。 Servlet也有类型检查 (type checking)的特性,并且由于 Java的垃圾收集 (garbage collection)与没有指针的设计,使得 Servlet 避免了内存管理的问题。由于在 Java的异常处理 (exception handling)机制下, Servlet能够安全地处理各种错误,不会因为发生逻辑错误而导致整体服务器系统的毁灭。 由于 Servlet的种种优点, Java Servlet有着十分广泛的应用。它不单单能简单地处理客户端的请求,借助 Java的强大的功能,使用Servlet还可以实现大量的服务器端的管理维护功能,以及各种特殊的任务,具体有以下几方面: ( 1)创建并返回一个包含基于客户端请求的动态内容的 HTML页面。 ( 2)创建可嵌入到现有 HTML页面中的 HTML代码片断。 ( 3)与其他服务器资源(包括数据库或基于 Java的应用程序)进行通信。 ( 4)对特殊的处理采用 MIME类型过滤数据。 ( 5)当在允许以单连接方式传送数据的情况下,在浏览器上打开服务器至 Applet的新连接,并将该连接保持在打开状态。在客户机和服务器简单、高效地执行会话的情况下, Applet也可以启动客户浏览器和服务器之间的连接。可以通过定制协议或标准进行通信。 7.1.2Servlet与 JSP的关系 JSP和 Servlet的关系十分密切。由于 JSP是作为一种简化 Servlet开发的替代方法出现的,所有 JSP页面在执行时都被转换为 Servlet并被编译成字节码文件,随后在 Servlet容器中运行,因此人们往往误认为 JSP是一种比Servlet优秀并可以完全替代 Servlet的技术。首先,从技术角度上看, JSP和 Servlet的功能很相似。另外,理论上 JSP和 Servlet也是可以相互替换的。但是,随着学习的深入和在具体项目中应用经验的增加,会发现不能这样简单地比较这两种技术,它们都有各自的优势和适应性。 JSP与 Servlet之间的主要差异在于, JSP提供了一套简单的标签,和 HTML融合得比较好,即使不了解 Servlet的用户也可以通过 JSP创建动态网页。因此,很多对 Java语言不太熟悉的用户会觉得 JSP开发比较方便。 JSP页面修改后可以立即看到效果,不需要手动编译, JSP引擎会自动完成这项工作;而 Servlet需要编译、重新启动 Servlet引擎。 在 Web应用开发中,通常可以将 Servlet用作控制器,用于处理请求,一旦 Servlet完成了请求处理,即可将处理结果转交给 JSP并呈现给用户。由于 JSP的跨平台特性, JSP技术在 Web应用开发领域中愈来愈受人们的青睐,而 JSP、 JavaBean和 Servlet三者的有机结合则提供了一种理想的Web应用解决方案。 7.1.3Servlet的生命周期 Servlet的生命周期定义了一个 Servlet如何被加载、初始化,以及它怎样接收请求、响应请求、提供服务。 Servlet部署在容器里,它的生命周期由容器管理。 Servlet的生命周期可以概括为以下几个阶段: 1.加载 Servlet 2.初始化 3.处理客户请求 4.卸载 Servlet 下面给出 Servlet整个生命周期过程的 UML时序图。 7.1.4常用的 Servlet API Java Servlet API是用于处理客户端与服务器之间请求和响应的一组 Java编程接口,使用 Servlet API编写 Servlet时,不必关心 Servlet怎样被装载, Servlet运行的服务器环境是什么,或者用来传输数据的协议是什么等,只需使 Servlet可以融合在不同的 Web服务器中。 Java Servlet API由两个软件包组成:一个是对应于 HTTP的javax.servlet.http软件包,另一个则是不对应 HTTP的javax.servlet通用软件包。使用 Servlet进行基于 HTTP协议的Web应用开发时,主要使用 javax.servlet.http包中的类。 Servlet中的 API有很多,这里只介绍一些常用的接口和类,以便对 Servlet框架有一个比较全面的了解。 7.1.4常用的 Servlet API 1.public interface Servlet 2.public abstract class GenericServlet implements Servlet,ServletConfig,java.io.Serializable 3.public abstract class HttpServlet extends GenericServlet implements java.io.Serializable 4.public interface ServletConfig 5.public class ServletException extends Exception 6.public class UnavailableException extends ServletException 7.public interface HttpServletRequest extends ServletRequest 8.public interface HttpServletResponse extends ServletResponse 9.public interface HttpSession 10.public interface ServletContext 11.public interface RequestDispatcher 7.2开发部署 Servlet 虽然前面已经做了很多关于 Servlet的知识讲解,但是要成功运行 Servlet还需要对其进行正确的配置。首先要编写 Servlet类文件,然后将类文件编译成字节码文件,并将字节码文件复制到指定位置,此外还要在 Web部署描述符文件 web.xml中添加相应的配置信息。完成这些工作后,即可通过客户端直接请求 Servlet,或者在 JSP页调用 Servlet。 下面开发并部署一个非常简单的 Servlet实例,运行该 Servlet实例后,浏览器中将显示 “ Hello, Servlet World! ” 字符串。 7.2.1创建 Servlet Servlet实际上就是一个从 HttpServlet继承的类,创建 Servlet就是编写Java源文件并定义一个类。要创建一个 Servlet需要完成以下四个方面的工作: ( 1)声明一个类,该类继承自 HttpServlet类。 ( 2)重载 HttpServlet类的部分方法,如 service()、 doGet()或doPost()方法。 ( 3)通过 HttpServletRequest对象检索表单参数或 URL参数。HttpServletRequest对象以名称 /值形式存储表单参数或 URL参数,可以通过该对象的 getParameter()、 getParameterNames()以及getParameterValues()方法来检索这些参数。 ( 4)通过 HttpServletResponse对象生成 HTTP响应结果。HttpServletResponse对象有一个 getWriter()方法,调用该方法可以返回一个 PrintWriter对象。利用 PrintWriter对象的 print()或 println()方法可以向客户端发送字符串数据流。 7.2.2配置 Servlet 对于每个 Web应用,都可以创建一个部署描述符文件web.xml,该文件应存放在 WEB-INF目录中。在 web.xml中,顶层元素是 ,所有子元素都必须包含在 和 之间。部署 Servlet需要在 web.xml文件中添加两个元素: 元素和 元素。其中, 元素是用来定义 Servlet的,而 元素则是为 Servlet定义映射路径的。 配置 web.xml的过程如下: ( 1)在 WEB-INF文件夹中新建 web.xml文件。 ( 2)在 web.xml文件中添加如下配置代码: 7.2.3Servlet的运行 在配置环境变量后,需要重新启动 Tomcat服务器,然后在浏览器中输入 “ http:/localhost:8080/useServ/FirstServlet”。 7.3Servlet调用 创建并部署一个 Servlet后 ,就可以在 HTML页面、 JSP页面或另一个 Servlet中调用它了。 7.3.1Servlet调用方式 Servlet的调用方式主要有以下几种: 1.通过表单提交调用 2.通过超链接调用 3.通过 sendRedirect()方法重定向到 Servlet 4.使用 RequestDispatcher对象 7.3.2Servlet与 HTML的交互 当把 HTML表单元素的 action属性设置为一个 Servlet时,在该 Servlet中就可以通过调用 HttpServletRequest对象的 getParameter()方法来获取提交的数据了。当调用 getParameter()方法时,应该将表单控件的名称作为参数传递给该方法。不论表单元素的 method属性是 get还是 post,对请求的处理方法是一样的。若一个表单变量可能对应多个值,可以使用getParameterValues()方法来代替 getParameter()方法。 在实际应用中, Servlet可能只会用到那些已知名称的表单变量,但在调试环境中,获得完整的表单变量名往往非常有用,通过调用getParamerterNames()方法可以很容易地达到这个目的。getParamerterNames()方法返回的是一个包含表单变量名称的枚举变量,将其中的每一项作为参数来调用 getParameter()方法,即可获得相应表单变量的值。 在 Servlet中,既可以处理 GET请求,又可以处理 POST请求。只需要在doPost()方法中调用 doGet()方法,或者重载 service()方法并通过service()方法来调用 doGet()、 doPost()、 doHead()等方法即可。 7.4使用 Eclipse创建 Servlet实例 前面介绍的 Servlet都是使用文本创建的,下面通过实例介绍如何使用Eclipse工具进行 Servlet的开发。 本实例具体内容见教材 164-172页。 本 章 小 结 Servlet技术是目前流行的开发模式 MVC的基础,而 JSP技术就是基于 Java Servlet的。本章主要介绍了 Servlet技术及其在 JSP中的应用。通过本章的学习,应该对 Servlet有一个初步的认识,并会进行简单的开发部署。另外,通过最后一节的学习,应该学会使用 Eclipse帮助开发 Servlet。 第 8章 JSP高级开发 JSP的应用中,除了基本的语法外,还可以使用一些高级技术,如 Ajax、 Struts等。 8.1Ajax Internet的快速发展使人们越来越享受Web带来的各种便利。从最初的静态网站,到今天商业化的主流动态网站,Web跨越了传统媒体的时空束缚,使得信息传递在速度和范围等方面产生了革命性的飞跃。与此同时,支持 Web 2.0技术的 Ajax技术也得到更加广泛的应用。 8.1.1Ajax介绍 Ajax( Asynchronous JavaScript and XML,异步 JavaScript和 XML)是一种 Web应用程序开发的手段,其第一个字母 A的意思是使用异步方式调用,采用回调方式处理数据,会让用户感觉到桌面软件处理方式的便利。除此之外, Ajax还能使网站可以从不同的来源收集信息,然后把信息无缝地呈现在浏览者面前。 Google、 Gmail、 Orkut等都应用了这项技术。目前, Ajax应用最广泛的领域是 GIS Map方面。 GIS的区域搜索强调快速响应, Ajax的特点正好符合这种需求。 Ajax由 XHTML、 CSS、 JavaScript、 XML、 XMLHttpRequest、 XSTL和DOM等组成。其中,使用 XHTML和 CSS实现标准化呈现,使用 DOM实现动态显示和交互,使用 XMLHttpRequest对象进行异步数据读取,使用JavaScript绑定和处理所有数据。在 Ajax涉及的七项技术中, JavaScript、XMLHttpRequest、 DOM和 XML的应用更为广泛。 使用 Ajax的最大优点是能在不刷新整个页面的前提下维护数据,这使得Web应用程序能更加迅速地与用户进行交互,并避免在网络上重复发送没有改变的信息。 Ajax不需要任何浏览器插件,但需要用户允许 JavaScript在浏览器上执行,就像DHTML应用程序那样, Ajax应用程序必须在众多不同的浏览器和平台上进行严格的测试。随着 Ajax的成熟,一些简化 Ajax使用方法的程序库也相继问世。同时,也出现了另一种辅助程序设计的技术,为那些不支持 JavaScript的用户提供替代功能。 Ajax也存在一些缺点,它可能破环浏览器后退按钮的正常行为,即在动态更新页面的情况下,用户无法回到前一个页面状态。用户通常会希望单击后退按钮取消其前一次操作,但是在 Ajax应用程序中,这是无法实现的,因为浏览器只能记忆历史记录中的静态页面。一个被完整读入的页面与一个已经被动态修改过的页面之间的差别非常微妙,开发者们提出了种种方法来解决这个问题,大多数都是在用户单击后退按钮访问历史记录时,通过创建或使用一个隐藏的 IFRAME来实现页面上的变更。 8.1.2传统 Web开发模式与基于Ajax开发模式 传统的 Web应用允许用户填写表单,当提交表单时就向 Web服务器发送一个请求。服务器接收并处理传来的表单,然后返回一个新的网页。这种做法浪费了许多带宽,因为前后两个页面中的大部分 HTML代码往往是相同的。由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间。这导致了用户界面的响应比本地应用慢得多,严重地超出响应时间时,服务器甚至会提示页面不能用。另外,有时如果只是想要改变页面的一小部分数据,重新加载整个页面显得过于复杂。当软件设计越来越讲究人性化的时候,这种弊端就越来越明显。为解决这些问题,现在除了程序设计、编码优化和服务器调优之外,还可以使用 Ajax。 与传统的 Web应用不同, Ajax采用异步交互过程。 Ajax在用户与服务器之间引入一个中间媒介,从而消除了网络交互过程中的处理 等待 处理 等待的缺点,即相当于在用户和服务器之间加了一个中间层,使用户操作和服务器响应异步。这样把以前的一些由服务器负担的工作转嫁到客户端,利用客户端闲置的处理能力来处理,减轻服务器和带宽的负担,从而达到节约 ISP的空间和宽带租用成本的目的。 用户的浏览器在执行任务时即装载了 Ajax引擎。 Ajax引擎用 JavaScript语言编写,通常位于一个隐藏的框架中,它负责编译用户界面及与服务器之间的交互。 Ajax引擎允许用户与应用软件之间的交互过程异步,独立于用户与网络服务器间的交流。现在,可以用JavaScript调用 Ajax引擎来代替产生一个 HTTP的用户动作,内存中的数据编辑、页面导航、数据校验这些不需要重新载入整个页面可以交给 Ajax来执行。 传统 Web和 Ajax的工作原理如 下图 所示。 8.1.3Ajax用到的技术 Ajax涉及到的七项技术中, JavaScript、 XMLHttpRequest、 DOM、 XML比较常用,下面具体介绍。 1.JavaScript JavaScript一直被定位为客户端的脚本语言,应用最多的地方是表单数据的校验。现在,可以通过 JavaScript操作 XMLHttpRequest来跟数据库打交道。 2.XMLHttpRequest Ajax一个最大的特点是不需要刷新页面就可以向服务器传输或读写数据,而这一功能的实现得益于 XMLHttp组件的 XMLHttpRequest对象。通过这个对象,可以像桌面程序一样,只同服务器进行数据层面上的交换,不用每次都刷新界面,也不用每次都将数据处理的工作提交给服务器,这样既减轻了服务器的负担,又加快了响应速度,缩短了用户等待的时间。 由于 JavaScript具有动态类型特性,而且 XMLHttpRequest在不同的浏览器上的实现是兼容的,所以可以用同样的方式访问 XMLHttpRequest实例的属性和方法,而不用考虑这个实例创建的方法是什么。 8.1.4Ajax框架 创建 Ajax页面时 ,会存在大量的重复性代码,如处理服务器端的返回信息等,为了节省开发 Ajax的时间和精力,可以将重复性的 Ajax代码封装成组件,这就是 Ajax的框架。与很多优秀技术一样, Ajax已经产生了大量的框架,有了这些框架,开发人员开发 Ajax代码就会节省大量的时间和精力。 Ajax框架有很多,有的基于客户端,有的基于服务器端,有的专门为特定语言设计,还有的与语言无关。 现在国内常用的 Ajax框架主要可以分为基于浏览器和基于服务器端两种类型。基于浏览器的应用框架一般分为以下两种: ( 1) Application frameworks:提供浏览器功能,但其最常用的作用是通过窗口生成组件建立桌面 GUI。 ( 2) Infrastructural frameworks:提供基本的框架功能和轻便式浏览器端操作,让开发者去创建具体应用, 常用的 Ajax框架有 DWR、 Buffalo、 prototype、 qooxdoo、dojo、 YUL、 Google Web Toolkit和 LINB。 8.2Struts 实现一个 Web应用的发布要经历许多过程,包括分析、设计、建立模型、编码、测试以及最终的发布。其中,设计是一个非常重要的过程,一个好的设计可以使开发人员尽可能早发现存在的问题,并使 Web应用的维护和修改更加容易。 在 J2EE中, Servlet在处理请求和响应方面非常出色,但是不适合用户表示层 ,JSP页面可以有效地处理内容的生成,但不适合处理业务逻辑。因此,深入地了解 Servlet、 JSP页面、 JavaBean和 JSP标签等组件在 Web应用中所处的位置、最适合完成的任务等,是非常必要的,这就是设计模式的主要作用。 MVC就是一种典型的 Web设计模式。 Struts是一个基于 Sun J2EE平台的 MVC框架,主要是采用 Servlet和 JSP技术实现。 Struts把 Servlet、 JSP、自定义标签和信息资源整合到一个统一的框架中,开发人员利用其进行开发时,不需要自己编码实现全套 MVC模式,从而大大节省了开发时间。 8.2.1MVC和 Struts MVC( model-view-controller,模型 视图 控制器)是建立 Smalltalk应用的框架。 MVC设计模式将软件系统分解成视图、模型和控制器三部分。 ( 1)视图:视图代表用户交互界面,对于 Web应用来说,可以概括为HTML界面,但是也可以是 XML或 Applet。视图可以访问模型的读方法,但不能访问其写方法。此外,它对控制器一无所知。当更改模型时,视图应得到通知。 ( 2)模型:模型是业务流程 /状态的处理,以及业务的逻辑功能。业务逻辑的处理过程对其他层来说是透明的,模型接收视图请求的数据,并返回最终的处理结果。模型包含应用程序的核心功能,它封装了应用程序的状态。有时模型包含的唯一功能是状态,它对视图或控制器一无所知。 ( 3)控制器:控制器接收用户请求,将模型和视图匹配在一起,共同完成用户的请求。当控制器接收一个用户请求时,它使用与之相关的视图提供的适当信息去修改模型,而当模型改变时,它通知所有的视图,以便更新视图的显示。 模型、视图与控制器的分离,使得一个模型可以具有多个显示视图,如果用户通过某个视图的控制器改变了模型的数据,所有其他依赖于这些数据的视图都应反映这些变化。因此,无论发生了什么变化,控制器都会将变化通知所有的视图更新显示。 MVC架构中模型、视图和控制器三者之间的关系和各自的主要功能如 下图 所示。 7.3.1Servlet调用方式 Struts是一个 Web Framework(框架)。 Struts Framework是 MVC模式的体现,下面就分别从模型、视图和控制器分析Struts Framework的体系结构( architecture)。 Struts Framework的体系结构响应客户请求的时候,各个部分的工作原理如 下图 所示。 8.2.2Struts Framework核心组件 整个 Struts大约有 15个包,近 300个类组成,而且数量还在不断扩展。下面列出了目前 Struts API中基本的几个组件包,包括 ActionServlet、ActionClass、 ActionForm、 ActionMapping、 ActionForward、AcctionError和 Struts标签库。 本实例具体内容见教材 186-189页。 8.2.3Struts的安装和配置 Struts现在最新的版本是 2.0, Struts 2.0主要采用了 WebWork的内核,使得 Struts框架更加具有竞争性,但是 Apache公司同时也没有放弃 Struts 1.1版本的发展。现在大多数开发人员仍然使用 Struts 1.1,因此本节将介绍 Struts 1.1的安装和配置。 Struts的官方下载地址是 http:/S。下载后得到一个 ZIP包,解压缩后会有 apps、 lib、 src和 doc四个文件夹,其中 lib文件夹中包含使用 Struts创建应用程序所需的文件, apps文件夹下包括一些 WAR文件,提供了一些使用 Struts的应用示例。 在配置 Sturts时,需要将 lib文件夹下面的全部文件复制到 Tomcat安装目录的 webappsWEB-INFlib目录下。如果要查看 Struts的示例,可以将apps文件夹以及其下面的 WAR文件复制到 Tomcat目录下,然后重新启动Tomcat,打开浏览器,在地址栏中输入 “ http: /localhost:8080/Strutsexample/index.jsp” ,就可以看到 Struts的示例了。 8.2.4Struts标签库 Struts提供了 HTML、 Bean、 Logic、 Template和 Nested五个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 田径三级裁判考试题库及答案
- 第1课 中华文明的起源与早期国家
- 中学校长在2025年秋季学期开学典礼上致辞:在时光里耕耘在成长中绽放
- 2025年高级保育师模考试题(含参考答案)
- 2025年高等数学的考察与解题试题及答案
- 中职美术基础题库及答案
- 万达物业出租管理办法
- 专项保护基金管理办法
- 碳减排贷款管理办法
- 社区楼门长管理办法
- 2025届四川眉山中考历史真题试卷【含答案】
- 2024北京北师大实验中学高二10月月考数学试题及答案
- 子宫腺肌症术后护理查房
- 在制品生产车间管理制度
- 学校口腔健康知识讲座
- 子公司运营规范管理制度
- 医疗美容手术管理制度
- 道路绿化修剪合同范本
- T/CSPSTC 75-2021微动探测技术规程
- 城市轨道交通工程测量技术培训课件
- 2025年数据分析师初级考试试题及答案
评论
0/150
提交评论