zoukankan      html  css  js  c++  java
  • JavaWeb基础—JSP自定义标签入门

    自定义标签的作用:替换JSP页面的java代码

    步骤:1.标签处理类(标签是一个对象,那也就需要先有类)  

       2.tld文件 它是一个xml(可以向c标签里借),一般放到WEB-INF下,不让客户端浏览器看到
          核心配置 <tag>
            <name>myTag</name>
            <tag-class>com.jiangbei.tag.MyTag</tag-class>
            <body-content>empty</body-content>
              </tag>
            【注意tag-class里面的对应的类记得改!】
       3.使用<%@taglib%>指定tld文件路径

      例如:

        标签处理类:

    public class MyTag implements SimpleTag{
    
        private PageContext pageContext;
        private JspFragment body;
        
        @Override
        public void doTag() throws JspException, IOException {
            // 想要向页面输出,需要out,pageContext一个顶九个,可以得到out
            pageContext.getOut().print("Hello World");
            
        }
    
        @Override
        public JspTag getParent() {
            // TODO Auto-generated method stub
            return null;
        }
    
        @Override
        public void setJspBody(JspFragment jspBody) {
            this.body = jspBody;
            
        }
    
        @Override
        public void setJspContext(JspContext pc) {
            //服务器传过来给他保存起来
            this.pageContext = (PageContext) pc;
            
        }
    
        @Override
        public void setParent(JspTag parent) {
            // TODO Auto-generated method stub
            
        }
    
    }

     在此目录下建立tld文件

    文件内容如下:

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
        version="2.1">
    
    
        <tlib-version>1.0</tlib-version>
        <short-name>itcast</short-name>
        <uri>http://www.itcast.cn/tags/1.0</uri>
    
        <tag>
            <name>myTag</name>
            <tag-class>com.jiangbei.tag.MyTag</tag-class>
            <body-content>empty</body-content>
        </tag>
    
        <tag>
            <name>myTag2</name>
            <tag-class>com.jiangbei.tag.MyTag2</tag-class>
            <body-content>empty</body-content>
        </tag>
    
        <tag>
            <name>myTag3</name>
            <tag-class>com.jiangbei.tag.MyTag3</tag-class>
            <body-content>scriptless</body-content>
        </tag>
        
        <tag>
            <name>myTag4</name>
            <tag-class>com.jiangbei.tag.MyTag4</tag-class>
            <body-content>scriptless</body-content>
            <attribute>
                <name>test</name>
                <required>true</required>
                <rtexprvalue>true</rtexprvalue>
            </attribute>
        </tag>
    
    </taglib>

    直接继承类而避免直接实现接口:

      

    public class MyTag3 extends SimpleTagSupport{
    
        @Override
        public void doTag() throws JspException, IOException {
            //获取流,为了执行的参数输出
            Writer out = this.getJspContext().getOut();
            out.write("********************<br/>");
            //执行标签体内容,写到指定的流中(页面上)
            this.getJspBody().invoke(out);
            out.write("<br/>********************");
        }
        
    }

    标签处理类(JspFragment jsp片段,就是内容)
    实现simpleTag接口:5个方法(当然不会你自己调用,tomcat帮你调用)
    doTag()每次执行标签时都会调用这个方法,会在其它方法之后被tomcat调用
    set/getParent 操作父标签的方法,其中get为非生命周期方法
    setJspBody(JspFragment jspBody)
    void setJspContext(JspContext pc)
    当然,有时候实现接口是非常不方便的,于是就有了一个类给我们继承
    SimpleTagSupport,已经帮我们把东西都存好了,并且提供了get方法
    供子类调用
    标签体内容支持的类型
    empty
    JSP:已经不支持!(标签体内容可以是JAVA脚本、EL表达式等)
    scriptless 是EL表达式(当然普通字符串也是可以得)
    第四种无用!

    可以使用在标签处理类doTag()方法中throw new SkipPageException,
    tomcat认识这个标签,它会进行捕获。后面的不会再执行
    work目录下看真身可以看到实现究竟

    可以给标签添加属性:
    给标签处理类添加属性
    在tld文件中对属性进行配置(都见WEB-INF下的tlds的itcast_tld)
    rtexprvalue:运行时表达式值,就是可不可以是EL表达式值

  • 相关阅读:
    c中%
    led,key通用IO的端口
    运行UART的程序
    大端和小段
    看门狗
    关于webpack的path和publicPath。
    转义BABEL的POLYFILL和RUNTIME的区别
    前端博客地址
    Webpack的使用指南-Webpack的常用解决方案
    webpack学习笔记
  • 原文地址:https://www.cnblogs.com/jiangbei/p/6690103.html
Copyright © 2011-2022 走看看