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" %>
在编写自定义标签处理类时,一般不直接实现相关接口,而是继承 TagSupport
、BodyTagSupport
或 SimpleTagSupport
类。
web.xml
在一个 web 应用中,配置文件 web.xml 十分重要,对于该文件的配置可以参考如下博文:
- https://www.cnblogs.com/linhuaming/p/9464356.html
- https://www.cnblogs.com/shoshana-kong/p/10682662.html
但是 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。