1、1 Web层层 Web层设计中的问题与指南层设计中的问题与指南 Web应用程序部署应用程序部署 客户端客户端5.显示层技术显示层技术25.5.1 Web1 Web层层WebWeb层的工作就是接收来自于层的工作就是接收来自于HTTPHTTP客户端客户端的输入,将收到的输入交给内部的业务逻辑进的输入,将收到的输入交给内部的业务逻辑进行处理,然后将结果通过行处理,然后将结果通过HTTPHTTP协议送回客户端。协议送回客户端。5.显示层技术显示层技术WebWeb层层在基于在基于InterentInterent的分布式应用框架中,显示的分布式应用框架中,显示层一般由层一般由WebWeb层和客户端两部分组
2、成。层和客户端两部分组成。3HJSP文件:从文件:从HTTP的请求中提取参数,调的请求中提取参数,调用相应的业务逻辑,处理用相应的业务逻辑,处理HTTP会话,最后会话,最后生成生成HTTP文档。总的看来,这个模型的好文档。总的看来,这个模型的好处是简单,但是它把业务逻辑和表现混在一处是简单,但是它把业务逻辑和表现混在一块,对大应用来说,这个缺点是令人容忍不块,对大应用来说,这个缺点是令人容忍不了的。了的。 n 两种模型两种模型浏览器浏览器数据库数据库BeanJSP文件文件5.显示层技术显示层技术WebWeb层层4HMVC模式模式(Model/View/Controller) 5.显示层技术显示
3、层技术WebWeb层层F 定义:定义:MVCMVC是一个设计模式,它强制性的使应是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。用程序的输入、处理和输出分开。 视图:用户看到并与之交互的界面。对老式视图:用户看到并与之交互的界面。对老式的的WebWeb应用程序来说,视图就是由应用程序来说,视图就是由HTMLHTML元素组元素组成的界面,在新式的成的界面,在新式的WebWeb应用程序中,还包括应用程序中,还包括MacromediaMacromediaFlashFlash和象和象XHTMLXHTML,XML/XSLXML/XSL,WMLWML等一些标识语言和等一些标识语言和WebWeb
4、servicesservices。 5 模型:表示企业数据和业务规则。在模型:表示企业数据和业务规则。在MVCMVC的的三个部件中,模型拥有最多的处理任务。被三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,即模型与数据格模型返回的数据是中立的,即模型与数据格式无关。式无关。 5.显示层技术显示层技术WebWeb层层 控制器:接受用户的输入,根据请求决定调控制器:接受用户的输入,根据请求决定调用模型构件去处理请求,然后确定用哪个视用模型构件去处理请求,然后确定用哪个视图来显示模型处理返回的数据。图来显示模型处理返回的数据。 67F 为什么要使用为什么要使用 MVCMVC5.显示层技
5、术显示层技术WebWeb层层 多个视图能共享一个模型。由于多个视图能共享一个模型。由于MVCMVC已经将数已经将数据和业务规则从表示层分开,无论用户想要据和业务规则从表示层分开,无论用户想要FlashFlash界面或是界面或是WAPWAP界面界面, ,用一个模型就能处理用一个模型就能处理它们它们, , 可以最大化的重用代码可以最大化的重用代码 。 模型返回的数据没有进行格式化,所以同样模型返回的数据没有进行格式化,所以同样的构件能被不同界面使用。的构件能被不同界面使用。 85.显示层技术显示层技术WebWeb层层由于运用由于运用MVCMVC的应用程序的三个部件是相互的应用程序的三个部件是相互对
6、立,改变其中一个不会影响其它两个,对立,改变其中一个不会影响其它两个,所以依据这种设计思想能构造良好的松偶所以依据这种设计思想能构造良好的松偶合的构件。合的构件。可以使用控制器来联接不同的模型和视图可以使用控制器来联接不同的模型和视图去完成用户的需求,这样控制器可以为构去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。造应用程序提供强有力的手段。9F MVCMVC的缺点的缺点 使用使用MVCMVC需要精心的计划,花费相当可观的时需要精心的计划,花费相当可观的时间去考虑如何将间去考虑如何将MVCMVC运用到应用程序,同时运用到应用程序,同时由于模型和视图要严格的分离,这样也给调由于
7、模型和视图要严格的分离,这样也给调试应用程序到来了一定的困难。试应用程序到来了一定的困难。 所以使用所以使用MVCMVC同时也意味着要管理比以前更多同时也意味着要管理比以前更多的文件,增加了工作量。的文件,增加了工作量。5.显示层技术显示层技术WebWeb层层105.显示层技术显示层技术WebWeb层层 MVC MVC设计模式是一个很好创建软件的途径,设计模式是一个很好创建软件的途径,但是如果要隔离模型、视图和控制器的构件,则但是如果要隔离模型、视图和控制器的构件,则要重新思考应用程序,尤其是应用程序的构架。要重新思考应用程序,尤其是应用程序的构架。 MVCMVC并不适合小型甚至中等规模的应用
8、程并不适合小型甚至中等规模的应用程序,花费大量时间将序,花费大量时间将MVCMVC应用到规模并不是很大应用到规模并不是很大的应用程序通常会得不偿失。的应用程序通常会得不偿失。 11H交付应用的功能到交付应用的功能到Web之上:应用设计通之上:应用设计通常将业务逻辑从数据显示中分离出来。常将业务逻辑从数据显示中分离出来。Web层为后端应用模型中的业务逻辑(可层为后端应用模型中的业务逻辑(可以被其它类型的客户端共享访问),接收以被其它类型的客户端共享访问),接收HTTP输入并产生输入并产生HTTP输出。输出。n Web层的功能层的功能5.显示层技术显示层技术WebWeb层层12H动态内容创建:动态
9、内容创建:Web层组件为产生动态层组件为产生动态Web内容来设计的。内容来设计的。Servlets和和JSP页面可以基页面可以基于用户的输入与上下文将来自于多种源的数于用户的输入与上下文将来自于多种源的数据格式转化为任意的数据格式。据格式转化为任意的数据格式。H屏幕流程:由于屏幕流程往往对应到特定的客屏幕流程:由于屏幕流程往往对应到特定的客户端的动作,因此决定下一屏幕(也即哪个页户端的动作,因此决定下一屏幕(也即哪个页面)应该显示什么的逻辑一般驻留在面)应该显示什么的逻辑一般驻留在Web层。层。5.显示层技术显示层技术WebWeb层层13H数据表示和输入收集:数据表示和输入收集:Web层和层和
10、Web客户端客户端进行通讯以使得格式化代码的进行通讯以使得格式化代码的Web文档自然文档自然就属于就属于Web层。其次,用户的输入以层。其次,用户的输入以HTTP的的PUT和和GET动作到达动作到达Web层,层,Web层收到层收到这些动作即将其翻译为某种形式(经常是某这些动作即将其翻译为某种形式(经常是某种形式的命令对象)以便其余的应用可以理种形式的命令对象)以便其余的应用可以理解。解。5.显示层技术显示层技术WebWeb层层14H状态管理:状态管理:Web层有一个简单的、灵活的机制层有一个简单的、灵活的机制用来在一个用户的会话期间积聚相应的事务型用来在一个用户的会话期间积聚相应的事务型数据和
11、上下文数据。数据和上下文数据。H协议转换:协议转换:EJB 服务器、数据库、服务器、数据库、EIS层资源层资源管理器和其它的网络资源都有它们自己的协议。管理器和其它的网络资源都有它们自己的协议。Web层作为一个软件层,把来自于其它协议的层作为一个软件层,把来自于其它协议的请求和应答翻译为请求和应答翻译为HTTP形式,或者,把形式,或者,把HTTP请求和应答翻译成其它协议的形式。请求和应答翻译成其它协议的形式。5.显示层技术显示层技术WebWeb层层15H对多种潜在的客户端类型的支持:对多种潜在的客户端类型的支持:Web使用使用HTTP协议来传送数据给客户端,数据通过协议来传送数据给客户端,数据
12、通过MIME类型(一种扩展的内容分类机制)来类型(一种扩展的内容分类机制)来描述。任何描述。任何HTTP形式的客户端都能够加入形式的客户端都能够加入一个一个Web应用,且此客户端能够使用可以下应用,且此客户端能够使用可以下载内容的任意类型,即使内容的类型还未存载内容的任意类型,即使内容的类型还未存在。在。5.显示层技术显示层技术WebWeb层层16J2EEJ2EE的的WebWeb层技术提供了服务器的扩展机制,层技术提供了服务器的扩展机制,该机制提供了一种基于服务器端脚本设计所带该机制提供了一种基于服务器端脚本设计所带来的好处,并且采用的是一种标准的、安全的、来的好处,并且采用的是一种标准的、安
13、全的、厂商中立的方法。厂商中立的方法。WebWeb应用及支持它的应用及支持它的WebWeb层技层技术包括术包括Web Web 档案(档案(archivearchive)、)、WebWeb层组件模型、层组件模型、servletsservlets, JSP , JSP 及及J2EEJ2EE的的Web Web 容器。容器。n Web层层技术技术5.显示层技术显示层技术WebWeb层层17HWeb档案:对一个档案:对一个Web应用的打包和部署之应用的打包和部署之单元称之为一个单元称之为一个Web档案(档案(Web archive,以以“.war”作为文件名的结尾),此文件包作为文件名的结尾),此文件包
14、含当前含当前Web应用的所有类文件与资源,应用的所有类文件与资源,Web档案也包含一个配置该应用的部署描述器文档案也包含一个配置该应用的部署描述器文件。件。5.显示层技术显示层技术WebWeb层层18HWeb容器:一个容器是位于服务器里面的类容器:一个容器是位于服务器里面的类之集合,它们相互合作以管理组件实例的生之集合,它们相互合作以管理组件实例的生命周期并对那些实例提供数据和服务。命周期并对那些实例提供数据和服务。 J2EE规范定义了一个在规范定义了一个在Web容器与每一容器与每一Web组件之间的约定契约,用以定义组件组件之间的约定契约,用以定义组件的生命周期、组件必须实现的行为、以及服的生
15、命周期、组件必须实现的行为、以及服务器必须提供给该组件的服务。务器必须提供给该组件的服务。5.显示层技术显示层技术WebWeb层层19F WebWeb容器的作用:容器的作用: 分发服务请求:容器分发服务请求给它所包分发服务请求:容器分发服务请求给它所包含的组件,将上下文数据(如会话数据与当含的组件,将上下文数据(如会话数据与当前请求的信息)提供给组件,并且协调该组前请求的信息)提供给组件,并且协调该组件响应内容的产生。件响应内容的产生。 HTTPHTTP请求的应答:对于请求的应答:对于URLURL的的HTTPHTTP请求翻译成请求翻译成对组件实例的调用,并将基于组件所产生的对组件实例的调用,并
16、将基于组件所产生的内容生成相应的内容生成相应的HTTPHTTP应答。应答。5.显示层技术显示层技术WebWeb层层20 组件生命周期的管理:组件生命周期的管理:WebWeb容器通过回叫容器通过回叫(callbackcallback)的方式来通知组件的状态变化)的方式来通知组件的状态变化如实例初始化和消亡,实现对其组件的生命如实例初始化和消亡,实现对其组件的生命周期管理。周期管理。5.显示层技术显示层技术WebWeb层层21ServletServlet是一种是一种JavaJava平台服务器端扩展组件,平台服务器端扩展组件,它运行在一个它运行在一个WebWeb容器的里面。容器的里面。在一个在一个W
17、eb应用应用中,每一中,每一Servlet的类都被映射成的类都被映射成Web服务器中服务器中的一个或多个的一个或多个URL地址。当服务器接收到对某地址。当服务器接收到对某个个servlet的的URL的一个的一个HTTP请求(请求(GET, POST等)的时候,服务器调用相应的等)的时候,服务器调用相应的servlet的服务方法(的服务方法(service()),该方法产生此应答),该方法产生此应答的动态内容。的动态内容。 n ServletServlet5.显示层技术显示层技术WebWeb层层22HServlets特点特点F Servlets采用采用Java来书写,因此能够运行来书写,因此能够
18、运行在一个内嵌在在一个内嵌在Web Server里面的里面的JVM实例实例之上。之上。F Servlets通常比通常比CGI程序或脚本要快,因为程序或脚本要快,因为它们运行的形式是编译过的字节码,取代的它们运行的形式是编译过的字节码,取代的是一个笨重的进程或一个解释脚本。是一个笨重的进程或一个解释脚本。 5.显示层技术显示层技术WebWeb层层23F Servlets比扩展库要安全,因为比扩展库要安全,因为JVM实例通实例通常可以恢复一个非正常退出的常可以恢复一个非正常退出的servlet 。F 与服务器端脚本技术相比,与服务器端脚本技术相比,servlets的移植性的移植性更好,并且它所提供
19、的是一个更为丰富的标准更好,并且它所提供的是一个更为丰富的标准服务的集合。服务的集合。5.显示层技术显示层技术WebWeb层层24F 由于由于Java平台所固有的运行时的可移植性,平台所固有的运行时的可移植性,编译过的编译过的servlet类具备二进制形式的跨硬件类具备二进制形式的跨硬件平台的移植性;平台的移植性; servlet与其容器之间的契与其容器之间的契约由约由Java Servlet规范予以定义并且由规范予以定义并且由J2EE兼容测试包检验过(在一个兼容测试包检验过(在一个J2EE品牌品牌的产品里),因此的产品里),因此servlets也可以跨也可以跨Web服服务器兼容。务器兼容。5
20、.显示层技术显示层技术WebWeb层层25F Servlet开发人员可以创建能在所有开发人员可以创建能在所有J2EE品牌品牌服务器上正确运行的产品,服务器上正确运行的产品,J2EE服务器用户可服务器用户可以更换技术厂商而只做很小的甚至根本就不需以更换技术厂商而只做很小的甚至根本就不需要更改它们的应用代码。要更改它们的应用代码。F 打包和部署打包和部署servlets(及其它的(及其它的Web层组件和层组件和资源)的规范化和标准化,确保了一个资源)的规范化和标准化,确保了一个Web应应用不用作任何代码修改或重建,就可以作为一用不用作任何代码修改或重建,就可以作为一个单独的单元部署到任何个单独的单
21、元部署到任何J2EE品牌的服务器里品牌的服务器里面。面。 5.显示层技术显示层技术WebWeb层层26HServlet存在的问题存在的问题F Servlets Servlets 写起来比较冗长:写起来比较冗长:很多产生很多产生HTML的的servlets比起比起Web页面要长一些,它带有以页面要长一些,它带有以System.out.println()环绕的每一行、在每一环绕的每一行、在每一个双引号之前都有反斜线符号、并且可能一块个双引号之前都有反斜线符号、并且可能一块逻辑或这里和那里的重述。这样的逻辑或这里和那里的重述。这样的servlets写写起来比较烦闷,而且读和维护都是比较困难的。起来比
22、较烦闷,而且读和维护都是比较困难的。5.显示层技术显示层技术WebWeb层层27F Servlets Servlets 是程序:是程序:对于所有的哪怕是最简单对于所有的哪怕是最简单的情况,的情况,servlets都需要编程人员来开发和都需要编程人员来开发和维护。程序员不必熟悉图形设计,图形设计维护。程序员不必熟悉图形设计,图形设计人员经常不是程序员。联合编程逻辑和先进人员经常不是程序员。联合编程逻辑和先进的可视化设计的的可视化设计的servlets对于程序员和图形对于程序员和图形设计人员来讲,更改起来都是比较困难的。设计人员来讲,更改起来都是比较困难的。5.显示层技术显示层技术WebWeb层层
23、28F Servlet Servlet 代码不易重用:基于代码不易重用:基于HTMLHTML的的WebWeb应应用通常包括大量的重复,很多使用的场合多用通常包括大量的重复,很多使用的场合多次放在一个次放在一个WebWeb应用中,应用中,HTMLHTML页面经常包含页面经常包含重复的样式元素来提供一致的外观和感觉。重复的样式元素来提供一致的外观和感觉。但是但是servletservlet的的APIAPI提供很少对于重用业务或提供很少对于重用业务或显示逻辑的直接支持,结果通常是剪切与粘显示逻辑的直接支持,结果通常是剪切与粘贴式的编码风格牺牲了一致性与可维护性。贴式的编码风格牺牲了一致性与可维护性。
24、5.显示层技术显示层技术WebWeb层层29F ServletsServlets 混合功能代码和显示代码在一起:混合功能代码和显示代码在一起:这种做法限制看起来很小,实际上它往往是这种做法限制看起来很小,实际上它往往是所有其它问题的根源。基本的问题是业务逻所有其它问题的根源。基本的问题是业务逻辑和数据表示基本上是不同的层面,将这两辑和数据表示基本上是不同的层面,将这两者混合在一种单一的技术(既者混合在一种单一的技术(既servletservlet)导)导致的是混淆设计、实现和维护。致的是混淆设计、实现和维护。5.显示层技术显示层技术WebWeb层层30HServlet的建议的建议F 使用使用s
25、ervlets servlets 实现服务:除了产生二进制内实现服务:除了产生二进制内容以外,容以外,servletsservlets一般提供无可视化的功能。一般提供无可视化的功能。一个一个servletservlet可以执行它所提供的服务可以执行它所提供的服务模板模板化、安全、个性化、化、安全、个性化、MVCMVC控制控制然后选择一个然后选择一个显示组件并转交请求给该组件去显示。显示组件并转交请求给该组件去显示。5.显示层技术显示层技术WebWeb层层F 使用使用servletsservlets作为控制器:一个作为控制器:一个WebWeb层控制器,层控制器,用来决定如何处理一个请求并选择下一
26、个要显用来决定如何处理一个请求并选择下一个要显示的视图。示的视图。31n JSPJSP一个一个JSPJSP页面是一个模板文档,其中包含有页面是一个模板文档,其中包含有特殊的标记用来执行内嵌的逻辑。特殊的标记用来执行内嵌的逻辑。JSPJSP页面可以页面可以被用来指定任何类型的动态内容,但是它们主要被用来指定任何类型的动态内容,但是它们主要用来创建结构化的内容(如用来创建结构化的内容(如HTML, XML, XHTML, HTML, XML, XHTML, PDFPDF)。)。5.显示层技术显示层技术WebWeb层层32HJSP特点特点F JSPJSP页面比页面比servletsservlets更
27、容易书写:更容易书写:JSPJSP页面看页面看起来非常象起来非常象HTMLHTML,带有少量的附加标记,没,带有少量的附加标记,没有重复的有重复的printlnprintln()()语句或者也不需要反斜线语句或者也不需要反斜线回退字符回退字符. .5.显示层技术显示层技术WebWeb层层33F JSPJSP页面不需要编程技能:页面不需要编程技能:JSPJSP页面看起来很页面看起来很象它生成的文档类型,文档格式的专家可以象它生成的文档类型,文档格式的专家可以不是一个程序员即可以直接编辑之。任何实不是一个程序员即可以直接编辑之。任何实际的编程或多或少地从显示代码中分离出来,际的编程或多或少地从显示
28、代码中分离出来,因此程序员和文档格式专家可以相对独立地因此程序员和文档格式专家可以相对独立地进行工作进行工作. .5.显示层技术显示层技术WebWeb层层34F JSP JSP 页面支持代码的重用:页面支持代码的重用:JSPJSP页面有显式代页面有显式代码重用机制。在一码重用机制。在一JSPJSP页面里面有一些特殊的页面里面有一些特殊的标记来使用标记来使用JavaBeansJavaBeans组件,编程人员可为其组件,编程人员可为其特殊的用途来定义可定制标记。特殊的用途来定义可定制标记。JSPJSP标记语言标记语言中的包括指示提供两种文档内容的重用:编中的包括指示提供两种文档内容的重用:编译时和
29、运行时。这些机制可以通过减少重复译时和运行时。这些机制可以通过减少重复代码进而提高代码的质量代码进而提高代码的质量. .5.显示层技术显示层技术WebWeb层层35F JSP JSP 页面将功能从显示中分离开来:页面将功能从显示中分离开来:JSPJSP页面页面格式是一针对某一文档的模板,其中带有业格式是一针对某一文档的模板,其中带有业务逻辑,该逻辑要么嵌在务逻辑,该逻辑要么嵌在JSPJSP页面中的特殊标页面中的特殊标记里(作为脚本元素),要么采用记里(作为脚本元素),要么采用beansbeans或可或可定制标记。分离功能(业务逻辑)与形式定制标记。分离功能(业务逻辑)与形式(显示)允许程序员和
30、文档作者集中于他们(显示)允许程序员和文档作者集中于他们的核心技能之上。这种对开发角色的划分是的核心技能之上。这种对开发角色的划分是J2EEJ2EE平台的主要优势之一。平台的主要优势之一。5.显示技术显示技术WebWeb层层36H JSP工作流程工作流程 一个一个JSP页面对其作者来说象一个文档,然页面对其作者来说象一个文档,然而而Web容器实际上把容器实际上把JSP页面作为页面作为servlets来实现。在一个来实现。在一个JSP页面可以运行在一页面可以运行在一JVM实例之上时,它必须被转换成(通过一个转实例之上时,它必须被转换成(通过一个转换器)一个换器)一个servlet,该,该serv
31、let然后被编译成然后被编译成一个可以装载的类。一个一个可以装载的类。一个JSP通常直接部署通常直接部署到一个到一个Web容器之中,由容器来处理相应的容器之中,由容器来处理相应的翻译和编译。翻译和编译。5.显示层技术显示层技术WebWeb层层37SessionSession(abstract)(abstract)Java ServletJava ServletImplementationImplementationCodeCode(.java)(.java)Java ServletJava ServletImplementationImplementationClassClass(.class
32、)(.class)Java ServletJava ServletImplementationImplementationObjectObjectSessionSession(actual)(actual)JSPJSPTranslationTranslationToolToolJavaJavaCompilerCompilerJSPJSPContainerContainerResponseResponse(actual)(actual)JSPJSP(.jsp)(.jsp)DevelopDevelopTranslateResponse(abstract)DeveloperResponseRespo
33、nse(abstract)(abstract)CompileActivateDevelopment PhaseDevelopment PhaseResponse(actual)Translation/Translation/Compilation PhaseCompilation PhaseProcessing PhaseProcessing PhaseJSPJSP的工作阶段的工作阶段38H JSPJSP的建议的建议F 使用使用JSPJSP页面作为结构文本内容的模板:页面作为结构文本内容的模板:JSPJSP页页面大多数是用来生成文本的内容通常有一致结面大多数是用来生成文本的内容通常有一致结构的
34、文本。构的文本。JSPJSP页面也被用来产生非结构化的页面也被用来产生非结构化的文本文件。文本文件。 JSPJSP页面通常并不适合于以下的几页面通常并不适合于以下的几种情形:创建二进制内容、激活应用域逻辑、种情形:创建二进制内容、激活应用域逻辑、创建带有高度可变结构的内容、或控制请求路创建带有高度可变结构的内容、或控制请求路由等等。由等等。5.显示层技术显示层技术WebWeb层层39F 避免对逻辑标记的大量使用:标准标记库通避免对逻辑标记的大量使用:标准标记库通常提供一些逻辑标记用来循环、执行迭代、常提供一些逻辑标记用来循环、执行迭代、评估表达式、作出决定等。应该意识到使用评估表达式、作出决定
35、等。应该意识到使用标准标记库可以执行标准标记库可以执行JSPJSP页面中很大一部分逻页面中很大一部分逻辑。将逻辑放在程序以外的可定制标记之中辑。将逻辑放在程序以外的可定制标记之中提供的优势较少,并且违背了逻辑和显示的提供的优势较少,并且违背了逻辑和显示的分离原则。分离原则。5.显示层技术显示层技术WebWeb层层40F 正确使用正确使用JSP includeJSP include指示与动作:指示与动作: :include动作允许将或静态的或动态的动作允许将或静态的或动态的内容包含进此内容包含进此JSPJSP页面,指示通常用来模块化页面,指示通常用来模块化WebWeb页面,重用内容,并保持页面,
36、重用内容,并保持WebWeb页面的长度页面的长度可以被管理。如果滥用之,则使代码膨胀。可以被管理。如果滥用之,则使代码膨胀。5.显示层技术显示层技术WebWeb层层41H WebWeb层状态层状态一个一个servletservlet、servletservlet过滤器或过滤器或JSPJSP页面通页面通常创建相应的带有包含在该服务请求中数据的应常创建相应的带有包含在该服务请求中数据的应答,不过经常需要来自于其它源的数据来处理它答,不过经常需要来自于其它源的数据来处理它的工作。用来创建一个应答数据的一个的工作。用来创建一个应答数据的一个WebWeb层组层组件称为状态(件称为状态(statestat
37、e)。WebWeb层状态的每一项都有层状态的每一项都有一个范围(一个范围(scopescope),用来决定此项目的访问型),用来决定此项目的访问型及其生命周期。及其生命周期。5.显示层技术显示层技术WebWeb层层42F 应用范围作用域应用范围作用域(Application scope)应用范围状态存贮在应用范围状态存贮在W Web层的层的ServletContext对象中,应用范围中的对象在此应用内所有的对象中,应用范围中的对象在此应用内所有的servletsservlets之间共享,线程安全由之间共享,线程安全由servlet开发人员开发人员负责。应用范围中的状态在应用的生存期间一直负责。
38、应用范围中的状态在应用的生存期间一直存在,除非它被显式地删除。存在,除非它被显式地删除。为一个为一个WebWeb应用的应用的“全局内存全局内存”。5.显示层技术显示层技术WebWeb层层43servlet API提供将数据与一个用户会话关联提供将数据与一个用户会话关联起来的机制,在后续的请求过程中访问或修改此起来的机制,在后续的请求过程中访问或修改此数据。对一个数据。对一个HttpServlet而言的会话范围状态存而言的会话范围状态存贮在贮在WebWeb层的层的HttpSession对象(由该服务方法的对象(由该服务方法的HttpServletRequest参数来提供)之中。参数来提供)之中。
39、是对于特定于某一用户会话的数据。是对于特定于某一用户会话的数据。F 会话范围会话范围(Session scope)5.显示层技术显示层技术WebWeb层层44一个一个WebWeb组件可以读或修改在请求范围内的组件可以读或修改在请求范围内的数据然后转交此请求给另一组件。请求被转交给数据然后转交此请求给另一组件。请求被转交给的组件然后就可以访问到此状态。请求范围内的的组件然后就可以访问到此状态。请求范围内的状态存贮在一个状态存贮在一个ServletRequestServletRequest对象里面,因对象里面,因此它可以被接收该请求的任何组件访问到。此它可以被接收该请求的任何组件访问到。特定于一个
40、单独的服务器请求的数据,当特定于一个单独的服务器请求的数据,当服务方法返回的时候被丢弃。服务方法返回的时候被丢弃。F 请求范围(请求范围(Request scopeRequest scope)5.显示层技术显示层技术WebWeb层层45仅仅适用于仅仅适用于JSPJSP页面,以指示该数据仅在当页面,以指示该数据仅在当前页面的上下文中有效。页面范围状态存贮在一前页面的上下文中有效。页面范围状态存贮在一个个JSPJSP页面的页面的PageContextPageContext对象中。当一个对象中。当一个JSPJSP转转交给或包含另一个的时候,每一个页面定义它自交给或包含另一个的时候,每一个页面定义它自
41、己的范围。页面范围的状态在程序从该页面中退己的范围。页面范围的状态在程序从该页面中退出的时候被丢弃掉。出的时候被丢弃掉。F 页面范围(页面范围(Page scopePage scope)5.显示层技术显示层技术WebWeb层层46F WebWeb层会话状态的优势层会话状态的优势 易于实现:因为应用服务器处理了易于实现:因为应用服务器处理了HttpSessionHttpSession的实现,开发人员从对管理会话状态中所需要的实现,开发人员从对管理会话状态中所需要的设计、实现、测试代码的细节中解脱出来。的设计、实现、测试代码的细节中解脱出来。 优化:一个应用服务器的优化:一个应用服务器的HttpS
42、essionHttpSession的实现的实现是根据它本身作了优化和测试的,因此也许比是根据它本身作了优化和测试的,因此也许比一个客户化的解决方案更为有效、可靠。一个客户化的解决方案更为有效、可靠。 5.显示层技术显示层技术WebWeb层层47 潜在的更丰富的功能集:一个应用服务器对于潜在的更丰富的功能集:一个应用服务器对于会话状态管理的实现可能包括诸如故障恢复、会话状态管理的实现可能包括诸如故障恢复、集群支持等功能,这已超出了集群支持等功能,这已超出了J2EEJ2EE平台规范的平台规范的基本需求。系统架构师可以区分服务器平台所基本需求。系统架构师可以区分服务器平台所提供的功能,并选择出最能适
43、合当前应用需求提供的功能,并选择出最能适合当前应用需求的平台,与此同时维护的平台,与此同时维护J2EEJ2EE技术的兼容性和可技术的兼容性和可移植性。移植性。5.显示层技术显示层技术WebWeb层层48 可移植性:可移植性:HttpSessionHttpSession接口是标准化的,因接口是标准化的,因此在所有的此在所有的J2EEJ2EE品牌的应用服务器中都必须通品牌的应用服务器中都必须通过过J2EEJ2EE兼容性测试包(兼容性测试包(CTSCTS)。)。 可伸缩性:可伸缩性:HttpSessionHttpSession可以有效地管理会话可以有效地管理会话状态的存贮,将它放在缓存和或服务器集群
44、状态的存贮,将它放在缓存和或服务器集群之中。之中。 5.显示层技术显示层技术WebWeb层层49 可进化性(可进化性(EvolvabilityEvolvability):应用服务器厂商):应用服务器厂商会坚持不懈地改善它们的产品及其功能,甚至会坚持不懈地改善它们的产品及其功能,甚至在服务器增加某些提高性能和可靠性功能的时在服务器增加某些提高性能和可靠性功能的时候,它将维护已有的接口以保证兼容性。一个候,它将维护已有的接口以保证兼容性。一个Http SessionHttp Session实现今天能正常工作,明天也将实现今天能正常工作,明天也将工作得更好,因为服务器版本的提升很少或根工作得更好,因
45、为服务器版本的提升很少或根本就不做对源码的修改。本就不做对源码的修改。 5.显示层技术显示层技术WebWeb层层505.2 Web5.2 Web层设计问题及其指南层设计问题及其指南n Web Web层技术选择层技术选择5.显示层技术显示层技术 WebWeb层设计问题及其指南层设计问题及其指南ServletsServlets 和和JSPJSP页面都是页面都是WebWeb层组件,但是层组件,但是在设计中扮演的是不同的角色。在设计中扮演的是不同的角色。XMLXML可以被用来可以被用来作为针对数据互操作性的作为针对数据互操作性的“中心中心”格式,且可以格式,且可以在客户端或服务器端以在客户端或服务器端
46、以CSSCSS或或XSLXSL的风格进行设计。的风格进行设计。51H何时使用何时使用JSPJSP页面:通常,页面:通常,JSPJSP页面大多用来作页面大多用来作为显示组件,在一个为显示组件,在一个MVCMVC应用中扮演应用中扮演ViewView角色,角色,或者用来创建结构化的、非可视化的内容,如或者用来创建结构化的、非可视化的内容,如XMLXML消息。消息。H何时使用何时使用 servletsservlets:ServletsServlets主要用来作为主要用来作为MVCMVC控制器组件,作为框架支持组件(诸如模控制器组件,作为框架支持组件(诸如模板处理器、安全适配器、日志器等等),或者板处理
47、器、安全适配器、日志器等等),或者作为对二进制内容的显示组件。作为对二进制内容的显示组件。5.显示层技术显示层技术 WebWeb层设计问题及其指南层设计问题及其指南52H在交互式在交互式WebWeb应用里面的应用里面的XMLXML:XMLXML可以被使用可以被使用于交互式的应用中。一个于交互式的应用中。一个WebWeb层控制器可以翻层控制器可以翻译译HTTPHTTP请求为对请求为对Web ServiceWeb Service方法的调用,并方法的调用,并能使用能使用CSSCSS、XSLXSL或可定制代码来转换调用的结或可定制代码来转换调用的结果为正在请求的客户端的显示格式。这种方法果为正在请求的
48、客户端的显示格式。这种方法只有在没有更快、更可靠、或更轻量级的方式只有在没有更快、更可靠、或更轻量级的方式去访问应用模型的时候才被建议使用,如直接去访问应用模型的时候才被建议使用,如直接访问底层的企业级访问底层的企业级JavaJava组件。组件。5.显示层技术显示层技术 WebWeb层设计问题及其指南层设计问题及其指南53H Web Web层状态维护层状态维护 状态维护决定对应用性能、可用性、伸缩状态维护决定对应用性能、可用性、伸缩性等有着极大的影响。此类决定包括选择相应性等有着极大的影响。此类决定包括选择相应的层来管理状态,对状态的每一项选择相应的的层来管理状态,对状态的每一项选择相应的作用
49、范围,并且有效地跟踪一分布式环境下的作用范围,并且有效地跟踪一分布式环境下的对话状态。对话状态。5.显示层技术显示层技术 WebWeb层设计问题及其指南层设计问题及其指南54n WebWeb层设计指南层设计指南 可维护性可维护性 客户端独立性及代码重用客户端独立性及代码重用 隔离开发人员的技能集隔离开发人员的技能集H 将业务逻辑从显示逻辑中分离出来:将业务逻辑从显示逻辑中分离出来:5.显示层技术显示层技术 WebWeb层设计问题及其指南层设计问题及其指南55在一个应用设计中创建业务和显示层是一在一个应用设计中创建业务和显示层是一个很好的习惯。业务层只提供应用功能而不会有个很好的习惯。业务层只提
50、供应用功能而不会有对显示的引用,显示层为用户(或另一系统)显对显示的引用,显示层为用户(或另一系统)显示数据与输入提示,委托应用功能给业务层。业示数据与输入提示,委托应用功能给业务层。业务规则能够在一个层中被修改,而对显示层作很务规则能够在一个层中被修改,而对显示层作很少或根本不作修改。应用的显示或工作流程可以少或根本不作修改。应用的显示或工作流程可以改变而不会影响业务逻辑代码。改变而不会影响业务逻辑代码。5.显示层技术显示层技术 WebWeb层设计问题及其指南层设计问题及其指南56H 将协议置于模型将协议置于模型APIAPI之外之外一个模型类应该在一个一个模型类应该在一个WebWeb容器外是