1. 程式人生 > >java web tag文件使用

java web tag文件使用

add post 處理 參數 pty number 編碼 a + b 完成

tag文件簡單創建和使用

  1. 創建標記文件(.tag)
  2. 在標記文件中寫入信息
  3. 在jsp文件中,引入標記文件
  4. 通過關鍵字調用標記文件

舉例說明:
標記文件(show.tag)

<%@ tag language="java" pageEncoding="UTF-8"%>
<body bgcolor=yellow><P>
<% int size=1;
       for(int i=1;i<=3;i++) {
          size=size+1;
%> <font size=<%=size%>>
         <jsp:doBody />
       </font>
<% }
%> </P></body>

jsp文件

//先使用taglib指令引入標記庫

<%@taglib prefix="look" tagdir="/WEB-INF/tags" %>
//使用<標記前綴:定義好的標記名>調用標記(註意:標記名和文件名大小寫一致)

 <look:Show>
                 開開心心,快快樂樂.
  </look:Show>

工作原理:

JSP 引擎把Tag文件轉換成Java文件,並編譯成class文件供JSP程序動態調用。標記體傳給Tag文件, Tag文件使用接受標記體信息。

Tag文件中的常用指令

tag指令設置方法

Tag文件中的tag指令類似於JSP文件中的page指令。Tag文件通過使用tag指令可以指定某些屬性的值,以便從總體上影響Tag文件的處理和表示。tag指令的語法如下:

 <%@ tag 屬性1="屬性值" 屬性2="屬性值" …屬性n="屬性值"%>

在一個Tag文件中可以使用多個tag指令:

<%@ tag 屬性1="屬性值"%>
<%@ tag 屬性2="屬性值"%>
……
<%@ tag 屬性n="屬性值"%>

tag指令屬性介紹

tag指令屬性有下面4個body-contentlanguageimportpageEncoding. 來對他們做一下介紹.

body-content屬性

屬性值有:emptytagdependentscriptless,默認值是scriptless
+ Empty:JSP頁面必須使用沒有標記體的Tag標記

language屬性

指定Tag文件使用的腳本語言,目前只能取值java,其默認值就是java。

import屬性

為Tag文件引入Java核心包中的類。import屬性可以取多個值。import屬性已經有如下值:

"java.lang.*"、 "javax.servlet.*"、
"javax.servlet.jsp.*"、"javax.servlet.http.*"

pageEncoding屬性

指定Tag文件的字符編碼,其默認值是ISO-8859-1。

include指令

使用方法和作用與JSP文件中的include指令標記類似。

include指令標記的作用是在Tag文件中出現該指令的位置處,靜態插入一個文件。

其語法格式如下:

<%@ include file= "文件的URL " %> 

attribute指令

在Tag文件中通過使用attribute指令,可以讓使用它的JSP頁面向該Tag文件傳遞需要的數據,增強Tag文件功能。指令的格式如下:

<%@ attribute name="對象名字" required="true"|"false" type="對象的類型"%>
  • name屬性是必需的,JSP頁面向它傳遞一個引用。

比如,一個Tag文件MyTag.tag中有如下attribute指令:

<%@ attribute name="length" required="true" %>

那麽JSP頁面就可以如下使用Tag標記(假設標記的前綴為computer)調用MyTag.tag:

<computer:MyTag length="1000" />
或
<computer:MyTag length="1000" >
我向Tag文件中傳遞的值是1000
<computer:MyTag /> 
  • required屬性可選。缺省值是false。若設為true,則JSP頁面必須向Tag文件的attribute屬性傳遞一個引用,否則出錯。
  • type屬性指定對象的類型。如type=“Java.util.Date”,如果缺省,則類型是java.lang.String。

舉例說明

標記文件(.tag)

<%@ tag language="java" pageEncoding="UTF-8"%>
 <h4> 這是一個Tag文件, 負責計算三角形的面積</h4>

<%@ attribute name="sideA" required="ture" %>
<%@ attribute name="sideB" required="ture" %>
<%@ attribute name="sideC" required="ture" %>

<%! public String getArea(double a, double b, double c){
        if(a+b > c && a+c > b && c+b>a){
            double p = (a + b+ c)/2.0;
            double area = Math.sqrt(p* (p-a) *(p-b) *(p-c));
            return "<BR> 三角形的面積: "+ area;
        }else{
            return("<BR>"+ a + "," + b + "," + c + "不能構成三角形, 無法計算");
        }
    } 
%>

<% 
    out.println("<br> JSP頁面傳過來的三條邊:" + sideA + "," + sideB + "," + sideC);
    double a = Double.parseDouble(sideA);
    double b = Double.parseDouble(sideB);
    double c = Double.parseDouble(sideC);
    out.println(getArea(a, b, c));
 %>

jsp文件

//通過下面代碼調用, 參數sideA, sideB, sideC其中一個忘記傳了,則代碼會出錯
 <h1>tag文件書上例子</h1>
    <look:Triangle sideA="5" sideB="6" sideC="7" />

variable指令

Tag文件通過使用variable指令可以將Tag文件中的對象返回給調用該Tag文件的JSP頁面。

variable指令的格式

<%@ variable name-given=“對象名字” variable-class=“對象的類型” scope=“有效範圍”%>

