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。