zoukankan      html  css  js  c++  java
  • JSP-tag文件使用介绍

    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/>
  • 相关阅读:
    当我们开发一个接口时需要注意些什么
    一条查询语句在MySQL服务端的执行过程
    痞子衡嵌入式:基于恩智浦i.MXRT1060的MP4视频播放器(RT-Mp4Player)设计
    痞子衡嵌入式:基于恩智浦i.MXRT1010的MP3音乐播放器(RT-Mp3Player)设计
    《痞子衡嵌入式半月刊》 第 18 期
    痞子衡嵌入式:MCUBootUtility v2.4发布,轻松更换Flashloader文件
    华为HMS Core助力开发者打造精品应用,共创数智生活
    HMS Core 6.0即将发布 加码应用生态升级
    华为开发者联盟生态市场企业特惠GO第1期—应用软件专题
    卡片跳转快应用指定页面,如何点返回直接退出快应用回到卡片
  • 原文地址:https://www.cnblogs.com/AbeDay/p/5026862.html
Copyright © 2011-2022 走看看