八 標籤庫及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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章