八 标签库及web.xml

JSTL 标准标签库

EL(Expression Language)表达式,格式为 ${EL表达式} ,表达式可以是一个常量、变量或者一个计算表达式,其由容器解释和执行。

使用 EL 表达式可以简化 JSP 文件的编写,如 ${pageContext.request.requestURL} 可以方便的取得请求链接。

JSTL(JSP Standard Tag Library)标签库是由 Sun 公司制定标准,他人开发的,简化 JSP 制作的标签函数库。

要使用 JSTL 标签,需要导入相应的 jar 包,同时将相应的 TLD 文件添加到工程中。并且,在使用时,需要在 JSP 页面中使用 <%@ taglib uri="" prefix="" %> 进行导入。

相关资源可以查看 https://www.oracle.com/java/technologies/Java-server-tag-library.html

如下片段,是从 fmt.tld 文件中摘取的。

<tag>
	<description>
	    Sets the request character encoding
	</description>
	<name>requestEncoding</name>
	<tag-class>org.apache.taglibs.standard.tag.rt.fmt.RequestEncodingTag</tag-class>
	<body-content>empty</body-content>
	<attribute>
	    <description>
			Name of character encoding to be applied when
			decoding request parameters.
	    </description>
	    <name>value</name>
	    <required>false</required>
	    <rtexprvalue>true</rtexprvalue>
	</attribute>
</tag>

指明了 requestEncoding 标签的处理类为 org.apache.taglibs.standard.tag.rt.fmt.RequestEncodingTag,同样的,通过 TLD 文件可以查看其他标签,以及相应的处理类。

rtexprvalue 说明该属性是否可以使用 scriptlet 表达式,默认 false 。

自定义标签库

JSP 容器在根据 JSP 页面生成 Servlet 时,会使用相应的 Java 代码取代预定义的标签。对于自定义的标签,则需要指定的标签处理类来进行处理。所以,自定义标签的关键是编写自定义处理类。

标签库的 API 定义在 javax.servlet.jsp.tagext 包中,在编写自定义标签处理类时,必需要实现其中的接口。最关键的两个方法是 doStartTag()doEndTag() 分别在开始和结束标签解析时执行。

要想使用自定义的标签,需要编写 TLD 标签描述文件,来指明所有标签及其处理类。这些处理类在一起构成了一个标签库。最后,需要在 web.xml 文件中进行配置,指明自定义标签库描述文件的位置。

<jsp-config>
	<taglib>
		<taglib-uri>uriName</taglib-uri>
		<taglib-location>/WEB-INF/mytaglib/lis.tld</taglib-location>
	</taglib>
</jsp-config>

在 JSP 中使用时,需要引入自定义标签库:<%@ taglib uri="uriName" prefix="lis" %>

在编写自定义标签处理类时,一般不直接实现相关接口,而是继承 TagSupportBodyTagSupportSimpleTagSupport 类。

web.xml

在一个 web 应用中,配置文件 web.xml 十分重要,对于该文件的配置可以参考如下博文:

但是 web.xml 配置文件,作为一个 XML 文件,其包含哪些标签,有有何含义呢!这就必须要了解 XML 文件的定义描述文件 DTD(Document Tag Definition)了。

在 J2EE 1.3 及其以前,是由 DTD(Document Tag Definition)定义部署描述符的,相关文档可以查看

http://www.oracle.com/webfolder/technetwork/jsc/dtd/index.html

在该资源中可以找到描述 web.xml 文档的 DTD 文件。

从 J2EE 1.4 开始,则开始使用 XSD(XML Schema Definition)文档来描述相关文档,具体可以查看如下地址

http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/index.html


如在使用 mybatis 时,编写的 SQL 文档中都有如下语句:

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

这实际是在指明解析该 XML 文档时要使用的 DTD 文件的地址。

至于 DOCTYPE 的含义,可以查看相关标准:https://html.spec.whatwg.org/multipage/syntax.html#the-doctype

在 DTD 文件中,元素和元素的属性都是分条描述的,无法自定义类型。

在更流行的 XSD 中,类型是可以单独定义的,即可以重用一个类型定义,并且,元素是可以嵌套定义的。

在往前追溯,可以了解下标准通用标准语言:SGML,Standard Generalized Markup Language

发布了129 篇原创文章 · 获赞 23 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/u011374318/article/details/103329471