• 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” %>

    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指令

  • 相关阅读:
    聚乙二醇/聚吡咯/多聚赖氨酸(PLL)/聚合物-聚乙烯亚胺(PEI)包裹四氧化三铁磁性纳米颗粒
    Android后台执行限制
    JWT(1): JWT介绍
    电脑重装系统后安全中心有个黄色感叹号如何处理
    数据库操作
    deque容器 常用 API操作
    激光切割机机械结构设计
    音视频总结
    全新升级的AOP框架Dora.Interception[6]: 框架设计和实现原理
    设计模式(二)——策略模式(Strategy)
  • 原文地址:https://blog.csdn.net/weixin_65589140/article/details/134541382