例: <%@ variable name-given="time" variable-class="java.util.Date" scope="AT_END" %> 
  • name-given屬性是必需的。
  • variable-class可以是java.lang.String(缺省值)等類型。
  • scope屬性表示在JSP頁面中何時何地可以使用返回的對象。
    1. AT_BEGIN: 一旦開始使用Tag標記,就可以在任何地方用對象;
    2. NESTED:只可以在標記體中使用對象;
    3. AT_END:只可以在標記結束後才可以使用對象;

完成了上面操作是不夠的,還需要執行下面代碼:

jspContext.setAttribute(“time”,new Date());

Tag文件只有將對象信息存儲到jspContext中,JSP頁面才可以使用該對象。

註:在tag文件中,不可以對variable中聲明的將要返回給jsp頁面的數據進行操作。

taglib指令

一個Tag文件可以使用Tag標記來調用其它的Tag文件。其實tag文件中使用其他tag,方法和jsp文件中使用tag文件方法一樣。Tag文件也必須使用指令引入該Web服務目錄下的標記庫,才可以使用Tag標記來調用相應的Tag文件。

指令的格式如下:

<%@ taglib tagdir="自定義標記庫的位置" prefix="前綴">

一個Tag文件也可以使用幾個指令標記引入若幹個標記庫,例如:

<%@ taglib tagdir="/WEB-INF/tags" prefix="beijing"%>
<%@ taglib tagdir="/WEB-INF/tags/tagsTwo" prefix="dalian"%> 。

舉例說明

index.jsp文件

<h1>tag文件中調用tag文件</h1>
<look:FirstTag number="6"/>
<look:FirstTag number="8" />

Frist.tag

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ tag import="java.util.*" %>
<%@ taglib tagdir="/WEB-INF/tags" prefix="getNumber"%>
<%@ attribute name="number" required="true" %>
   <getNumber:SecondTag number="<%=number%>"/>
   <% out.println("得到"+number+"個隨機數:");
       for(int i=0;i<listNumber.size();i++)                 //listNumber是SecondTag文件返回的對象
              out.print((Integer)listNumber.get(i)+"  ");  
       out.println("<br>按從小到大排列:");
       for(int i=0;i<listNumber.size();i++){
             for(int j=i+1;j<listNumber.size();j++){
                int a=((Integer)listNumber.get(i)).intValue();
                int b=((Integer)listNumber.get(j)).intValue(); 
                if(b<a){
                      Integer temp=(Integer)listNumber.get(i);
                      listNumber.set(i,(Integer)listNumber.get(j));
                      listNumber.set(j,temp);
                } 
            }  
       }
       for(int i=0;i<listNumber.size();i++)         
              out.print((Integer)listNumber.get(i)+"  ");  
       int sum=0;
      for(int i=0;i<listNumber.size();i++)
           sum=sum+((Integer)listNumber.get(i)).intValue();
      out.println("<br>得到的"+number+"個隨機數之和:"+sum+"<br>");
%>

Second.tag

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ tag import="java.util.*" %> 
<%@ attribute name="number" required="true"   %>
<%@ variable name-given="listNumber"  
                        variable-class="java.util.LinkedList" scope="AT_END" %>
<%   int count=Integer.parseInt(number);
         LinkedList listBox=new LinkedList(),
                listNeeded=new LinkedList();
        for(int k=1;k<=4;k++)
            for(int i=1;i<=13;i++)
               listBox.add(new Integer(i));
       while(count>0) {
            int m=(int)(Math.random()*listBox.size());
            Integer integer=(Integer)listBox.get(m);
            listNeeded.add(integer);
            listBox.remove(m);
            count--;
      }
      jspContext.setAttribute("listNumber",listNeeded);    //·μ??listNumber
%>

Tag標記嵌套

使用Tag標記時,可以帶有標記體,標記體還可以是一個Tag標記,實現Tag標記的嵌套。
Tag標記中的標記體由Tag文件的標記負責處理,而在Tag文件中,標記被替換成對“標記體”進行處理後所得到的結果。

舉例說明

index.jsp


 <%@ page contentType="text/html;charset=gb2312" %>
 <%@ taglib tagdir="/WEB-INF/tags" prefix="ok"%>
 <html><body>
 <p>
 <Font size=2>Tag標記嵌套顯示學生名單:</Font>
 <table border=1>
    <ok:Biaoge color="#a9f002" name="姓名" sex="性別">
        <ok:Biaoge  color="cyan" name="張三" sex="男"/>
        <ok:Biaoge  color="#afc0ff" name="李小花" sex="女"/>
        <ok:Biaoge  color="pink" name="孫六" sex="男"/>
        <ok:Biaoge  color="#ffaaef" name="趙揚" sex="女"/>
    </ok:Biaoge>
 </table>
 </body></html>
註意:紅筆為嵌套部分,以/結束。

Biaoge.tag

 <%@ tag language="java" pageEncoding="UTF-8"%>
 <%@ attribute name="color" %>   <!-- 接收數據 -->
 <%@ attribute name="name" %>
 <%@ attribute name="sex" %>
  <tr bgcolor=“<%=color%>”>         <!-- //表格顯示 -->
      <td width=60><%=name%></td> 
      <td width=60><%=sex%></td> 
  </tr>
  <jsp:doBody/>

java web tag文件使用