JSP自訂標籤Taglib實現過程重點總結

來源:互聯網
上載者:User

Taglib指令介紹

Taglib指令,其實就是定義一個標籤庫以及自訂標籤的首碼。

比如struts中支援的標籤庫,html標籤庫、bean標籤庫、logic標籤庫。

其中的具體的實現方式,我們不過多介紹,我們給大家從宏觀的角度以及解決其中的疑痛點,後面會大家介紹相應的學習資料。

除了struts的標籤庫,我們常見還有jstl標籤庫。

這樣在介面jsp中引入其中的標籤庫或者標籤庫檔案,然後才可以正常使用其中定義的標籤。

複製代碼 代碼如下:<%@ taglib prefix ="bean" uri= "http://struts.apache.org/tags-bean" %>
<%@ taglib prefix ="logic" uri= "http://struts.apache.org/tags-logic" %>
<%@ taglib prefix ="html" uri= "http://struts.apache.org/tags-html" %>
<%@ taglib prefix ="c" uri="http://java.sun.com/jsp/jstl/core" %>

自訂標籤庫優點

在jsp1.1版本中就增加了自訂標籤庫。自訂標籤庫可以看作一種優秀的組件。在自訂標籤庫中,我們可以把複雜的商務邏輯功能都封裝在標籤庫中了。而不必在jsp中寫具體的代碼。這樣,jsp代碼與java編碼能力不必強制耦合在一起。

提到jsp版本的問題,我們首先應該確定我們jsp版本,因為版本不同,標籤庫檔案引入的標頭檔不同,並且其中的標籤也有差異。

如何查看我們使用的jsp版本或servlet版本

開啟tomcat下lib檔案下的jsp-api.jar下的/META-INF/MANIFEST.MF檔案,查看jsp版本。

因為我已經匯入eclispe中,圖如下:

lib檔案下的servlet-api.jar下的/META-INF/MANIFEST.MF檔案,查看servlet版本

因為我已經匯入eclispe中,圖如下:

Jsp2新增的特性

上述圖中jsp版本是2.2,servlet版本是3.0。目前servlet3.0對應的是jsp2.2規範,但是一般情況下,我們把jsp2.0與jsp2.2都統稱為jsp2.

如果我們使用jsp2,則web.xml使用的是servlet2.4以上的版本。那我們看一下web.xml對應的標頭檔:

新增的特性是:

複製代碼 代碼如下:<web-app version= "4"
xmlns="http://javasuncom/xml/ns/j2ee"
xmlns:xsi="http://wwwworg/2001/XMLSchema-instance"
xsi:schemaLocation="http://javasuncom/xml/ns/j2ee
http://javasuncom/xml/ns/j2ee/web-app_2_xsd" >
</web-app>

1.直接配置jsp的屬性

比如在web.xml中配置:

複製代碼 代碼如下:< jsp-config>
<jsp-property-group >
<!--  對那些檔案進行應用 -->
<url-pattern >* jsp</ url-pattern>
<!-- 忽略el運算式 -->
<el-ignored >true </el-ignored >
</jsp-property-group >
</ jsp-config>

當然還有很多功能:

2.運算式語言

運算式語言,就是使用el運算式。

3.使用TagFile

使用TagFile可以代替標籤處理類和庫檔案。

jsp1和jsp2的標籤庫檔案中的標頭檔

jsp1的標籤檔案的標頭檔:

複製代碼 代碼如下:<?xml version="0" encoding= "UTF-8"?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc//DTD JSP Tag Library 1//EN"
"http://javasuncom/j2ee/dtds/web-jsptaglibrary_1_dtd">

根據尾碼dtd,知道這是引入dtd檔案,但是這具體表示什麼意思呢?

若是引入dtd檔案,則使用DOCTYPE 這種形式。但是 PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"是什麼意思呢?

根據xml中,如何引入dtd檔案?引入dtd檔案有以下形式:

1.在xml文檔內部引入dtd

複製代碼 代碼如下:<?xml version="0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

2.在xml文檔引入外部dtd檔案複製代碼 代碼如下:<?xml version="0"?>
<!DOCTYPE note SYSTEM "notedtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

在文件類型聲明時,用管間質SYSTEM或PUBLIC來指出外部DTD檔案的位置

用system關鍵字,如下:<!DOCTYPE 根項目的名字 SYSTEM "外部DTD檔案的URI">

用public如下:<!DOCTYPE 根項目的名字 PUBLIC "DTD的名字" "外部DTD檔案的URI">

一般用system關鍵字來形容是私人的dtd檔案。

而public關鍵字來形容的是公用的dtd檔案。public形式,首先預設的根據dtd的名字來尋找dtd檔案,找不到,則會根據dtd檔案的uri尋找檔案。

jsp2中標籤檔案的標頭檔如下:其中是使用的schema形式而不是dtd檔案。

複製代碼 代碼如下:<?xml version="0" encoding="UTF-8" ?>
<taglib xmlns="http://javasuncom/xml/ns/j2ee"
xmlns:xsi="http://wwwworg/2001/XMLSchema-instance"
xsi:schemaLocation="http://javasuncom/xml/ns/j2ee http://javasuncom/xml/ns/j2ee/web-jsptaglibrary_2_xsd"
version="0"></taglib>

標籤庫檔案位置

把tld檔案放在WebContent目錄下或其子目錄下。這樣的話,web.xml不用配置其位置即可。tomcat直接讀取webcontent下的tld檔案。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.