第一页(共4页) 自从我(原文作者)在2001年底发表了“JSP最佳实践”以来,JSP技术已经有了戏剧般的发展。许多的工具已经使得开发基于JSP技术的网页变的更加容易。在上一篇我的“最佳实践”的文章中所提到的实践依然适用。然而,随着新的特性,工具,以及JSP开发思想的出现你需要使用更多的最佳实践来开发更加平滑的高维护性能的JSP的应用。这篇文章列出了一些应用了最重要的新的特性,工具和思想的最佳实践: l 开始编写JSP document. l 引入JSP编程约定 l 使用正确的范围(Scope) l 小心的管理“会话”范围 l 利用JSTL(javaServer Pages Standard Tag Library)的特点 l 利用servlet filers(Intercepting Filter pattern)的特点 l 创建你的Jsp pages的文档 l 预先编译JSP网页和文档 l 组织文件和目录以便于容易的开发和部署 l 小心使用私有的,与供应商特定的特性 l Html标签使用XHTML(Extensible HyperText Markup Language)语法 使用JSP document.不是JSP pages
基于以下几个原因我推荐使用JSP document. l JSP document.很好组织了的XML/HTML(You can easily verify JSP document. as well-formed XML/HTML) l 可以使用XML Schema来验证JSP document. l 可以很容易的使用标准的XML工具来写和解析 l 可以使用XSLT(Extensible Stylesheet Language Transformations)以不同的form来编写JSP document.具体请看“JSP document.nbspwith XSLT” http://www.javaworld.com/javaworld/jw-07-2003/jw-0725-morejsp.html?#sidebar1 l JSP使用了XML相容include和forward action,custom标签,因而使得整个document.XML相容,这样就提高了编码的一致性。 l JSP document.相对JSP pages需要稍微多一点的开发规则,但是带来的好处是更加容易阅读和维持的document.,特别是对于刚刚开始学习JSP的人来说。
关于创建JSP document.和其特点的详细内容请参考“Write JSPs in XML Using JSP1.2”(http://www.javaworld.com/javaworld/jw-07-2003/jw-0725-morejsp.html?#resources) JSP document.最大的缺点是没有与XML相兼容的JSP注释存在。JSP document.以使用客户端的注释(HTML-/XML –style)或者是嵌入的java注释。但是没有JSP document.<%-- --> 而JSP可用的上面的两种注释方法都有其自身的缺点。你可以在得到的网页中看到客户端的注释(通过浏览器视图里面的“查看源文件”功能),而且要使用java的注释需要将java代码直接的写在JSP document.中。
Sun Microsytem 最近已经帮助一些组织来创建这样的规范,制定了文档“Code Conventions for the JavaServer Pages Technology Version 1.x Language”可以免费获得,参考“Resources”(http://www.javaworld.com/javaworld/jw-07-2003/jw-0725-morejsp.html?#resources)。如果你的公司还没有遵循JSP编程规范的话,我建议使用这个文档作为一个起点。你可以完全的遵照该文档也可以在其基础上创建自己的规范。
应用范围(Application scope) Application scope 是最为广泛的一个范围,应该在必要的时候才采用这种形式。你可以在非会话相关(session-aware)的JSPs中创建绑定到application的对象(You can create objects bound at application level in JSPs that are not session-aware,)在这种类型的JSPs中可以用应用范围来存储数据和信息。( so application scope is useful for storing information when using these types of JSPs)。你也可以使用绑定到application的对象用来在不同的会话(session)间共享数据。当你不需要application范围的对象的时候一定要显式的删除它们以便释放内存。
采用JSTL(标准标签库) JSP的引入和采纳已经成为JSP开发人员的一个最为重要的进步。JSTL有时候也称为“JSP Standard Tag Library”。在JSTL中的T代表的是标签(Tag)而不是模板(Template)。
JSTL:背景与回顾 在我以前的文章里,我提到过JSP开发人员采纳可以得到的自定义标签库而不是自己从头开始创建。有许多的商业的或者开源的自定义标签库现在已经可以加以利用。但是有一个缺点就是:开发人员需要在JSP中按照这些自定义标签库所特定的格式来应用这些标签。JSTL的出现解决了这个问题,因为JSTL提供了自定义标签的标准接口,这些标签足以满足JSP开发人员的一些基本的要求。(The advent of JSTL has addressed this downside by PRoviding standard interfaces to the custom tags that perform many basic functions JSP developers need.) 不同的供应商可能以不同的形式实现这些JSTL标签,但是JSP开发人员不要知道实现标签时的不同点。 如果JSP开发人员使用JSTL编写了JSP page或者JSP document.JSP page或者JSP document.该适用所有的JSTL实现方法。 有许多有价值的书和一些在线的资源可以去学习JSTL。这里我将主要简单的介绍JSTL的优点与特性。
JSTL的优点 简短的说,JSTL提供了所有的已经公布的自定义标签库所有的好处,而且提供标准化的标签API。JSTL促进了高可维护性和可移植性的pages和document.。我列出了JSTL一些特别的特点。 l JSTL提供了基于标签的遍历,条件以及其他一些功能,这些功能以前或者是直接在JSP中嵌入代码来实现的,或者是使用了自己创建的标签,非标准的标签库,或者是通过使用Servlet来代替JSP来实现的。 l JSTL使用了EL(eXPression language)语法 l 编写自定义标签相对其他一些JSP开发任务来说需要更多的精力与经验。JSTL通过两种方法来简化这些步骤:首先,如前所述,jstl能解决很多定制(自定义)的tags的需要.(JSTL handles many common needs for custome tags)。其次,JSTL提供了一些机制使得编写你自定义的标签更简单,尤其是编写支持EL自定义标签的时候。
数据访问标签库(Database access library) JSTL提供了数据访问标签库,但是我很少用它,因为我强烈的认为不应该在JSP页面内直接访问数据库。如果在JSP中直接的访问数据库将会降低重用,因为数据库访问的代码在使用数据库范围标签的JSP页面外是不可以被访问到的。在JSPs中直接的进行数据库访问将会加大表示层与数据层之间的耦合。严格的分割意味着更好的模块化,复用性,以及更容易的满足表现层和数据层之间的规范(Disciplined separation means more modularity, greater opportunity for reuse, and better opportunities for specialization of presentation and database experts)。.我推荐在JSTL的其他三种标签库可以满足JSP开放人员的需求的时候使用这些标签库,但是我不推荐使用JSTL的数据库范围标签库outside of prototypes and the simplest Web applications。
JSTL 核心标签库(JSTL core tag library) 正像名字一样,JSTL核心标签库是在JSTL四种标签库中最常用的一种。这个标签库提供了对collection的遍历,条件语句以及其它一些常用的程序结构。JSTL核心标签库可以使得JSP开放人员不必编写他们自己的自定义标签库或者直接在JSPs中嵌入Java代码。 JSTL XML 标签库(JSTL XML tag library) 这个标记库提供了一些令人赞叹的且功能强大的XML操纵标签和XSLT转换标签。
JSTL formatting 标签库 如果需要在多个国家提供网页和网址,那么国际化(internationalization)对网络开发项目(web development projects)来说是一个很大的挑战。JSTL formatting标签库为此向JSP开发人员提供了一些自定义标签,可以支持按照特定的区域读写数字和实践。
Expression Language JSTL以上的自定义标签库有两种类型:RT(traditional request time)自定义标签库和EL标签。因为EL要更灵活一些,所有我推荐使用EL自定义标签库。 JSTL和其他一些自定义标签库
因为自定义标签库(custom tag library)在JSTL引入以前已经使用了很长的时间,许多的个体和组织都已经开发了自定义的标签库。这些标签库在很大程度上与JSTL的功能都有重复。在大多数情况下,在考虑实现相同的功能时,我推荐使用JSTL而不是自己开放的自定义标签库或者时其他一些可以得到的自定义标签库(other publicly available custom tag library)。JSTL提供的标准化是一个意义重大的优点因为API可以学一次,而后你就可以一贯的使用了。 比较Struts的标签库和JSTL标签库提供可以获得一个很好利用这些最佳实践的例子(Comparing Struts tag libraries and JSTL provides a good example of how to implement this best practice)。Struts提供了MVC框架以外其他的一些优点。其中包括的Struts的自定义标签库集合。在JSTL引入之前,Struts的自定义标签库已经支持遍历( iteration)以及条件标签,但是现在我开始使用JSTL的遍历和条件标签而不是Struts里面的标签。我现在仍然再使用Struts的form标签,这是因为这个标签与Struts的表单(form)紧密的联系在一起,而且在JSTL没有相对应的标签可用。 比较其他的一些自定义标签库和JSTL标签库,上面的讨论也是适用的。如果JSTL标签库可以完全的支持同样的功能的话,应该使用标准的JSTL标签。当然如果JSTL不支持的话,你就没有办法了。在大多数情况下,像我上面讨论的Struts标签和JSTL标签,通常需要同时使用JSTL和其他一些自定义标签。
JSTL:最后的补充 关于JSTL更详细的内容,她的特点,以及如何在你的jsp中应用JSTL请参考“resources” http://www.javaworld.com/javaworld/jw-07-2003/jw-0725-morejsp-p2.html#resources 在“resource”中包含了到“Apache’s Standard Taglib(一个开源的,广泛使用的JSTL实现)的连接。 Web server的提供商已经开始在他们的web服务器上发布JSTL的实现,JSTL预测将成为最终的JSP2。0规范中的一部分。