javascript
深入体验JavaWeb开发内幕——简述JSP中的自定义标签叫你快速学会
轉載自? ?深入體驗JavaWeb開發內幕——簡述JSP中的自定義標簽叫你快速學會
?自定義標簽,顧名思義,就是自己定義的標簽。那么我們為什么要自己定義一些標簽呢?
我們知道,如果要在JSP中獲取數據我們可以采用通過JSP的隱式對象request來獲取相應的請求參數或者屬性,也可以通過腳本<%? Java? 代碼%>來進行相應的處理,當然還可以使用EL表達式進行相關數據的操作。
???????? 這里,我們主要來談一下在JSP中使用自定義標簽。那么我們為什么要自定義一些標簽呢?我們知道,JSP中標簽的使用使得Web應用的顯示層與業務邏輯層分開。在JSP使用標簽,可以移除JSP中的java代碼使得JSP頁面更加的整潔和便于維護。然而,在JSP中定義的一些標簽又是有限的或者是我們所不需要的,這時,我們就可以同過自定義標簽的形式將相應的操作封裝在標簽中,只需在JSP中調用相應的標簽即可。這樣就簡化了我們的JSP頁面也便于頁面操作人員維護了。下面,我們就來了解一下自定義標簽、如何定義自己的標簽,以及在JSP中如何引用自己定義的標簽。
?
?一、自定義JSP標簽概述
??????? 自定義JSP標簽就是程序員定義的一種JSP標簽,這種標簽把那些信息顯示邏輯封裝在一個單獨的Java類中,通過一個XML文件來描述它的使用。當頁面中需要使用類似的顯示邏輯時,就可以在頁面中插入這個標簽,從而完成相應的功能。
?????? 使用自定義標簽,可以分離程序邏輯和表示邏輯,將Java代碼從HTML中剝離,便于美工維護頁面;自定義標簽也提供了可重用的功能組件,能夠提高工程的開發效率。
自定義標簽主要用于移除Jsp頁面中的java代碼。
?
二、自定義JSP標簽的執行過程
???????? 當一個含有自定義標簽的JSP頁面被JSP引擎(Web容器)轉譯成Servlet時,JSP引擎遇到自定義的標簽,會把這個自定義標簽轉化成對一個稱為“標簽處理類”的調用。之后,當這個JSP頁面被執行時,JSP引擎就會調用這個“標簽處理類”對象,并執行其內部定義的相應操作方法,從而完成相應的功能。
????
???? 三、自定義JSP標簽的開發流程
? ? ? ? ?? 使用Java處理類來開發自定義JSP標簽時,主要分為下幾個步驟:
創建標簽的處理類(Tag Handle Class)。這個類實現Tag接口,用來定義標簽的行為,并在JSP引擎遇到自定義標簽時調用執行。
???? 創建標簽庫描述(tld)文件(Tag Library Descriptor File),在tld文件中對標簽處理器類進行描述。
?????? 在JSP文件中用taglib指令引入標簽庫,然后使用標簽庫描述文件中指定的標簽名來使用它。
?
四、創建標簽的處理類、創建標簽庫描述文件、用taglib指令引入標簽庫
1. 創建標簽的處理類
? ? ? ?? 要想定義自己的標簽,必須要定義一個實現了Tag接口或是繼承實現了改接口的子類的類(這里,我們主要通過繼承實現了Tag接口的TagSupport類來介紹),然后把相應的操作封在相應的方法中即可。
例:
import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; public class CustomTagIP extends TagSupport {}2.?創建標簽庫描述文件
??????????? 定義標簽庫文件其實就是定義一個用于描述標簽處理類和JSP文件之間關系的一個擴展名為”.tld”的文件。標簽庫描述符文件是一個以“.tld”結尾的標準XML文檔,用來記錄一個標簽庫內擁有哪些標簽、每個標簽包含哪些屬性等。
注:這個?”.tld”文件一定要放在WEB-INF文件夾下否則在JSP解析引擎將JSP文件解析成Servlet時會因所要解析的自定義標簽找不到對應的標簽處理類而導致該處理類無法被加載而產生錯誤。
?例:
<?xml version="1.0" encoding="UTF-8"?> //XML聲明 <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> //指明改文件中所使用的標簽的名稱空間以及其//約束文件所在的具體位置<taglib>為改文件的根標簽 <description>A tag library exercising SimpleTag handlers.</description> //這是<description>:標簽庫的一個文本描述 <tlib-version>1.0</tlib-version> //<tlib-version>:指定標簽庫的版本為1.0 <short-name>lijizh</short-name> //<short-name>:為標簽定義簡短的名字,在taglib //指令中可作為首選的前綴名使用。 <uri>http://www.hbsi.com</uri> //<uri>:定義一個URI,用于唯一的標識此標簽庫。(可根據需要自定義) <tag> //<tag>:用于指定自定義標簽的相關信息。<description>OutputsHello, World</description><name>H</name>//<name>緊跟在前綴明后的標簽名<lijizh:H><tag-class>www.hbsi.web.tag.CustomTagIP</tag-class> //<tag-class>指明創建標簽處理類的具體位置<body-content>empty</body-content> //<body-content>指明自定義標簽體的內容的類型具體可/ //為:EMPTY JSP scriptless tagdepentend</tag>//結束標簽 </taglib>還有一些其他的標簽的介紹:
<display-name>:為標簽庫指定一個簡短的別名。
<small-icon>:為標簽庫指定大小為16×16的小圖標(gif或jpeg格式),該圖標可在圖形界面工具中顯示。
<large-icon>:為標簽庫指定大小為32×32的大圖標(gif或jpeg格式),該圖標可在圖形界面工具中顯示。
<validator>:為標簽庫提供一個驗證器。
<listener>:為標簽庫提供一個監聽器。
<tag-file>:用于描述標簽文件。
<function>:用于指定在表達式語言中使用的函數
3. 用taglib指令引入標簽庫
???? 雖然在上面已經定義好了標簽處理類和相應的庫描述文件但是要想在JSP中使用自定義標簽還需要使用JSP中的指令原素進行引用才可使用。
例:
<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://www.hbsi.com"prefix="lijizh" %> <html> <body><lijizh:H>SKIP_PAGEThis is my JSPpage. <br></lijizh:H>aaaaaaaa<br/></body> </html>再綜合來看一個具體的實例:
??使用標簽輸出客戶機IP。
1、標簽處理類:
package www.hbsi.web.tag;import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport;publicclass CustomTagIP extends TagSupport {@Overridepublicint doStartTag() throwsJspException {HttpServletRequest request =(HttpServletRequest) this.pageContext.getRequest();//同過this.pageContext獲取一個PageContext類型的對象//通過該對象可以調用其他八大隱式對象JspWriter out = this.pageContext.getOut();try {out.println(request.getRemoteAddr());} catch(IOException e) {throw new RuntimeException(e);}return this.EVAL_BODY_INCLUDE;// doStartTag()根據這個返回值來進一步確定是否顯示//標簽體中的內容。其中,returnthis.SKIP_BODY;忽略標簽體中的內容不執行;returnthis.EVAL_BODY_INCLUDE;顯示標簽體中的內容。}}2.定義標簽描述庫
<?xml version="1.0" encoding="UTF-8"?><taglib xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"version="2.0"><description>A taglibrary exercising SimpleTag handlers.</description><tlib-version>1.0</tlib-version><short-name>lijizh</short-name><uri>http://www.hbsi.com</uri><tag><description>index.jsp</description><name>H</name><tag-class>www.hbsi.web.tag.CustomTagIP</tag-class><body-content>empty</body-content></tag></taglib>??3.JSP文件中引用自定義標簽
<%@ pagelanguage="java" import="java.util.*"pageEncoding="UTF-8"%><%@ taglib uri="http://www.hbsi.com"prefix="lijizh" %><html><body>您當前的IP地址是<br><lijizh:H/></body></html>? 效果如圖:
???
???????? 這樣你就可以在JSP中使用自定義標簽來封裝自己的Java代碼了。自己試一試吧!
總結
以上是生活随笔為你收集整理的深入体验JavaWeb开发内幕——简述JSP中的自定义标签叫你快速学会的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lol电脑需要什么配置(lol配置电脑)
- 下一篇: Benchmark vs.Mailchi