zoukankan      html  css  js  c++  java
  • Jsp2.0自定义标签(第一天)——一个简单的例子

    今天是学习自定义标签的第一天

    Jsp2.0以来,自定义标签的实现比传统标签的实现容易了很多,一般只要extends类SimpleSupport重写doTag()方法即可。

    image

    先看最简单的例子,输出一个Hello World

    效果图:

    image

    jsp页面的代码

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@taglib prefix="myout" uri="/lirui" %>
    <html>
    <head>
    </head>
    <body>
        <h1>我的测试页面</h1>
        <myout:demo value="Hello World"/>
    </body>
    </html>

    页面上的Hello World就是<myout:demo value="Hello World"/> 这一行代码输出的,

    但是<myout:demo value="Hello World"/> 为什么会输出Hello World呢?是哪里定义了该标签有输出value值的功能呢?

    解答:

    要实现<myout:demo value="Hello World"/> 有输出功能,主要有四部分:

    第一部分:定义标签的地方。既然是自定义标签,自然有定义该标签的文件(*.tld),这里定义为demo.tld,一般放在WEB-INF下

    <?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_0.xsd" version="2.0">
        <tlib-version>1.0</tlib-version>
        <short-name>myout</short-name>
        <!-- 输出值 -->
        <tag>
            <!-- 定义标签的名称 -->
            <name>demo</name>
            <!-- 定义该标签的具体业务逻辑,比如上面的输入:Hello World -->
            <tag-class>com.tag.support.TagDemo</tag-class>
            <!-- 标签体是否为空,这里设置为空 -->
            <body-content>empty</body-content>
            <!-- 标签的属性 -->
            <attribute>
                <!-- 属性名 -->
                <name>value</name>
                <!-- 是否必须,true表示必须要写value属性值 -->
                <required>true</required>
                <!-- 是否支持表达式,一般是EL表达式 -->
                <rtexprvalue>true</rtexprvalue>
            </attribute>
        </tag>
    <taglib>

    第二部分:实现具体业务功能的类,也就是上面demo.tld中的<tag-class>com.tag.support.TagDemo</tag-class>

    在Jsp2.0以后,自定义标签的实现类一般继承SimpleTagSupport这个类并重写doTag方法

    import java.io.IOException;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.SimpleTagSupport;
    
    public class TagDemo extends SimpleTagSupport {
        //注意:这个属性要与tld文件中定义的属性一致,并提供get和set方法
        private String value;
        
        public String getValue() {
            return value;
        }
    
        public void setValue(String value) {
            this.value = value;
        }
        //具体业务实现类
        @Override
        public void doTag() throws JspException, IOException {
            //this.getJspContext()获得JspContext对象也就是前台页面的PageContext
            //可以看出页面输出Hello World注意是这里的write方法实现的
            this.getJspContext().getOut().write(value);
        }
    }

    第三部分:在页面引入该标签。

    <%@taglib prefix="myout" uri="/demo" %>

    但是这地方有些问题,uri=“/demo”究竟是怎么引用到上面所定义的标签呢?

    别急还有第四部分

    第四部分:在web.xml中定义uri指向

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

    现在明白对前面的引入究竟是怎么一回事了吧!!!

    其实还有另外一种方式在指向/demo,就是在前面的demo.tld文件中加上<uri>/demo</uri>,具体看下面

    <?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_0.xsd" version="2.0">
        <tlib-version>1.0</tlib-version>
        <short-name>myout</short-name>
        
    <!-- 这就是比上面的demo.tld文件多添加了一行 ,web.xml里就不需要再配置了--><uri>/demo</uri>
        <!-- 输出值 -->
        <tag>
            <!-- 定义标签的名称 -->
            <name>demo</name>
            <!-- 定义该标签的具体业务逻辑,比如上面的输入:Hello World -->
            <tag-class>com.tag.support.TagDemo</tag-class>
            <!-- 标签体是否为空,这里设置为空 -->
            <body-content>empty</body-content>
            <!-- 标签的属性 -->
            <attribute>
                <!-- 属性名 -->
                <name>value</name>
                <!-- 是否必须,true表示必须要写value属性值 -->
                <required>true</required>
                <!-- 是否支持表达式,一般是EL表达式 -->
                <rtexprvalue>true</rtexprvalue>
            </attribute>
        </tag>
    </taglib>

    这样的话,你在web.xml就不需要配置了。

    今天是学习Jsp自定义标签第一天,例子也比较简单,后续会慢慢深入。。。

    由于是分享自己的学习心得,可能有地方还有问题,请看到问题的网友及时指正。

  • 相关阅读:
    Mysql String Functions
    Array JSON
    $(document).ready vs $(window).load vs window.onload
    jquery,返回到顶部按钮
    html5 教程网站
    js,replace() 和 正则表达式(regular expression)
    设置 textarea 默认滑动到底部
    工作常用英语单词整理2
    工作常用英语单词整理1
    javascript,jquery代码规范
  • 原文地址:https://www.cnblogs.com/liruiloveparents/p/5007085.html
Copyright © 2011-2022 走看看