java认证中有JSP?
正当世界各地的开发者们为基于JSP 1.1的新应用而忙碌时,负责制定JSP规范的组织JCP(Java Community Process),推出了《JSP 1.2规范》(代号JSR-053)。JCP的成员包括规范作者,应用服务器、JSP和服务器小程序的开发者,他们来自大小小各个公司商家,也有的是开放式资源的参与者。
《JSP 1.2规范》9月17日公布,现已准备广泛实施。JSP 1.2新增若干功能,纠正了低版本的瑕疵。其最重要的变化是:
JSP 1.2 建立在 Servlet 2.3 和 Java 2 的基础上;.
include 可单独使用,无需设置flush 刷新属性;
JSP 页的 XML 语法结构完成定型;
标签(Tag)库可以利用 Servlet 2.3 的事件监听机制;
JSP页的有效性验证,增加新方式;
标签库的分发置放,增加若干新选择项式。
标签增加 2 个新接口(interface);
String 类型的文本标签,其属性值可以转换成 Object 类型;
PropertyEditor 可以转换用户设定的属性值;
标签明确了存续周期;
标签库描述符增设新元素,与 J2EE 的其他描述符合并。
Tomcat 4.0 的实现,参照了 JSP 1.2 和 Servlet 2.3 两个规范。Tomcat服务器是基于 Java 的Web容器,用于运行 Servlet 和 JSP 程序。Tomcat 4.0 与《JSP 1.2规范》已同期发布,您可尝试其各种新鲜功能。有些商品化的Web容器,如新亚特兰大公司的ServletExec 4.1,也已支持JSP 1.2 和 Servlet 2.3。
本文将全面介绍JSP 1.2的新功能及其如何使用。大多数新功能涉及JSP程序员和Web容器开发者,读者应当熟知《JSP 1.1规范》。您若主要关心网页制作,恐怕不会对本文有太多兴趣,但仍可肯定,您会从JSP 1.2获益,譬如:功能更强大的自定义标签库,效率更高的Web容器,以及各种Web容器之间更好的兼容性等等。
Servlet 2.3 和 Java 2
JSP 1.2是根据最新版本《Servlet 2.3规范》制定的。因而,JSP 1.2程序能利小用服务器程序(servlet)的全部新增功能,如经过改进的监听器、过滤器、国际化转换器等。以下,我将说明如何使用标签库中的监听器。怎样利用 Servlet 2.3的其他新增功能,可阅读JavaWorld网站发表的有关Servlet 2.3的文章,作者是杰森·亨特。
JSP 1.2 和 Servlet 2.3 需在JAVA 2平台上运行。令人欣慰的是,一些Web容器,已可利用自JDK 1.1以来新增的全部功能,如收集器、更强的类装载器、灵活的安全机制等,当然,还有您拥有的相应的WEB应用程序。不过,也有美中不足,JSP 1.2应用程序不能运行在仅仅支持JDK 1.1的平台上。好在这样的平台眼下已经寥寥无几,我们中的绝大多数人不必为此烦心。
JSP 1.2向后兼容JSP 1.1。符合《JSP 1.2规范》的Web容器,运行JSP 1.1程序不应遇到不兼容的难题。
Include操作不必设置flush 刷新属性
JSP 1.1强制设置flush刷新属性值为true。因此,当实施include操作时,浏览器中看到的网页内容被刷新,不能再向其转发别的网页,也不能设置"响应"操作的引导信息。由此产生许多混乱和副作用,难以理解和处理。从Sun公司《JSP爱好者》邮件列表文档,可得到关于这个问题的详细说明。
JSP 1.2按照Servlet 2.3的要求,彻底消除这一限制,include命令的flush属性可以设置为false。事实上,flush属性现在是可选择而非强制性的,默认值为false,因而,尽可将其冷落不顾。
JSP 1.1页中像下面的语句,在include操作后执行forward操作,会产生错误。
<jsp:include page="common.jsp" flush="true" />
<% if (someCondition) { %>
<jsp:forward page="another.jsp" />
<% } %>
但是,根据《JSP 1.2规范》,无论将flush的值设为true或false,这些语句都是合法有效的。
甚至,您可以自行定义操作命令标签,将include命令置入其中。
<xsl:apply xsl="style.xsl">
<jsp:include page="someXML.jsp" />
</xsl:apply>
这些语句,因其缓存问题JSP 1.1视为非法,而JSP 1.2认定合法,因为缓存问题已经解决。
JSP页,JSP文档和XML视图
XML是JSP 1.2的重要成员。符合《JSP 1.2规范》的Web容器接受的文件,必须是符合《JSP 1.1规范》的JSP页;或者是遵从XML新格式的JSP文档。
JSP文档有一root元素用作<jsp:root>,定义JSP页的标准元素和自定义标签库的格式表(namespace)。JSP的全部命令和标注元素,必须以XML元素表示,取代原先JSP页的旧式元素:
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:demo="/demolib"
version="1.2">
<jsp:directive.page contentType="text/html" />
<ul>
<demo:myLoopTag items="myCollection" var="current">
<li>
<jsp:getProperty name="current" property="lastName" />,
<jsp:getProperty name="current" property="firstName" />
</li>
</demo:myLoopTag>
</ul>
</jsp:root>
如上例所示,JSP基本元素如说明、自定义操作等,均可包含XHTML之类的XML元素。例中的<ul>和<li>即是。
受篇幅所限,本文不能介绍JSP文档的全部语法。注意,JSP文档的语法比JSP页的语法复杂得多,并且,其主要目的是用于各种工具。您若坚持使用这一复杂语法,请阅读《JSP 1.2规范》第5篇"JSP文档"。
Web容器,第一次收到JSP页的请求时,将其转变成类似JSP文档的XML文档,然后检验其是否合法,最后转换为小服务程序。这种XML文档,正规称呼叫做"JSP页的XML视图"。XML视图与JSP文档的唯一区别是:模板化的文本全部包括 在<jsp:text>元素中,并以VDATA部件防止文本特殊字符可能带来的问题。例如:
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:demo="/demolib"
version="1.2">
<jsp:directive.page contentType="text/html" />
<jsp:text><![CDATA[<ul> ]]></jsp:text>
<demo:myLoopTag items="myCollection" var="current">
<jsp:text><![CDATA[<li> ]]></jsp:text>
<jsp:getProperty name="current" property="lastName" />
<jsp:getProperty name="current" property="firstName" />
</demo:myLoopTag>
<jsp:text><![CDATA[</ul> ]]></jsp:text>
</jsp:root>
以下还会介绍在XML视图中用TagLibraryValidator检验JSP页的合法性。
标签库分发放置的新方式
JSP 1.2 对标签库分发放置的方式做了一些简化,可以从单独的JAR文件自动查找、分置标签库。
自动查找标签库
JSP 1.1规定,使用标签库时,应当将库操作命令的属性uri设定为标签库所在真实路径,或者指定一个代号名称。如果使用代号名称,必须编辑该项应用的web.xml文件,将此代号名称对应的真实路径,写入<taglib>元素。
JSP 1.2 给出了可供选用的、功能更强的第三种方法:将标签库JAR文件存放于WEB-INF/lib目录,访问时使用标签库操作命令的标准URI地址。
以下是一例示。标签库描述符(TLD)包括一个<uri>元素,定义该库的标准URI地址:
<taglib>
...
<uri>/demo</uri>
...
</taglib>
Web应用程序启动后,Web容器开始搜索WEB-INF目录,查找全部标签库 .tjd文件。标签库 .tjd文件可以单独存在,也可以包含在JAR文件中META-INF目录中。
一个JAR文件中存放多个标签库
自动搜索机制有一大便利,即可以在同一JAR文件中存放多个标签库。
JSP 1.1规定,JAR文件中的标签库描述符TLD必须以META-INF/taglib.tld命名,因此,一个JAR文件只能包含一个TLD,即一个标签库。
JSP 1.2则可以将任何标签库 .tld文件置入JAR文件的META-INF目录内,作为一个TLD。可以把多个TLD和相应的 .class文件,置入同一JAR文件。这就方便了置放标签库。注意,必须使用自动查找机制置放包含多个标签库的JAR文件,因为,对于这种JAR文件无法指定单独TLD路径。0
标签库事件监听
《Servlet 2.3规范》扩展了先前版本的事件监听机制。此前,只能监听会话(session)属性变化,现在则可以监听:小服务程序和会话存续期间的各种事件,小服务程序环境属性的变化,会话开始和暂停事件。会话开始和暂停事件的发生,是由于Web容器将会话状态存于硬盘,或者将会话转至其他服务器。
各种新型事件监听器,源自Java事件模型。监听器是类(class),它实现一个或多个新式监听器接口interface。这些接口定义了响应事件的方法。Web应用程序启动时,Web容器注册它的事件监听器,并适时调用响应事件的方法。
可以将一个或多个事件监听器置入标签库。为了事件监听器能注册,应将实现监听器的类名,写入标签库描述符(
- 12-10java中的Servlet 简介
- 12-10学认证,先认识JMS(Java Message Service)
- 12-10学java认证,先知道J2EE?
- 12-10SUN JAVA程序员和开发员的认证介绍
- 12-10JDBC之Java与Oracle的两种连接方式
- 12-10java认证中有JSP?
- 12-10java认证之JavaRMI入门实战
- 12-10给在校生-JAVA学习 一条漫长的道路
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 12-05亚马逊推出新一代基础模型 任意模态生成大模
- 12-05OpenAI拓展欧洲业务 将在苏黎世设立办公室
- 12-05微软质疑美国联邦贸易委员会泄露信息 督促其
- 12-05联交所取消宝宝树上市地位 宝宝树:不会对公
- 12-04企业微信致歉:文档打开异常已完成修复