Java web开发-------第三章Tag文件与Tag标记

目录

一:Tag文件

1.Tag文件的结构

2.Tag文件的保存

a. Tag文件所在目录

b.Tag文件的编码

二:Tag标记:

1.Tag标记 与 Tag文件

2.Tag标记的使用

3.Tag标记的运行原理:

三:Tag文件的常用指令:

1.tag指令:

a.language属性:

b.import属性:

c.pageEncoding属性:

2.include指令:

3.attribute指令:

4.variable指令:

a.variable指令的格式:

b.对象的返回:

5.taglib指令:


一:Tag文件

1.Tag文件的结构

Tag文件时扩展名为.tag的文本文件,结构于JSP文件相似。

Tag文件中可以包括普通的HTML标记符,一些特殊的指令标记,成员变量声明和方法的定义,Java程序片和Java表达式。

以下为一个简单的Tag文件a.tag,文件扩展名为.tag ,文件内容与JSP文件大致相同。

a.tag

<%@ tag pageEncoding ="utf-8"%>
<p style ="font-family:宋体;font-size:30">
1~100的奇数和:
<%
    int sum=0,i=1;
    for(i=1;i<=100;i++){
        if(i%2==1)
        sum+=i;
    }
    out.println(sum);
%>
</p>

2.Tag文件的保存

a. Tag文件所在目录

Tag文件可以实现代码的复用,为了能让一个JSP页面使用某一个Tag文件,必须将这个Tag文件放到Tomcat服务器指定的目录中。

建立目录格式为:

Web服务目录\WEB-INF\tags


例如ch3\WEB-INF\tags

WEB-INF和tags都是固定的目录名称,但tags下的子目录可以由用户给定,也可以直接保存再tags下

b.Tag文件的编码

保存Tag文件必须按照Tag文件指定的编码保存。

例如:

方法1:在Tag文件中使用tag指令

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

方法2:在保存该Tag文件时,将保存类型修改为  UTF-8。

二:Tag标记:

1.Tag标记 与 Tag文件

jsp页面必须通过Tag标记来调用一个Tag文件,tag标记的名字和Tag文件的名字一致,也就是说当我们写了一个tag文件放到特定的目录中,也就给出了一个tag标记

<Tag文件的名字/>

或

<Tag文件的名字>其他内容</Tag文件的名字>

一个Tag文件对应一个Tag标记,把全体Tag标记称为一个自定义标记库或简称为标记库

2.Tag标记的使用

一个jsp页面通过使用tag标记来调用一个Tag文件。Web服务目录下的一个jsp页面使用tag标记调用文件之前,必须首先使用taglib指令标记引入该web服务目录下的标记库,只有这样jsp才能调用相应的tag文件

taglib指令的格式如下:

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

taglib指令中的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:a/>  //使用Tag标记
</body></HTML>

3.Tag标记的运行原理:

1.如果该Tag标记对应的tag文件是首件被jsp调用,那么tomcat服务器会将tag文件转译成一个java文件,并编译这个java文件生成字节码文件,然后执行这个字节码文件

2.如果该tag文件已经被编译成字节码文件,tomcat服务器将直接执行这个字节码文件

3.如果对tag文件进行了修改,那么tomcat服务器将会重新将tag文件转译成一个java文件,并编译这个java文件生成字节码文件,然后执行这个字节码文件

三:Tag文件的常用指令:

Tag文件中经常使用的指令有tag、taglib、include、attribute、variable。

1.tag指令:

Tag文件通过使用tag指令可以指定某些属性的值。tag指令的语法如下:

//使用一条tag指令为属性指定需要的值
<%@ tag 属性1="属性值"属性2="属性值"...属性n="属性值"%>
//也可以使用多个tag指令为属性指定需要的值:
<%@ tag 属性1="属性值"%>
<%@ tag 属性2="属性值"%>
...
<%@ tag 属性n="属性值"%>

a.language属性:

languae属性的值指定Tag文件使用的脚本语言,默认值为Java,目前也只能取值Java。

b.import属性:

import属性的作用是为Tag文件引入包中的类,import属性可以取多个值。

c.pageEncoding属性:

该属性指定Tag文件的字符编码,默认值为ISO-8859-1。目前,为避免显示信息乱码现象,Tag文件需要将该属性值设置为UTF-8。

2.include指令:

在tag文件中也有和jsp文件类似的include指令标记,和jsp文件中的include指令标记类似。

3.attribute指令:

在Tag文件中通过使用attribute指令让使用它的JSP页面向该Tag文件传递需要的数据。

attribute指令的格式如下:

<%@ attribute name="对象名字"required="true"("false") type="对象的类型"%>

例如:

<%@ attribute name="result" required="true" type="java.lang.Double"%>

//需要注意的是:这里type属性的值必须使用包名,不能简写为Double

attribute指令中的name属性是必须的,该属性的值是一个对象的名字。

JSP页面在调用Tag文件时,可向name属性指定的对象传递一个引用。

如果attribute指令中没有使用type指定对象的类型,那么对象的类型默认为java.lang.String类型

JSP页面使用Tag标记向所调用的Tag文件中name指定的对象传递一个引用,方式如下:

<前缀:Tag文件名字 对象名字="对象的引用"/>

:在Tag文件中不可以再定义和attribute指令中的name属性给出的对象具有相同名字的变量,否则将隐藏attribute指令中给出的对象,并使其失效

4.variable指令:

Tag文件通过使用variable指令可以将Tag文件中的对象返回给调用该Tag文件的JSP页面

a.variable指令的格式:

<%@ variable name-given="对象名"variable-class="对象类型"scope="有效范围"%>

其中的name-given的值就是Tag文件返回给JSP页面的对象,该对象名须符合标识符规定。

variable-class的值是返回的对象的类型,对象的类型必须带有包名

如果没有使用variable给出对象的类型,那么对象的类型默认为java.lang.String类型

b.对象的返回:

Tag文件为了给JSP页面返回一个对象,必须将返回的对象的名字以及该对象的引用储存到Tomcat服务器提供的内置对象jspContext中,只有存入其中,JSP页面才可以使用该对象。

5.taglib指令:

JSP页面或Tag文件都可以使用taglib指令引入标记库,taglib指令格式如下:

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

最后看一个Tag文件的例子:

triangle.tag 保存在ch3\WEB-INF\tags目录中。

calculator.jsp
<%@ page contentType="text/html"%>
<%@ page pageEncoding="utf-8"%>
<%@ taglib tagdir="/ch3/WEB-INF/tags"prefix="getArea"%> //这里的prefix前缀是自己取名的
<HTML><body bgcolor=yellow>
<getArea:triangle sideA="3"sideB="4"sideC="5"/>
</body></HTML>
<%@ tag pageEncoding="utf-8"%>
<%@ attribute name="sideA"required="true"%>
<%@ attribute name="sideB"required="true"%>
<%@ attribute name="sideC"required="true"%>
<%! 
    public String getArea(double a,double b,double c){
        if(a+b>c&&a+c>b&&b+c>a){
            double p=(a+b+c)/2.0;
            double area=Math.sqrt(p*(p-a)*(p-b)*(p-c));
            String result=String.format("%.2f",area);
            return "三角形面积:"+result;
        }
            else{
                return "该三边无法构成一个三角形";            
        }
    }
%>
<% 
    double a=Double.parseDouble(sideA);
    double b=Double.parseDouble(sideB);
    double d=Double.parseDouble(sideC);
    out.println(getArea(a,b,c));
%>

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值