• 自定义jstl标签



    原文链接:https://blog.csdn.net/qq_40369435/article/details/81081697

    第三章我们遇见了一个JSP标签,为了让接下来的学习能更清晰地认识标签,故做了以下hello.jsp中的hello标签与web.xml标签中的<taglib>元素,mytaglib.tld文件中的<tag>元素,以及HelloTag.class文件之前的对应关系

    1.1认识JSP标签

    标签编程在实际工作的开发中并不是很常见,也就是说自己开发标签的情况基本上是不存在的。因为这个与开发环境所限制,自己开发后的标签没有通用性。所有在实际中都是大量使用以及开发号的标签。例如JSTL或者Struts中都有标签。在这里学习自定义标签是为了建立一个完整的知识体系,更好的学习后边的内容。

    在JSP开发中就是在HTML代码中嵌入了大量的Java代码,这样一来使JSP页面充满了Java程序,维护起来非常不方便,那么此时就可以通过标签来完成。

    如果用户想要定义一个标签的话,直接继承TagSupport类

    定义标签支持类:HelloTag.java

    package org.lxh.tagdemo ;
    import javax.servlet.jsp.* ;
    import javax.servlet.jsp.tagext.* ;
    public class HelloTag extends TagSupport{
        public int doStartTag() throws JspException{
            JspWriter out = super.pageContext.getOut() ;
            try{
                out.println("<h1>Hello World!!!</h1>") ;
            }catch(Exception e){}
            return TagSupport.SKIP_BODY ;
        }
    }

    在标签开发之中最麻烦的就是返回值,下面给出一个返回值,由于现在定义的是一个没有标签体的标签,所有该返回值表示标签的其他内容不再执行。(导入jsp-api.jar包)

    只靠一个标签的支持类是无法完成全部功能的。下面还需要定义一个标签的描述文件,标签的描述文件的后缀“tld”,

    <?xml version="1.0" encoding="UTF-8"?>
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_1.xsd"
        version="2.1">
        <tlib-version>1.0</tlib-version>
        <short-name>firsttag</short-name>
        <tag>
        <name>hello</name>
        <tag-class>org.lxh.tagdemo.HelloTag</tag-class>
        <body-content>empty</body-content>
        </tag>
    </taglib>

    之后是JSP中的用法:
    
    <%@ page contentType="text/html" pageEncoding="GBK"%>
    <%@ taglib prefix="mytag" uri="mldn_hello"%>
    <html>
    <head><title>www.baidu.com</title></head>
    <body>
        <h1><mytag:hello/></h1>
    </body>
    </html>
    
    也可以在XML文件中进行设置映射:
    
            <taglib>
                <taglib-uri>mldn_hello</taglib-uri>
                <taglib-location>/WEB-INF/hellotag.tld</taglib-location>
            </taglib>
    
    在一个JSP文件中,基本功能:判断,输出。所有需要学更多的标签操作。

    1.2定义有属性的标签

    对于属性:<jsp:forward page=""/>,下载也可以自己定义属性。

    下面定义一个可以完成日期格式化显示的操作,希望用户可以输入自己的日期的格式化的模板,根据此模板完成当前日期的显示操作。

    标签处理类;

    package org.lxh.tagdemo ;
    import java.text.* ;
    import java.util.* ;
    import javax.servlet.jsp.* ;
    import javax.servlet.jsp.tagext.* ;
    public class DateTag extends TagSupport {
        private String format ;    // 当设置属性的时候可以通过setter完成
        public int doStartTag()
                   throws JspException{
            SimpleDateFormat sdf = new SimpleDateFormat(this.format) ;
            // 表示进行格式化的日期显示操作
            try{
                super.pageContext.getOut().write(sdf.format(new Date())) ;
            }catch(Exception e){
                e.printStackTrace() ;    // 异常处理操作
            }
            return TagSupport.SKIP_BODY ;
        }
        public void setFormat(String format){
            this.format = format ;
        }
        public String getFormat(){
            return this.format ;
        }
    }

    之后编写“tld”文件

    <?xml version="1.0" encoding="UTF-8"?>
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_1.xsd"
        version="2.1">
        <tlib-version>1.0</tlib-version>
        <short-name>datetag</short-name>
        <tag>
        <name>date</name>
        <tag-class>org.lxh.tagdemo.DateTag</tag-class>
        <body-content>empty</body-content>
        <attribute>
            <name>format</name>
            <required>true</required><!--此属性必须设置-->
            <rtexprvalue>true</rtexprvalue><!--支持表达式输出-->
        </attribute>
        </tag>
    </taglib>

    在xml文件中设置tld文件的路径

    <jsp-config>
    <taglib>
    <taglib-uri>mldn_date</taglib-uri>
    <taglib-location>/WEB-INF/datetag.tld</taglib-location>
    </taglib>
    </jsp-config>

    在JSP文件中进行操作:

    <%@ page contentType="text/html" pageEncoding="GBK"%>
    <%@ taglib prefix="mytag" uri="mldn_date"%>
    <html>
    <head><title>www.mldnjava.cn</title></head>
    <body>
        <h1><mytag:date format="yyyy-MM-dd HH:mm:ss.SSS"/></h1>
    </body>
    </html>

    此处的format就是标签操作中所需的属性,而此属性操作时,必须有响应的setter()和getter()方法进行接收。

    1.3TagSupport类

    标签的实现都需要继承TagSupport这个类,所以TagSupport类是整个标签编程的核心类。

     

  • 相关阅读:
    Android广播机制概述
    [AJAX系列]$.post(url,[data],[fn],[type])
    [AJAX系列]$.get(url,[data],[fn],[type])
    [AJAX系列]onreadystatechange事件
    [AJAX系列]XMLHttpResponse对象
    [AJAX系列]XMLHttpRequest请求
    [Ajax系列]Ajax介绍
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.4:create (default-cli) on project standalone-pom: Unable to parse configuration of 3: mojo org.apache.maven.plugins:
    Failed to execute goal org.codehaus.cargo:cargo-maven2-plugin:1.2.3:run (default-cli) on project Maven_WebTest: Execution default-cli of goal org.codehaus.cargo:cargo-maven2-plugin:1.2.3:run failed: C
    The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path。
  • 原文地址:https://www.cnblogs.com/isme-zjh/p/11883151.html
一二三 - 开发者的网上家园