开发工具:
文件大小: 405kb
下载次数: 0
上传时间: 2011-01-12
详细说明:
很不好找,放出来供大家分享 JSP 2.0: The New Deal, Part 2 by Hans Bergsten, author of JavaServer Pages, 3rd Edition,12/03/2003 这篇文章是讲述加入到JavaServer Pages (JSP) 2.0 规范中的特性的系列文章的第二部分。在前面的第一部分,我描述了新的EL表达式,但是还有更多的内容没有涉及。这一部分描述的是JavaServer Pages (JSP) 2.0 规范在错误处理机制和新的部署描述符特性方面的增强。我假设你熟悉JSP 1.2,而且至少听说过JSP Standard Tag Library (JSTL)。 JSP Error Pages 如果你曾经在JSP和servlet的错误处理中使用过JSP error page,并且想要显示或者记录违例信息(违例导致JSP error page 被调用),那么你就知道在JSP1.2中这并不是件轻松的事情。原因是当在servlets和JSP 页面中声明了一个errorPage,违例(exception)被作为一个request attribute传递,它们要使用不同的属性名称。只有被传递的 违例通过JSP属性名称自动地显示在 JSP error page中(通过exception脚本变量和${pageContext.exception} EL 表达式)。 JSP 2.0通过将相同的属性名称转换为servlet规范中的javax.servlet.error.exception来修正了这个问题。更进一步说,一个新增的 命名为errorData的EL pageContext变量揭露了发生问题的其他信息。ErrorData属性是javax.servlet.jsp.ErrorData的一个实例。这个实例可以被 用来作为一个bean和以下的properties一同使用: Property Java 类型 描述 requestURI String 发生请求失败的 URI servletName String 发生错误的servlet或者JSP页面的名称 statusCode int 发生错误的状态码 throwable Throwable 导致当前error page被调用的违例 这里有个JSP error page的例子。这个例子使用了上面提到的一些property: <%@ page isErrorPage="true" contentType="text/html" %> <%@ taglib prefix="log" uri="http://jakarta.apache.org/taglibs/log-1.0" %> Sorry, but things didn't work out as planned. I've logged as much as I know about the problem, so rest assured that my master will look into what's wrong as soon as he's sober. ----- ${now} Request that failed: ${pageContext.errorData.requestURI} Status code: ${pageContext.errorData.statusCode} Exception: ${pageContext.errorData.throwable} ----- 这个页面使用Apache Jakarta Taglib项目中的 Log tag library来显示一些确定的信息并记录下了具体的细节。 你可以在web.xml文件中使用来对servlet和JSP 页面声明这是一个error page: ... java.lang.Throwable /error.jsp 500 /error.jsp ... 如果你需要在某些特殊的JSP页面中使用一个不同的error page,可以用“@page”设置errorPage属性来有选择性地覆盖web.xml中的声明。 JSP 语法错误的报告 在JSP 1.2 和 JSP 2.0之间,一个细微但是重要的区别是JSP 2.0需要JSP容器支持“jsp:id”特性,虽然在JSP 1.2中这仅仅是一个建议。作为一个JSP开发者,这对你意味着什么呢?对于JSTL和定制的标签库的语法错误,它意味着你可以更好地获得有用的错误信息。 下面讲述它是如何工作的。当JSP容器将JSP页面转换为可以执行的servlet class,容器着眼于这个页面中声明的所有标签库。如果标签库中的一个或者多个库包含了一个标签库验证器(Tag Library Validator,TLV),容器就会在接受这个JSP页面前给予TLV一个检验当前页面的机会。容器给予TLV一个当前页面的XML视图用以分析。XML视图就像名称暗示的那样,是当前页面的另外一种版本, 所有常规的JSP元素和template text已经被转换为一种结构良好的XML文档。这个XML视图对TLV来说是很容易解析的,用于确定所有的custom actions被正确地使用(比如:custom actions被正确的嵌套,互斥的属性是不能在同一个action element中一同使用的)。 这就是“jsp:id”的由来。容器在页面中给每一个custom action元素分配了一个ID,并且维护了一张在ID和元素位置(文件、行号、列号)的映射表。添加的“jsp:id”属性,在XML视图中ID值对应于所有的custom action 元素,这样TLV就可以读取它。如果TLV发现了一个语法错误,它就会在返回给容器的错误信息中包含“jsp:id”属性值来确定当前无效的action element。这时容器使用映射,并添加发生错误的custom action element位置信息,提示给你。这使得开发人员找到并改正错误变得轻而易举。 所有的JSTL库都要有TLV。我强烈建议为你自己编写的类库开发TLV,而且任何第三方类库的开发人员也应该这样做。 如果你对XML视图和TLV并不熟悉,我在2001年的介绍JSP 1.2的文章中有一个简要的介绍("JSP 1.2: Great News for the JSP Community")。 JSP 部署描述符 JSP 2.0在web.xml文件中使用了servlet规范中定义的部署描述符的文件格式,就像早期的JSP规范中的那样。然而在JSP 2.0中有两个重要的变化:1、现在web.xml文件的格式是通过XML Schema定义的;2、为了最大限度地减少servlet和JSP规范之间的耦合度,大多数的JSP配置细节已经被移到一个新的XML element中。 XML Schema是一种用来描述XML文档语法规则的XML语言(可以定义XML element之间是如何嵌套的;一个element可以获得什么样的值; 值的唯一性的需求等等)。这是一个复杂的规范,但是幸运的是你不用为了写web.xml文件而需要明白XML Schema语法规则。因为servlet和JSP规范提供了易于理解的图表( JavaServer Pages, 3rd Edition书中包含了许多简单易懂的图表)。如果你还是想要更进一步了解XML Schema,请浏览W3C(http://www.w3c.org)的网站。 用XML Schema代替上一版本中的 Document Type Definition(DTD) 语言来声明XML文档结构的主要优点是:XML Schema具有更加富有表达能力,因此在解析web.xml文件的过程中能发现更多的错误,有希望解决在JSP容器之间更好地移植这个问题。 另外一个优点是(我确定你会感激于此的): 在web.xml文件中使用XML Schema可以使顶层的element按照任何顺序排列变得轻而易举。举例来说,在servlet和JSP 规范的上一个版本中,如果将 element 放到 element 前面,你将得到一个错误提示。在新版本的规范中,这样做就不会有问题。在顶层元素中的element的顺序尽管还必须要按照严格的顺序放置,但是在顶层元素以外至少你现在可以自由地支配了。 除了要嵌套在中,其它的element现在都被归组到一个新的顶层element中,这个element命名为。在中,你可以使用 element,和在JSP 1.2中具有相同的语法和含义,尽管它们并不需要实现了JSP 1.2 或者后续版本的容器,因为它们可以自动地从已经部署的JAR文件中获得标签库的定义。 新添加的子元素更加有趣。你可以用它来配置一组匹配某个指定的URL的JSP页面。比如: ... *.jsp true ... 元素确定这组JSP 页面应用哪一个配置。其他被嵌套的元素定义配置选项。这个例子中, 使应用JSP scripting elements (Java code) 在所有的JSP 页面中无效。 总地来说同一样,你可以在中使用以下的配置元素: Element 描述 如果设置为true, 在匹配指定的URL模式的JSP 页面中,EL 表达式被当作常规的文本而不是EL 表达式。当移植看起来有EL表达式文本的JSP 1.2页面到JSP 2.0的时候,这非常有用。在已经转换为JSP 2.0的页面中,你可以使用一个新增的“elIgnoredpage”属性来选择EL是否有效 如果设置为true, 在某个匹配的JSP页面使用脚本 为匹配指定的URL模式的JSP页面指定编码。这是一个可选的配置(在每一个JSP页面中指定页面的编码),并且对于JSP页面来说这是使用某些文件编码(比如:EBCDIC)唯一的办法 为所有匹配指定的URL模式的JSP页面的末尾自动包含一个文件,而指定相关的context路径。你可以在一个中多次使用,或者通过多个来实现 为所有匹配指定的URL模式的JSP页面的开头自动包含一个文件,而指定相关的context路径。你可以在一个中多次使用,或者通过多个来实现 如果设置为true, 所有匹配指定的URL模式的JSP页面使用JSP XML语法(它们是JSP Document) ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.