zoukankan      html  css  js  c++  java
  • JSP自定义标签---三分钟,两种方法

    先贴出项目结构,然后分步进行讲解

    方法一

    1:创建标签类

    package com.www.servlet;
    
    import javax.servlet.jsp.tagext.*;
    import javax.servlet.jsp.*;
    import java.io.*;
    
    /**
     * Created by coisini on 2018/10/11.
     * 1:继承标签处理类SimpleTagSupport
     * 2:重写其doTag()方法
     */
    public class HelloTag extends SimpleTagSupport{
        @Override
        public void doTag() throws JspException, IOException {
            JspWriter out = getJspContext().getOut();
            out.println("Hello Custom Tag!");
        }
    }

    2:写标签配置文件  -myTag.tld

    <taglib>
      <tlib-version>1.0</tlib-version>
      <jsp-version>2.0</jsp-version>
      <short-name>Example TLD</short-name>
      <tag>
        <name>Hello</name>
        <tag-class>com.www.servlet.HelloTag</tag-class>
        <body-content>empty</body-content>
      </tag>
    
    </taglib>

    3:引用标签--jsp页面通过 taglib指令指定标签配置文件路径,引入自定义标签即可

    <!--
    路径问题
      1):绝对路径
        这里要注意,uri指定标签配置文件路径时路劲一定要写对
       有的小伙伴直接从教程copy的代码,上边uri="WEB-INF/myTag.tld",报红,找不到文件,为什么会这样呢
       在这里他是想写绝对路径,那么写绝对路径,没有根目录,怎么找得到从WEB-INF,所以要先指定根目录,/ 就代表了当前web项目,所以写成uri="/WEB-INF/myTag.tld"
       你也可以在WEB-INFO下再建一个文件夹,将标签配置文件放进去,都可以的,只要路径正确即可
    
     2):用相对路径
       根据我当前的项目结构,标签配置文件路径我也可以这样写  uri="../WEB-INF/myTag.tld"
    -->
    <%@ taglib prefix="ex" uri="/WEB-INF/myTag.tld"%>
    <html>
    <head>
      <title>A sample custom tag</title>
    </head>
    <body>
    <ex:Hello/>
    </body>

    4:展示结果--over

    5:如何引入多个自定义标签

      引入多个自定义标签

        一句话,多写一个标签类,配置文件多写一个<tag>标签,jsp页面多引入一个自定义标签,

        代码很简单,但是还是贴出来吧,万一有人看不懂,还得自己倒腾半天

               ==myTag.tld==
    <taglib>
      <tlib-version>1.0</tlib-version>
      <jsp-version>2.0</jsp-version>
      <short-name>Example TLD</short-name>
      <tag>
        <name>Hello</name>
        <tag-class>com.www.tag.HelloTag</tag-class>
        <body-content>empty</body-content>
      </tag>
      <tag>
        <name>World</name>
        <tag-class>com.www.tag.WorldTag</tag-class>
        <body-content>empty</body-content>
      </tag>
    </taglib>
    
        ==index.jsp==
    <%@ taglib prefix="ex" uri="../WEB-INF/myTag.tld"%>
    <html>
    <head>
      <title>A sample custom tag</title>
    </head>
    <body>
      <ex:Hello/>
      <ex:World/>
    </body>
    </html>
    
        

    方法二

    1:创建标签类

    2:写标签配置文件

    3:在web.xml中配置标签配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
        <jsp-config>
            <taglib>
                <!--
                这里相当于映射
                taglib-location,
                    指定标签配置文件的路径
                taglib-uri,
                    不就是别名嘛,你可以叫aa,bb或者 http://www/coisini,随便取,都是可以映射到的
                    但是,,转折来的, URI也是有规范的
                URI规范:
                    第一部分是协议
                    第二部分是存有该资源的主机IP地址(有时也包括端口号)
                    第三部分是主机资源的具体地址,如目录和文件名等
                    第一部分和第二部分之间用“://”符号隔开,第二部分和第三部分用“/”符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略。
                    eg:http://coisini/myTag
    
                 我这里呢没写规范,只是为了证明,别名可以自己取,只要能映射到就行,但是 大家还是要命名规范点
                -->
                <taglib-uri>coisini</taglib-uri>
                <taglib-location>/WEB-INF/myTag.tld</taglib-location>
            </taglib>
        </jsp-config>
    
    </web-app>

    4:jsp页面引入标签

    <!--如果是使用,web.xml配置的方式引用自定义标签,这里,uri就直接写<taglib-uri>coisini</taglib-uri>的值就可以-->
    <%@ taglib prefix="ex" uri="coisini"%>
    <html>
    <head>
      <title>A sample custom tag</title>
    </head>
    <body>
      <ex:Hello/>
      <ex:World/>
    </body>
    </html>

                  总结-两种方法差别在哪

    就是自定义标签配置文件的引用区别呗

    方法一:直接在jsp页面引入自定义标签配置文件(一定要注意路径问题

    方法二:自定义标签配置文件的路径配置在web.xml中,反射的原理,在jsp页面引用自定义标签时,uri取web.xml中<tablib-uri>的值即可(uri要规范取名

         
  • 相关阅读:
    刷题总结——疫情控制(NOIP2012提高组)
    刷题总结——竞赛得分(ssoj)
    刷题总结——货车运输
    刷题总结——火柴排队(NOIP2013)
    刷题总结——烽火传递(单调队列+dp)
    刷题总结——道路覆盖(ssoj)
    刷题总结——过河(NOIP2015)
    刷题总结——子串(NOIP2015提高组)
    linux shell 学习笔记--文件测试符
    linux shell 学习笔记--比较操作
  • 原文地址:https://www.cnblogs.com/coisini/p/9772408.html
Copyright © 2011-2022 走看看