zoukankan      html  css  js  c++  java
  • 自定义标签


    1. 步骤
      * 标签处理类(标签也是一个对象,那么就需要先有类!)
      * tld文件,它是一个xml
      * 页面中使用<%@taglib%>来指定tld文件的位置

    2. 标签处理类
      SimpleTag接口:

     void doTag();//每次执行标签时都会调用这个方法;
     JspTag getParent();//返回父标签(非生命周期方法)
     void setParent(JspTag);//设置父标签
     void setJspBody(JspFragment);//设置标签体
     void seetJspContext(JspContext);//设置jsp上下文对象,它儿子是PageContex

      其中doTag()会在其他三个方法之后被tomcat调用。

     代码:

    public class TagDemo extends SimpleTagSupport {
            public void doTag(){
                //获取JSP页面的PageContext
                PageContext pc =(PageContext) this.getJspContext();
                //根据PageContext获得requset
                HttpServletRequest requset=(HttpServletRequest) pc.getRequest();
                //获得IP
                String ip = requset.getRemoteAddr();
                //使用out把IP输入到页面上
                JspWriter out=pc.getOut();
                try {
                    out.print(ip);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    }


    3. 配置tld文件

    tld文件一般都放到WEB-INF之下,这样保证客户端访问不到!

    <?xml version="1.0" encoding="UTF-8"?>
    <taglib version="2.1" 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 web-jsptaglibrary_2_1.xsd">
        <tlib-version>1.0</tlib-version>
        <short-name>demo</short-name>
        <uri>www.it.com/demo</uri>
        <!--如果是在描述页面的需要使用的标签,在tld文件中需要使用tag标签来描述-->
         <tag>
             <!--  页面需要使用名字ip  -->
             <name>ip</name>
             <!--引入当前指定的那个类  -->
             <tag-class>cn.it.add.TagDemo</tag-class>
             <!--定义当前的标签体中的
                  是否可以书写其他内容?
                  empty: 单标签 没有内容
                  JSP: 标签体中书写JSP相关的所有的内容
                  scriptless:标签体无脚本代码
                  tagdependent: 可以有子标签
               -->
               <body-content>empty</body-content>
         </tag>
    </taglib>

    4. 页面中指定tld文件位置

    <%@ taglib prefix="it" uri="/WEB-INF/tlds/itcast-tag.tld" %>
    导标签库,就是为页面指定tld文件的位置!

    -------------------------------

    进阶

    标签体内容
      * empty:无标签体!
      * JSP:jsp2.0已经不在支持这个类型了!表示标签体内容可以是:java脚本,可以是标签,可以是el表达式
      * scriptless:只能是EL表达式,也可以是其他的标签!
      * tagdependent:标签体内容不会被执行,而是直接赋值标签处理类!

    不在执行标签下面内容的标签!

    在标签处理类中的doTag()中使用SkipPageException来结束!
      Tomcat会调用标签处理类的doTag()方法,然后Tomcat会得到SkipPageException,它会跳过本页面其他内容!

    ---------------

    标签属性

    步骤:
    1. 给你的标签处理类添加属性!
      为标签处理类添加属性,属性至少要且一个set方法!这个set方法会在doTag()方法之前被tomcat执行!所在doTag()中就可以使用属性了。

    2. 在tld文件中对属性进行配置

          <attribute>
              <name>test</name> <!--指定属性名-->
              <required>true</required><!-- 指定属性是否为必需的-->
              <rtexprvalue>true</rtexprvalue><!-- 指定属性是否可以使用EL-->
          </attribute>
  • 相关阅读:
    那些年,我们一起做过的 Java 课后练习题(66 70)
    UI自动化测试:App的WebView页面中,当搜索栏无搜索按钮时处理方法
    追剧《大秦帝国》之感
    雷达距离方程 理解
    观影<和平战士> 之后感
    【转】使用blend改变图片颜色
    ios UITabBar/UITabBarController
    Windows批处理开启/停止服务及隐藏批处理窗口
    Windows设置定时自动重启
    Windows使用命令行查看文件的hash值(certutil)
  • 原文地址:https://www.cnblogs.com/lxp503238/p/7047440.html
Copyright © 2011-2022 走看看