利用servlet filter的特点
servlet filter是Servlet2。3规范中引入的,但是这些filter同样有利于JSP开发和维护。因为JSPs需要被转换成servlets,JSPs与servlet技术紧密相关。因此servlet规范的重要发展会影响到JSP的发展,对此你不应该感到奇怪。
Servlet filters是Intercepting Filter模式的J2ee实现,因此提供了这个模式的所提供的特点,包括更好的维护性,少的代码冗余以及更好的可移植性。这是因为:通常你需要加入服务到每个jsp页面中,而现在可以通过将这些服务放到一个filter中。并且这些JSPs根本不需要这些filter的存在。因为在可插入的filters与JSPs之间没有关联性,因此在filter中的修改将不会直接影响到JSPs。你可以使用filter链,使用不同的filter的组合,每个filter用来实现不同的目的。
JSP网络应用中servlet filter的作用
下面的两个例子说明了在基于JSP的网络应用中servlet filter的作用。在许多的安全配置中,每一个JSP页面都会检验会话ID和其他一些安全性来授权一个JSP调用。你可以将这些在每个JSP页面中的检验代码移植到一个servlet filter中,并且确保这个filter在调用每个jsp页面之前被调用。这样就提高了JSPs的可维护性和可移植性。你可以仅仅的在这一个servlet中进行一些安全检验方面的修改,或者是在其中加入一些和安全相关的代码。而不是在每一个JSP页面中进行修改。如果将来整个安全机制改变了,系统中唯一要修改的地方仅仅是这个filter,独立的JSP页面将不需要任何修改。
在上一篇“JSP Best Practices”中,我推荐将异常信息存储到“Secondary Storage”中,并且仅仅的提供给用户一个可以检索这些异常信息的一个标志(and only providing the user with an identifier to search the storage for the entire exception trace)。在这种情况下servlet filter非常的有用。你可以通过配置来使网络应用(Web Application)在调用异常JSP时自动的来执行用来记录异常日志的filter。Sevlet规范提出了许多的潜在的servlet filter用法。
为JSPs的创建API文档(document.nbspthe APIs for your JSPs)
Java的许多悦人心意的特点之一便是它支持JavaDoc。通过JavaDoc可以快速而容易的为java代码提供Web-based的文档。不幸的是,javadoc工具不支持JSP,并且JSP规范没有“唤起”一个方法来提供“JSP APIs”。
什么是JSP API?
能够不通过阅读JSP的全部的代码就能够快速的确定一些JSP方面是非常之有用的。比方说,你需要知道哪些变量是绑定到会话(session),请求(request)和应用(application)的范围,并且这些变量是具体的被绑定到了具体的哪一个范围之上。另外一个JSP API用处的例子是在JSP segment之中,segment需要知道在被包含的时候,调用它们的JSP中已经声明和制定了哪些变量(Another example of useful JSP API information is denoting in JSP segments which variables they require the calling JSP to have declared and defined when including them)。
JSP规范没有涉及关于如何的建立JSP API的文档。Sun的JSP 1.x 代码公约文档讨论将注释和作者,版权,以及描述的信息一起写在JSPs的上部,但是我喜欢更详细的记录JSPs的期望的输入(but I like to document.nbspmy JSPs' expected inputs more thoroughly)。
因为JSP规范中没有涉及到这些,因此没有一个标准的用来注释JSP API。一个方法是在JSP中使用java代码(scriptlets)并且在代码中嵌入javadoc形式的注释(/** javadoc comment */)。尽管我很少在JSPs中使用java代码,但是这是在服务器端保留这些注释的最简单的方法。使用XML/HTML风格的注释会将JSP API暴露在客户端,这是一个很不好的方法。
我知道有两种免费可以使用的产品可以用来为你的JSPs做注释,SourceForge.net的JspDoc以及OSDN(Open Source Development Network)的Freshmeat.net的JSPDoc。(关于两种工具的详细情况见resource【http://www.javaworld.com/javaworld/jw-07-2003/jw-0725-morejsp-p3.html#resources】).这里我将简要的介绍一下这两个工具。
JspDoc(SourceForge)
SourceForge的JspDoc可以用来为JSPs生成Javadoc风格的文档。这个工具通过将XML-Compliant的标签放入到Javadoc风格的注释(/** */)之中,而这些注释是放在了JSP page的java代码中。这个工具的缺点是目前它仅仅支持JSP pages,尽管对JSP document.支持已经在计划列表中。
这个工具还提供了转换JSP pages到JSP document.功能。因为我从一开始就编写JSP document.因为我没有用过这项功能,但是对于想从JSP pages转换到JSP document.用户来说,这是一个很好的工具。还要另外一个功能就是将JSP document.换到JSP pages。
JSPDoc(Freshmeat.net)
Freshmeat的JSP 文档生成器 JSPDoc从JSPs中抽取信息来创建Javadoc风格的基于Web的文档页面。这个工具的一个优点是它能够将产生的JSP文档与用Javadoc工具产生的java类的文档结合起来。缺点是,为了产生注释要求有一个相当严格的注释结构。这个特殊的语法使用了Javadoc的(/** */)但是并不能够识别@符号,而@在标准javadoc是有一定的含义的。另一个缺点就是这个工具不支持XML-compliant的JSP document.而是要求用的语法结构。This product is available under the Mozilla public license.
JSP document.tion for JSP document. 因为JspDoc和JSPDoc都不支持JSP document.我利用JSP document.XML-compliance的特性来产生Javadoc形式的文档。使用XSLT stylesheet,可是很容易的来为JSP document.建HTML页面形式的注释文档。而且不需要自定义的解析。因为当你的JSP是一个正确的XML文档时有标准的工具(比方Xalan)能够进行这些处理。