JSP:Tag文件的使用

需求:多个JSP页面可能需要使用一些相同的信息     例如:导航栏、标题等。

目标:提高这些相同信息的代码的复用性。

方法:将这些相同的元素形成一种特殊的文件,以便所有页面都可以使用,即:Tag文件

1、Tag对比include    

include指令标记<%@ include file=“...” %>

include动作标记

include缺点:有些情况下处理的是JSP文件,而用户可能通过该文件所在的Web服务目录直接访问到这个JSP文件。

当我们不希望这些文件被用户访问到时,需要采用新的办法:Tag文件——可被JSP动态加载,但不能被用户访问。

2、Tag文件的结构

*.tag文件    结构: 近似JSP的结构+Tag特殊指令标记

AddSum.tag

这是一个Tag文件,负责计算1100内的奇数之和:

<% 

     int sum=0, i=l ;

     for(i=l;i<=l00;i++)

    { 

 if(i%2==1)

sum=sum+i ;

 }

out.println(sum);
%>   

3、Tag文件的保存                       

Tag文件的位置必须是:Web服务目录\WEB-INF\tags

比如:webapps\webtest\WEB-INF\tags

其中的WEB-INF和tags部是固定的子目录名称,而tags下的子目录名称可由用户给定。

4、Tag标记与Tag文件的使用

步骤1:引入标记库(对tag的声明)在JSP页面中使用指令标记引入tag标记库。

             格式

            <%@ taglib tagdir=“tag标记的位置”  prefix=“前缀” %>

例如: <%@ taglib tagdir=“/WEB-INF/tags”  prefix=“beijing” %>

           <%@ taglib tagdir=“/WEB-INF/tags/tags2”  prefix=“dalian” %>

步骤2:在JSP页面中使用Tag标记来使用Tag。

格式:<前缀: Tag文件名/> 或<前缀: Tag文件名>

标记体

例如:  

标记体

JSP页面在调用Tag过程中可通过标记体动态地向Tag传送信息。

在Tag中,通过来处理JSP传递过来的标记体。

 默认情况下,标记体是一些文本数据

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@taglib prefix="look" tagdir="/WEB-INF/tags" %>

      

<look:Show>北京奥运会圆满成功 look:Show>

 <look:Show> I Love this Game!look:Show>

<look:Show>欢迎您!look:Show>  

Show.tag

bgcolor="yellow">

 <%

 int size=1;

for(int i=1;i<=3;i++)

{

size=size+1;         

%>

 

 <jsp:doBody />

 

<% }%>

 

5、Tag文件中的常用指令

作用:与JSP文件类似,Tag文件中也有一些常用指令,这些指令将影响Tag文件的一些属性和行为。

Tag文件中经常使用的指令有:

1. tag

2.include

3.attribute

4.variable

5.taglib

tag指令

作用:类似于page指令,指定Tag某些属性的值。   

格式:     <%@ tag 属性1=“1” 属性2=“2”...... %>  

或     <%@ tag 属性1=“1” %>

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

可设置的属性有body-content       language      import       pageEncoding

body-content属性

作用:定义JSP调用Tag时,标记体的格式。

格式<%@ tag body-content=“” %>

可取empty/tagdependent/scriptless三个值,

empty——JSP不能使用标记体;

tagdependent——标记体内容按纯文本处理;

scriptless——标记体中不能有Java程序片。

language属性:定义Tag使用的脚本语言,同JSP一样,目前只能设置为“Java”,无需设置。

import属性:引入Java核心包的类。

pageEncoding属性:指定Tag文件的字符编码,默认是ISO-8859-1

include指令

JSPinclude指令类似,回顾JSPinclude指令。

<%@ include file=“filename” %>JSP:Tag文件的使用_第1张图片

attribute指令

作用:实现JSPTag传送数据。

格式Tag

<%@ attribute name=“对象名字” required=“true” type=“对象类型” %>

在引用TagJSP<前缀: Tag文件名字 对象名字=“对象的引用”  />

<前缀: Tag文件名字 对象名字=“对象的引用” >标记体

例如: tag中定义:<%@ attribute name=“length”  required=“true"%>

 JSP中代码:

注意:1. 传送的是一个对象的引用

2. name属性是必须的,对应传送对象的名字。

3. type属性是对象的类型,必须带有包名,如“java.util.Date”不能简写成“Date”。默认值为java.lang.String类型。

4. required属性是可选的,默认值为false,为true时,JSP页面必须在标签中带有指定name属性的对象。

5. tag中不可再定义与name具有相同名字的变量,否则会使attribute对象失效。           

variable指令

作用:实现TagJSP返回数据。

格式1.Tag中首先声明:

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

2.然后调用jspContext内置对象的setAttribute()将对象存储到jspContext中,以便JSP调用。如:

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

3.那么在JSP中,可以直接通过对象名来使用这个对象。如:

int year=time.getYear()+1900

该代码使用Date的getYear()方法,将Tag传送的time对象中记录的时间年赋给year变量。          

注意:1. 返回的是一个对象。

2. JSP中不可再定义与name具有相同名字的变量,否则会出现编译错误。

3. scope定义了variableJSP中的使用范围,可取值为AT_BEGINNESTEDAT_ENDAT_BEGIN: JSP页面一旦使用Tag,就可以使用variable给出的对象。

NESTED: JSP页面只可以在Tag标记的标记体中使用variable给出的对象。

AT_END: JSP页面在Tag标记结束后才可以使用variable给出的对象。

6、Tag标记的嵌套

当我们使用Tag标记时,可以带有标记体,标记体还可以是一个Tag标记,这就实现了Tag标记的嵌套。Tag标记中的标记体由Tag文件的标记负责处理,而在Tag文件中,标记被替换成对“标记体”进行处理后所得到的结果。

7、JSP引擎与Tomcat服务器

将安装JSP引擎的计算机称作一个支持JSP的Web服务器。这个服务器负责运行JSP,并将运行结果返回给用户。

JSP的核心内容之一就是编写JSP页面,JSP页面是Web应用程序的重要组成部分。一个简单Web应用程序可能只有一个JSP页面,而一个复杂的Web应用程序可能由许多JSP页面、Javabean和servlet组成。当用户请求Web服务器上的JSP页面时,JSP引擎负责运行JSP,并将运行结果返回给用户。

  attribute指令

你可能感兴趣的:(servlet,java,前端)