第三章 Tag文件与Tag标记

目录

3.1Tag文件

Tag文件的结构

Tag文件的保存

3.2Tag标记

Tag标记与Tag文件

Tag标记的使用

Tag标记的运行原理

3.3Tag文件中的常用指令

tag指令

include指令

attribute指令

variable指令

taglib指令


3.1Tag文件

3.1.1Tag文件的结构

Tag文件是扩展名为.tag的文本文件,其结构和JSP文件相似。

<% @ tag pageEncoding="utf-8"%>

3.1.2Tag文件的保存

Tag文件可以实现代码的复用,即Tag文件可以被许多JSP页面使用。

web服务目录\WEB-INF\tags

3.2Tag标记

3.2.1Tag标记与Tag文件

某个web服务目录下的Tag文件只能由该web服务目录中的JSP页面调用,JSP页面必须通过Tag标记来调用一个Tag文件。

<Tag文件的名字/>

3.2.2Tag标记的使用

一个JSP页面通过使用Tag标记来调用一个Tag文件。Web服务目录下的一个JSP页面在使用Tag标记来调用一个Tag文件之前,必须首先使用taglib,指令标记引人该Web服务目录下的标记库,只有这样,JSP页面才可以使用Tag标记调用相应的Tag文件
taglib指令的格式如下:

<% @ taglib tagdir= "标记库的位置"prefix="前缀">
<%@ page contentType = "text/html" %>  
<%@ page pageEncoding = "utf-8" %> 
<%@ taglib tagdir = "/WEB-INF/tags" prefix = "computer"%>
<HTML><body bgcolor = cyan>
<h1>调用Tag文件计算100内奇数和:</h1>
<computer:oddNumberSum /> <%-- 使用Tag标记 --%>
</body></HTML>  

3.2.3 Tag文件的运行原理

Tomcat 服务器处理JSP 页面中的Tag标记的原理如下:
*如果该Tag标记对应的Tag文件是首次被JSP 页面调用,那么 Tomcat服务器会将Tag文件转译成一个Java文件,并编译这个Java文件生成字节码文件,然后执行这个字节码文件(这和执行JSP页面的原理类似)。
*如果该 Tag文件已经被转编译为字节码文件,Tomcat 服务器将直接执行这个字节码文件。
*如果对Tag文件进行了修改,那么Tomcat服务器会重新将Tag文件转译成一个Java 文件,并编译这个Java文件生成字节码文件,然后执行这个字节码文件。
3.3Tag文件中的常用指令

3.3.1tag指令

Tag文件通过使用tag指令可以指定某些属性的值,以便从总体上影响Tag文件的处理与表示。

<% @ tag属性1=“属性值”属性2=“属性值”....属性n=“属性值” %>

3.3.2include指令

<jsp:include page="文件的URL"/>

3.3.3attribute指令

Tag文件充当着可复用代码的角色,如果一个Tag文件允许使用它的JSP页面向该Tag 文件传递数据,就使得Tag文件的功能更为强大。在Tag文件中通过使用attribute 指令让使用它的JSP页面向该Tag文件传递需要的数据。 attribute 指令的格式如下:
 

<% @ attribute name ="对象名字"required="ture"|"false"type="对象的类型"%>
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %> 
<%@ page import="java.util.LinkedList" %>
<%@ page import="java.util.Random" %>
<%@ taglib tagdir="/WEB-INF/tags/example3" prefix="sortNumber"%>
<HTML><body bgcolor = #CCCCCC>
<%  LinkedList<Double> listNumber=new LinkedList<Double>();
    Random random = new Random();
    for(int i =0;i<3;i++) {
       double d = random.nextDouble(); //[0,1)之间的随机数
       listNumber.add(d);
    }  
%>    
<p style="font-family:宋体;font-size:36;color:blue">
排序数据
<sortNumber:sort list="<%= listNumber %>"/>  <%-- 使用Tag标记 --%>
</body></HTML>

sort.tag

<%@ attribute name="list" required="true" type="java.util.LinkedList" %>
<%@ tag import="java.util.Collections" %>
<%@ tag import="java.util.Iterator" %>
<% 
     Collections.sort(list); //排序链表
     Iterator<Double> ite = list.iterator(); //得到迭代器
     while(ite.hasNext()) {  //遍历链表
        out.print("<br>"+ite.next());   
     }
%>

 3.3.4variable指令

Tag文件通过使用attribute 指令,可以使得调用该Tag文件的JSP页面动态地向其传递数据。在某些Web 应用中,JSP 页面不仅希望向Tag文件传递数据,而且希望Tag文件能运回数据给JSP 页面。比如,许多JSP 页面可能都需要调用某个 Tag文件对某些数据进行基本的处理,但不希望Tag文件做进一步的特殊处理以及显示数据,因为各个JSP页面对数据的进一步处理或显示格式的要求是不同的。因此,JSP 页面希望Tag文件将数据的基本处理结果存放在某些对象中,将这些对象返回给当前JSP页面即可。
Tag 文件通过使用variable指令可以将Tag文件中的对象返回给调用该Tag文件的JSP页面。
variable指令格式如下:

<% @ variable name -give="对象名"variable-class="对象类型"scope="有效范围"%>
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %> 
<%@ taglib tagdir="/WEB-INF/tags/example4" prefix="getPrice" %>
<HTML><body bgcolor = #FFCCFF>
<% String str = "麻辣豆腐:20.6元,红烧肉:68.9元,烤鸭:199元";
%>
<getPrice:handleData mess="<%= str %>"/>  <%-- 使用Tag标记 --%>
<p style="font-family:宋体;font-size:36">
 菜单:<br>"<%= str %>"<br>价格总和:
<%= price %>         <%-- 使用Tag标记返回的Double对象price --%>
</p>
<% str = "毛巾:2.6元,香皂:6.9元,牙刷:12.3元";
%>
<getPrice:handleData mess="<%= str %>"/>  
<p style="font-family:黑体;font-size:36;color:blue">
购物小票:<br>"<%= str %>"<br>价格总和:
<%= price %>              
</p>
</body></HTML>

handleDate.tag

<%@ attribute name="mess" required="true" type="java.lang.String" %>
<%@ tag import="java.util.regex.Pattern" %>
<%@ tag import="java.util.regex.Matcher" %>
<%@ variable name-given="price" variable-class="java.lang.Double"
    scope="AT_BEGIN" %>
<%!  
public Double getPriceSum(String input){  // 定义方法
    Pattern pattern;          //模式对象
    Matcher matcher;          //匹配对象
    String regex="-?[0-9][0-9]*[.]?[0-9]*" ;//匹配数字,整数或浮点数的正则表达式
    pattern = Pattern.compile(regex);       //初试化模式对象
    matcher = pattern.matcher(input);       //初始化匹配对象,用于检索input
    double sum = 0;
    while(matcher.find()) {
       String str = matcher.group(); 
       sum += Double.parseDouble(str);
    } 
    return new Double(sum);
}
%>
<% //将返回的Double对象放在jspContext中:
   jspContext.setAttribute("price",getPriceSum(mess));
%>

运行结果:

 

3.3.5 taglib指令

taglib指令格式如下:

<% @ taglib tagdir ="自定义标记库的位置"prefix="前缀">

总结

以上就是今天要讲的内容,本文仅仅简单介绍了JSP页面的结构、Java程序片以及表达式,其中最重要的还是后面的指令标记和动作标记。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值