Servlets and JSP Pages Best Practices-译文.doc_第1页
Servlets and JSP Pages Best Practices-译文.doc_第2页
Servlets and JSP Pages Best Practices-译文.doc_第3页
Servlets and JSP Pages Best Practices-译文.doc_第4页
Servlets and JSP Pages Best Practices-译文.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

Servlets和JSP页面的最佳实现 作者:Qusay H. Mahmoud 时间:2003年3月Java Servlet技术和JavaServer Pages(JSP页面) 作为服务端技术,已经占据了Java技术在服务端的市场,他们已经成为开发商业Web应用程序的标准方式。Java开发人员热爱这些技术是有原因的,包括:易于上手,而且带来的是,一次编写,随处运行(这里指可运行在任何安装有JVM平台的机器上)。更重要的是,如果使用下列最佳的做法,Servlets和JSP页面可以有效的将内容和表现相分离,开发高质量,可重复使用的且易于维护的Sevlets和JSP的Web应用程序将是最佳的做法。例如:嵌入Java代码的HTML文件会导致工作效率不够高,难以复用扩展和维护。“最佳实现 ”(指此文章)可以改变这一切。在这篇文章中,我将重要的介绍Servlets和JSP页面的最佳做法。并假设你有这两种技术的基本知识基础。这篇文章包括:概述Java Servlets和JavaServer Pages指示和引导使用Servlets和JSP pages一个好的Servlets和JSP页面的例子概述Servlets和JSP页面类似于CGI(Common Gateway Interface)脚本,servlets提供了请求和响应的程序设计模型。当客户端向服务器发送请求时,服务器把请求发送到servlets。然后由servlets构建一个响应,由服务器发回到客户端。虽然不同于CGI脚本,但是servlet就像HTTP服务器一样运行在同一进程中。当客户端请求时,service 方法被调用同时传递一个请求和响应对象。servlet首先确定该请求是一个GET或者POST操作,然后对应调用doGet或者doPost方法方法之一。如果请求的是GET,doGet方法会被调用;如果请求的是POST,doPost方法会被调用。doGet和doPost都采取请求(HttpServletRequest的)和响应(HttpServletResponse)的。 在最简单的情况下,servlet可以是生成包含输出语句的动态HTML文本的类。对servlets来说最重要的是它是在一个容器中运行的,同时它的APIs提供了会话(session)和对象生命周期的管理。因此,当你使用servlets时,你可以从Java平台得到很多的好处,其中包括沙箱(安全机制),通过JDBC访问数据库的API,和servlets的跨平台可移植性。JavaServer Pages (JSP页面)就像微软的Active Server Pages(ASP)技术,JSP技术是一个开源的、免费的由Sun Microsystems提供的规范,它把servlets抽象到了一个更高的水平,并且成为了J2EE平台的一个关键组件。许多商的应用服务器(比如BEA的WebLogic,IBM的WebSphere,Live 的JRun, Orion,等)都是支持JSP技术的。JSP 页面如何工作的?一个JSP页面基本上就是一个包含传统HTML代码和Java代码的网页。JSP文件的扩展名是.jsp而不是.html或者.htm,用来告诉服务器,这个页面需要由服务器的扩展功能或插件来完成特殊的处理。当一个JSP页面被调用时,它会被JSP引擎编译到一个Java Servlet中。servlet在这一点上就像其它的servlet,是由servlet引擎处理的。Servlet引擎使用类加载器加载servlet类,并执行它来创建动态的HTML发送到浏览器上。此Servlet创建所有必要的对象,把输出流实例化到必要的对象上发送给浏览器。如下图1所示:图 1: 请求/响应流调用一个JSP页面中当下一次请求页面时,JSP引擎会执行已经加载的servlet的JSP页面,除非JSP页面发生了变化,在这种情况下,它会重新编译生成servlet并执行。最佳实践在这一节,我将呈现servlets和JSP页面一个很好的例子,特别是JSP。把JSP页面作为重点仅仅是因为JSP页面似乎更加广泛应用(可能是因为JSP技术提高了从内容到表现的分离)。一个最好的结合并使用了servlets和JSP的例子是Model View Controller (MVC) 设计模式,在本文后面将会讨论。不要在HTML页面中滥用Java代码对非常小的应用程序来说把所有的Java代码直接放在JSP页面中是可以的。但过度使用这一特性将导致你的代码像意大利面条一样难于阅读和理解。一种在HTML页面中减少Java代码的方法是将运算处理同Java类相分离。实例会在这些类被测试时生成。选择恰当的包含机制静态数据,如页眉、页脚和导航栏的内容最好是保存在单独的文件中,而不是再动态生成。一旦这些内容分布在不同的文件中,使用下面的语句可以将它们包含在所有的文件当中:包含指令: 包含动作::当JSP页面被转换为一个servlet时,第一个机制首先包括了分散在文件中的内容(翻译阶段),第二个包括了指定页面后执行响应的生成。如果该文件不是经常变化,我建议使用速度快性能好的include directive(包含指令)。当内容经常改变或者在主页执行之前不能确定是否包含此页面时,使用include action(包含动作)。另一种包含机制是由JSP标准标签库(JSTL)action标签来提供。你可以使用这个标签来从本地和远程数据源来引入或者导入。下面是一些例子:不要把表现和业务逻辑相混淆当涉及更多的代码时,对于高级应用来说,在同一个文件当中把业务逻辑和前端显示相分离是非常重要的。把业务逻辑从前面显示中分离出来,当业务逻辑改变时就不会影响到其它的方面。这样,编写的JSP代码应仅限于前端的显示。那么如何实现业务逻辑的一部分呢?这就是JavaBeans技术的用武之地。这种技术是一种便携式的、平台独立的组件模型,它允许开发人员编写组件然后在任何地方复用。包含业务逻辑的JavaBeans组件将数据返回到JSP页面的脚本上,在JSP页面中以一定的数据格式从JavaBeans组件中返回或者将数据显示在浏览器上。JSP页面通过JavaBeans组件提供的获得和设置属性配置来使用。利用JavaBeans组件来增加JSP页面的好处是:组件复用:不同的应用程序可以对组件进行复用。将业务逻辑和表现逻辑相分离:你可以改变数据的显示而不需要影响到业务逻辑。换句话说,Web页面设计者可以专注于显示而Java开发人员可以专注于业务逻辑。通过保护源代码的安全来保护你的知识产权。如果你的应用程序使用了你的EnterpriseJavaBeans(EJB)的组件,那么业务逻辑应该留在EJB组件中,由它来提供生命周期的管理、事务支持、多客户端访问域对象(Entity Bean)( 实体Bean)。更多细节请参考Enterprise BluePrints。使用自定义标签:HTML文件(或脚本程序)中嵌入Java代码的的位置可能不适合所有的HTML开发商,或许是因为他们不了解或者不关心Java语言的语法。虽然JavaBeans组件可以用来封闭Java代码,对开发人员来说,在JSP页面中使用它们仍然需要有一些对Java语法的知识。JSP技术允许你通过标签库功能引入自定义标签。作为一个Java开发人员,你可以通过引入自定义标签来扩展JSP页面,就像HTML语法中已经开发和使用的一样。自定义标签还允许您把业务逻辑和表示逻辑更好的分离封装以进行改善。此外,提供了一种由JSTL不容易完成的自定义显示的方法。自定义标签的好处有:可以消除你的JSP应用程序中的scriptlet。任何必要的标签参数可以通过属性或者文本内容进行传递,就是说不需要Java代码来初始化和设置组件属性。简单的语法。脚本程序是用Java代码编写的,但是自定义标签可以像HTML的语法一样使用。让他们来完成HTML不能完成的任务,可提高非程序员开发内容的的效力。可重用。节省了开发和测试时间。脚本程序是不可重用的,除非你把“复制和粘贴”叫做重用。总之,你可以像使用HTML创建示图一样以同样的方式使用自定义标签来完成相同复杂的任务。当编写自定义标签库时下面的编程指南是很方便的:保持简洁:如果一个标签需要很多属性,试着把它分解成几个标签。让它可用:向标签使用者(HTML开发人员)咨询请教,以达到高度的可用性。不要在JSP页面中创造一个编程语言:不要开发允许用户编写开发方案的自定义标签。不要再创造已有的:有一些可用的JSP标签库,如Jakarta Taglibs项目。检查你需要的是不是现成的。不要做无用功:虽然自定义标签提供了重用有价值的组件的方法,他们仍然需要创建,测试和调试。此外,可能是因为这并不是最有效的方案,开发人员仍然还要一遍又一遍再重新开发相同的功能。JSTL通过提供一个可重复使用的标准标签解决了这个问题。JSTL定义了一个在任何地方作用都一样的标准的标签库,因而你再也不用通过使用scriptlet(或者众多厂商的迭代标签)来迭代集合。JSTL的标签包括循环、阅读没有Java语法的属性、对各种数据结构进行迭代、有条件表达式的计算、以简洁的方式设置属性和脚本变量、解析XML文档。使用JSTL表达式语言:JSP页面中使用JSP作用域属性和请求的参数来传递信息。表达式语言(EL)是专门给网页的作者设计的,以促进JSP作用域属性成为一个从业务逻辑到JSP页面沟通方式的标准。但是请注意,虽然EL是JSP技术的关键环节,它不是一个通用的编程语言。相反,它只是一个简单的数据访问语言,这使得它可以轻松地访问(和操作)而不需要使用scriptlet或请求时的表达式的值。在JSP 1.x中,网页开发人员必须使用表达式来接受系统的一个值,就像下面的例子中:someTags:aTag attribute=或者一个自定义JavaBeans组件的值:表达式语言允许一个网页开发人员使用简单的语法来访问对象。例如:要访问一个简单的变量,你可以这样使用:访问嵌套的JavaBeans属性,你会这样使用: 如果你在使用JavaScript,你就像感觉在家里一样,因为EL借用了JavaScript的语法来访问结构化数据。必要时使用过滤器:JSP技术中一个新的特性是过滤器(filter)。如果你遇到了一种情形,有许多servlets和JSP页面需要压缩他们的内容,你可以写一个单独的表达式过滤器并把它应用到所有资源中。在Java蓝图中,举个例子,过滤器常常用来提供登陆。使用一种便携式安全模型:大多数应用服务器提供一个锁定到特定服务开发的服务或者局限于自身安全的特性的服务。为了更大限度提高您的企业应用程序的可移植性,使用一个可移植的Web应用程序安全模型。在最后,然而一切都是权衡取舍。例如,如果你有一组预定义的用户,你可以管理它们使用基于表单的登陆或者基本身份验证。但是如果你想动态的创建用户,你需要使用容器特定的API来创建和管理用户。如果容器特定的API是无法移植的,你可以通过适配器模式来解决这个问题。使用数据库来持久化信息:你可以通过实现session生成一个HttpSession对象,它提供了一种简单方便的机制来存储用户的信息并使用cookie来识别用户。用户sessions用来存储交换信息,即使丢失了也没关系(直译:晚上也睡得着)。(当session过期时或者当客户端改变浏览器时,session中的数据会丢失。)如果你想持久化存储信息,请使用数据库,这样不仅安全而且可以跨浏览器。缓存内容:永远不要动态重新生成在请求之间没有改变的内容。可以将内容缓存在客户端,代理端或者服务器端。使用连接池:我建议你使用JSTL来进行数据库访问。但是如果想编写自己的数据库访问的自定义操作,建议你使用数据连接池在所有的请求之间有效的共享数据库的连接。但是请注意,J2EE服务涵盖了这一点。缓存数据库查询结果:如果你想缓存数据库查询的结果,不要使用JDBC的ResultSet对象作为缓存的对象。这个紧密的连接和数据库连接池是有冲突的。把ResultSet中的数据复制到特定应用程序的bean中去,Vector或者JDBC的RowSets中去。如果必要的话,采用新的JSP XML语法:这取决于XML如何和你的应用程序相兼容。这又是一个权衡,因为这使得JSP和一些工具更加友好,而不是和开发人员更加友好。阅读和运用企业蓝图:Sun的企业蓝图给开发人员提供了指引、模式和样例应用程序,一些就像Adventure Builder(Java Adventure Builder Reference application是一个Sun 公司J2EE应用实例,它展示了如何在J2EE 1.4平台设计交互的和轻便的Web services。同时他也展示了J2EE技术的有效应用方式,这些技术包括JAX-RPC, JAXP, Servlet 2.4, JSP 2.0, JSTL, EJB和DB。Adventure Builder数据库部分是用的pointbase数据库或是mysql数据库。)和Pet Store(Java Pet Store的2.0参考应用程序是一个示例应用程序来说明如何在Java EE 5平台可用于开发支持AJAX的Web 2.0应用程序。)。总的业说,J2EE蓝图提供了最佳实践和设计模式,它被证明是建立便携、健壮、可伸缩的企业应用程序中反复出现问题的解决方案。Servlets和JSP页面的整合JSP规范提出了两种使用JSP页面构建Web应用程序的方法:JSP Model 1和Model 2架构。这两个模型在处理上是不同的。在Model 1架构中,如图2所示,JSP页面来负责处理客户端浏览器的请求,并把响应发加给客户端。图2:JSP Model 1 架构Model 2 架构,如图3所示,集成了Servlets和JSP页面两者的使用。在这种模型下,JSP页面是用于表现层的,servlets是用来处理任务的。Servlets充当着控制器的角色,负责处理客户端的请求并创建任何JSP页面需要的bean。控制器同时负责决定向哪个JSP页面转发请求。JSP页面重新得到由servlet创建的对象并提取动态内容插入到模板中。图 3: JSP Model 2 架构这种模型促进了模型视图控制器(MVC)风格设计模式的使用。注意到一些实现了这种有用的设计模式的框架已经存在了,那才是单独描述的内容。 Apache的Struts是一个MVC形式的框架。 这个框架最适于单一的请求或者表单的提交导致整体

温馨提示

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

评论

0/150

提交评论