• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    JSP自定义标签案例分析

    本文为大家介绍了JSP自定义标签的案例,供大家参考,具体内容如下

    案例一:实现一个基本防盗链标签

    1. 标签处理类

    public class MyReferer extends BodyTagSupport {
      private String site;
      private String back;
      public String getSite() {
        return site;
      }
      public void setSite(String site) {
        this.site = site;
      }
      public String getBack() {
        return back;
      }
      public void setBack(String back) {
        this.back = back;
      }
      public int doEndTag() throws JspException {
        // 获取JSP上下文环境对象
        PageContext pageContext = this.pageContext;
        // 获取到request对象
        HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
        // 判断
        String header = request.getHeader("referer");
        if(header != null  header.startsWith(getSite())){
          // 执行后续的页面
          return Tag.EVAL_PAGE;
        }else{
          // 页面的重定向
          HttpServletResponse response = (HttpServletResponse)pageContext.getResponse();
          try {
            response.sendRedirect(getBack());
          } catch (IOException e) {
            e.printStackTrace();
          }
          // 不执行
          return Tag.SKIP_PAGE;
        }
      }
    }
    

    2. 描述文件

    ?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">
     !-- 2. 编写标签库描述文件 --> 
     tlib-version>1.0/tlib-version>
     short-name>jnb/short-name>
      tag> 
      name>referer/name>
      tag-class>cn.itcast.custom.MyReferer/tag-class>
      body-content>empty/body-content>
       attribute>
        name>site/name>
        required>true/required>
        rtexprvalue>true/rtexprvalue>
      /attribute>
       attribute>
        name>back/name>
        required>true/required>
        rtexprvalue>true/rtexprvalue>
      /attribute>
     /tag>
    /taglib> 
    

    3. 引入和使用

    %@taglib uri="/WEB-INF/referer.tld" prefix="my"%>
      my:referer site=http://localhost:8080/day11/list.jsp
     back="/day11/list.jsp"/>
    

    JSP2.0自定义标签

    ---| SimpleTag 接口

    定义了标签处理类的生命周期方法。doTag()

    -----| SimpleTagSupport 类

    全部实现了SimpleTag接口的方法,因此后面我们只需要继承并重写该类即可。

    案例二:实现自己的if….else标签

    目标:

     %@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
      c:choose>
       c:when test="%= 12>1 %>">
          大于
       /c:when>
       c:otherwise>
          小于
       /c:otherwise>
      /c:choose>
    

    分析:

    1. ChooseTag.java,必须定义一个标记字段属性

    public class ChooseTag extends SimpleTagSupport {
      private boolean tag = true;
      public boolean isTag() {
        return tag;
      }
      public void setTag(boolean tag) {
        this.tag = tag;
      }
      // 遇到标签自动执行
      public void doTag() throws JspException, IOException {
        // 获取标签体对象
        JspFragment body = this.getJspBody();
        // 执行标签体
        body.invoke(null);
        super.doTag();
      }
    }

    2. WhenTag.java

    public class WhenTag extends SimpleTagSupport {
      private boolean test;
      public boolean isTest() {
        return test;
      }
      public void setTest(boolean test) {
        this.test = test;
      }
      // 遇到标签自动执行
      public void doTag() throws JspException, IOException {
        // 获取父元素
        ChooseTag choose = (ChooseTag)this.getParent();
        // 获取父元素的标记变量值
        boolean parent = choose.isTag();
        // 判断
        if( parent  this.isTest() ){
          // 执行标签体
          JspFragment body = this.getJspBody();
          body.invoke(null);
        }
        super.doTag();
      }
    }

    3. Otherwise.java

    public class OtherwiseTag extends SimpleTagSupport {
      
      // 遇到标签自动执行
      public void doTag() throws JspException, IOException {
        // 获取父元素
        ChooseTag choose = (ChooseTag)this.getParent();
        // 获取父元素的标记变量值
        boolean parent = choose.isTag();
        // 判断
        if(parent){
          // 执行标签体
          JspFragment body = this.getJspBody();
          body.invoke(null);
        }
        super.doTag();
      }
    }

    4. 描述文件

    ?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">
     !-- 2. 编写标签库描述文件 --> 
     tlib-version>1.0/tlib-version>
     short-name>jnb/short-name>
      tag> 
      name>choose/name>
      tag-class>cn.itcast.tags.ChooseTag/tag-class>
      body-content>scriptless/body-content>   JSP2.0方式
     /tag>
     tag> 
      name>when/name>
      tag-class>cn.itcast.tags.WhenTag/tag-class>
      body-content>scriptless/body-content>
      attribute>
        name>test/name>
        required>true/required>
        rtexprvalue>true/rtexprvalue>
      /attribute>
     /tag>
      
      tag> 
      name>otherwise/name>
      tag-class>cn.itcast.tags.OtherwiseTag/tag-class>
      body-content>scriptless/body-content>
     /tag>
    /taglib>

    5. 引入和使用

    %@taglib uri="/WEB-INF/ifelse.tld" prefix="jnb"%>
       jnb:choose>
        jnb:when test="%= 1>2 %>">
            小于
        /jnb:when>
        jnb:otherwise>
             大于
        /jnb:otherwise>
       /jnb:choose> 

    打包自定义标签库

    1.   建立一个taglibs文件夹

    2.   将所有的标签处理类对应的class文件连同包拷贝到1中的目录中

    3.   在1中的文件夹中建立一个META-INF文件夹

    4.   将tld文件拷贝到META-INF目录

    5.   编辑tld文件引入uri元素:uri>http://www.jnb.com/uri>     à提供引入的url路径

    6.   使用jar命令进行打包:D:\mytaglibs>jar cvf jnb.jar *

    总结

    主要掌握如何使用JSP2.0进行自定义标签的开发和打包。

    1.   建立一个taglibs文件夹

    2.   将所有的标签处理类对应的class文件连同包拷贝到1中的目录中

    3.   在1中的文件夹中建立一个META-INF文件夹

    4.   将tld文件拷贝到META-INF目录

    5.   编辑tld文件引入uri元素:uri>http://www.jnb.com/uri>     à提供引入的url路径

    6.   使用jar命令进行打包:D:\mytaglibs>jar cvf jnb.jar *

    总结

    主要掌握如何使用JSP2.0进行自定义标签的开发和打包。

    您可能感兴趣的文章:
    • php处理json格式数据经典案例总结
    • AngularJs解决跨域问题案例详解(简单方法)
    • BootStrap的JS插件之轮播效果案例详解
    • AngularJS实现元素显示和隐藏的几个案例
    • JavaScript多图片上传案例
    • ajax请求json数据案例详解
    • JS案例分享之金额小写转大写
    • js对象转json数组的简单实现案例
    • Ajax $.getJSON案例详解
    • javascript的理解及经典案例分析
    上一篇:JSP自定义标签基础知识学习
    下一篇:JSP页面传值乱码过滤方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    JSP自定义标签案例分析 JSP,自定义,标签,案例分析,