当前位置: 首页 > 编程笔记 >

JSP自定义标签案例分析

伊富
2023-03-14
本文向大家介绍JSP自定义标签案例分析,包括了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进行自定义标签的开发和打包。

 类似资料:
  • 主要内容:自定义标签的语法,简单示例,tld标签库描述文件,自定义标签属性,自定义标签的标签体自定义标签就是用户(开发者)自己定义的标签。自定义标签可以让 JSP 页面中不含有 Java 代码,只含有 HTML 代码和部分标签,就能实现业务逻辑的调用。 自定义标签的优点如下: 减少 JSP 页面对脚本的需求和依赖性 将 JSP 页面和业务逻辑分开,增加了程序的可维护性 可重复调用相同的业务逻辑,增加了程序的可重用性 使用自定义标签步骤如下: 自定义标签实现类 编写 tld 标签库描述文件

  • 自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。 JSP标签扩展可以让你创建新的标签并且可以直接插入到一个JSP页面。 JSP 2.0规范中引入Simple Tag Handlers来编写这些自定义标记。 你可以继承SimpleTa

  • 问题内容: 我正在构建一个实现HTML5音频标签的音乐播放器Web应用程序,但是希望它在所有浏览器中看起来都一样-是否可以定义我自己的自定义CSS?如何? 问题答案: 当前尚无使用CSS设置HTML5 播放器样式的方法。相反,您可以不使用该属性,而使用Javascript实现自己的控件。如果您不想自己全部实现它们,建议您使用现有的主题化HTML5音频播放器

  • 我正在尝试创建一个自定义标签类型,该类型将包含一个“淡出”函数。这用于显示将闪烁然后隐藏的消息。 我正在使用Eclipse、SceneBuilder和Javafx。我不知道该怎么做,也不知道是否可能,但到目前为止,我已经做到了: 这显然行不通。 这是我第一次在一个文件中处理凌乱的代码(因此,我尝试将代码从版本1拉入一个新的“对象”,我可以在多个类中使用它): 如果您有任何建议或帮助,我们将不胜感激

  • 本文向大家介绍JSP中param标签用法实例分析,包括了JSP中param标签用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了JSP中param标签用法。分享给大家供大家参考,具体如下: Jsp中param标签的使用 <jsp:param>操作被用来以"名-值"对的形式为其他标签提供附加信息。它和<jsp:include>、<jsp:forward>、<jsp:plugin>一

  • 我正在创建一个自定义JSP标记,以从数据对象生成表。为了使代码更简洁,我想为行创建一个单独的标记文件,但我似乎无法在我的主自定义标记中包含自定义标记(抱歉,我知道这很混乱)。 例如我有: 桌子标签: 一行标签 注意第一个文件中的导入(<代码> 我试图将导入更改为<代码> 我做错了什么?