JavaWEB——簡單標籤簡單總結

自定義標籤:

  什麼是自定義標籤?

用戶定義的一種自定義的jsp標記 。當一個含有自定義標籤的jsp頁面被jsp引擎編譯成servlet時,tag標籤被轉化成了對一個稱爲 標籤處理類 的對象的操作。於是,當jsp頁面被jsp引擎轉化爲servlet後,實際上tag標籤被轉化爲了對tag處理類的操作。 

自定義標籤有什麼用

•自定義標籤可以降低 jsp 開發的複雜度和維護量,從html 角度來說,可以使 html 不用去過多的關注那些比較複雜的商業邏輯(業務邏輯)。
•利用自定義標籤,可以軟件開發人員和頁面設計人員合理分工:頁面設計人員可以把精力集中在使用標籤(HTML,XML或者JSP)創建網站上,而軟件開發人員則可以將精力集中在實現底層功能上面,如國際化等,從而提高了工程生產力
•將具有共用特性的tag庫應用於不同的項目中,體現了軟件複用的思想。 

自定義標籤的開發步驟:

1.編寫完成標籤功能的Java類(標籤處理器)

2.編寫標籤庫描述文件(tld文件),在其中對該標籤進行描述

3.在JSP頁面導入並使用該標籤


1.編寫完成標籤功能的Java類(標籤處理器):

其實它就是一個Java類,只是實現了某個接口或者繼承了某一個類。可以實現javax.servlet.jsp.tagext.SimpleTag接口或者

繼承SimpleTagSupport該類。

若實現接口,需要實現它的若干個方法:doTag(),setParent(JspTag parent);getParent(); setJspContext(JspContext pc);setJspBody(JspFragment jspBody).其中最重要的是doTag()方法。看方法名就知道,咱們需要把該標籤需要實現的功能的代碼寫在該方法裏面。setJspContext(JspContext pc)也很重要,它把代表JSP引擎的pageContext傳給標籤處理類,它先於doTag()方法。

private PageContext pageContext;
	@Override
	public void setJspContext(JspContext pc) {
		// TODO Auto-generated method stub
		this.pageContext=(PageContext) pc;
		
	}
有了pageContext就可以得到頁面的其他8個隱含對象,如out,response,request等等,咱們就可以利用這些隱含對象去實現咱們想讓它實現的功能。所以JSP頁面能做的,標籤都能做。

若是選擇用繼承SimpleTagSupport類的方法,則咱們需要重寫doTag()方法。那pageContext對象去哪得到呢?翻開API,看到有個getJspContext()方法,得到JspContext對象,然後強制轉型爲pageContext對象即可。

比如咱們現在只需要簡單的在瀏覽器界面上輸出“hello".

doTag()方法:

public void doTag() throws JspException, IOException {
		System.out.println("doTag");
	HttpServletRequest request =(HttpServletRequest) pageContext.getRequest();
	pageContext.getOut().println("Hello"+request.getParameter("name"));
	
	}

2.編寫標籤庫描述文件(tld文件),在其中對該標籤進行描述:

<?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/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <!-- 描述TLD文件 -->
  <description>MyTag 1.0  core library</description>
  <display-name>MyTag core</display-name>
  <tlib-version>1.0</tlib-version>
  <!--  建議在JSP頁面上使用的標籤前綴-->
  <short-name>mytag</short-name>
  <!--  作爲tld文件的id,用來唯一標識當前的tld 文件,多個tld文件的Uri不能重複。通過
  JSP頁面的taglib 標籤的Uri屬性  來引用-->
  <uri>http://www.mytag.com/mytag/core</uri>
  
  <!-- 描述自定義的helloSimpleTag	標籤 -->
  <tag>
  				<!-- 標籤名 ,在JSP 頁面上使用標籤時的名字-->
  			<name>hello</name>
  			<!-- 標籤所在的全類名 -->
  			<tag-class>tag.HelloSimpleTag</tag-class>
  			<!-- 標籤體的類型 -->
  			<body-content>empty</body-content>
  			
  			<!--  描述當前標籤的屬性-->
  			<attribute>
  			<!-- 屬性名 -->
  						<name>value</name>
  						<!-- 該屬性是否爲必須 -->
  						<required>false</required>
  						<!-- runtime expression value
  					當前屬性是否可以接受運行時表達式的動態值
  						 -->
  						<rtexprvalue>false</rtexprvalue>
  			</attribute>
  			
  				<attribute>
  			<!-- 屬性名 -->
  						<name>count</name>
  						<!-- 該屬性是否爲必須 -->
  						<required>false</required>
  						<!-- runtime expression value
  					當前屬性是否可以接受運行時表達式的動態值
  						 -->
  						<rtexprvalue>false</rtexprvalue>
  			</attribute>
  
  
  </tag>
  
  </taglib>

其中,name和count是自定義標籤的屬性。


3.在JSP頁面導入並使用該標籤:

	<myTag:hello/>
hello和tld文件中的標籤名要一致。一個tld文件中可以有多個標籤和標籤名。所以在導入使用的時候也要注意點。

通過以上步驟,就完成了一個簡單自定義標籤的開發。

那麼自定義標籤中的屬性又是幹嘛的呢?也許在咱們的tld文件中需要傳入幾個參數,這時就需要屬性了。要想使用屬性,首先需要在Java類中聲明這些屬性以及相應的set()方法.

private String value;
	private String count;
	public void setValue(String valueString) {
		this.value = valueString;
	}
	
	public void setCount(String count) {
		this.count = count;
	}
同時,也需要在tld文件中對這些屬性進行描述。最後,在咱們導入使用的時候,寫上這些參數名和值即可
<mytag:	value="myTag" count="10"/>

doTag()方法:
public void doTag() throws JspException, IOException {
		System.out.println("doTag");
	HttpServletRequest request =(HttpServletRequest) pageContext.getRequest();
	System.out.println("value:"+value+"count:"+count);
	pageContext.getOut().println("Hello"+request.getParameter("name"));
	
	}



發佈了50 篇原創文章 · 獲贊 9 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章