sun公司提供的jstl虽然比较强大,但是开发中很难满足我们所有的需求,并且开发也禁止在jsp中写很多java代码,因此很多场景需要自己定义标签进行项目开发

sun提供的标签库引用方式:<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

以下案例为自定义标签开发

自定义标签开发流程:

  1.需要标签处理器类,用来替换jsp中的Java代码,也就是我们的功能代码类

  2.标签处理器类需要描述到一个tld的文件中( tld直接放在WEB-INF下即可)

  3.jsp应用 <%@taglib uri="xxx" prefix="xxx"%>

  注意: prefix尽量和描述的tld文件名一致,便于开发查找

标签处理器类

public class Escape extends SimpleTagSupport{

    public void doTag() throws JspException, IOException {
         JspFragment js=this.getJspBody();
         StringWriter sw=new StringWriter();
         js.invoke(sw);
         String content=sw.getBuffer().toString();
         content=filter(content);
         this.getJspContext().getOut().write(content);
    }

    private String filter(String message) {
         if(message==null){
             return null;
         }
         char content[]=new char[message.length()];
         message.getChars(,message.length(),content,);
         StringBuffer result=);
         ;i<content.length;i++){
             switch (content[i]) {
            case '<':
                result.append("&lt;");
                break;
            case '>':
                result.append("&gt;");
                break;
            case '&':
                result.append("&amp;");
                break;
            case '"':
                result.append("&quot;");
                break;
            default:
                result.append(content[i]);
            }
         }
        return result.toString();
    }
}

simple.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_0.xsd"
    version="2.0">

    <description>JSTL 1.1 core library</description>
    <tlib-version>1.0</tlib-version>
    <short-name>simple</short-name>
    <uri>http://simple.tag</uri>
    <tag>
        <name>escape</name>
        <tag-class>tag.Escape</tag-class>
        <body-content>scriptless</body-content>
    </tag>
</taglib>

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://simple.tag" prefix="simple" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>转义标签</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
  </head>

  <body>
        <simple:escape>
             <a href="http://www.baidu.com">百度</a>
        </simple:escape>
        <a href="http://www.baidu.com">百度</a>
  </body>
</html>

启动tomcat访问结果展示,通过自定义标签做到了特殊字符的转义

最新文章

  1. MySql无限分类数据结构--预排序遍历树算法
  2. 前端Html和Css面试题
  3. android的多渠道打包
  4. MMO之禅(二)职业精神
  5. Bootstrap 2.3.2学习
  6. 不错的jQuery图表插件 .
  7. IIS发布站点错误
  8. 自定义JQuery插件之 beforeFocus
  9. C#中调用Windows API时的数据类型对应关系
  10. 模态Model视图Push下一个视图(混合跳转)
  11. HDU 6033 Add More Zero (数学)
  12. c++中的类之构造函数
  13. Java作业:第一次过程性考核 ——长春职业技术学院 16级网络工程
  14. 《算法导论》——计数排序Counting Sort
  15. 廖雪峰Java1-1Java入门-java简介
  16. Enterprise Library 6.0 参考源码索引
  17. devise修改密码
  18. CSS元素、边框、背景、列表样式
  19. SQL中的CONVERT();cast()函数
  20. lable标签的妙用

热门文章

  1. 浅析拯救小矮人的 nlogn 算法及其证明
  2. Maven Pom文件标签详解
  3. 【Luogu4221】[WC2018] 州区划分
  4. 【leetcode】All Paths From Source to Target
  5. synchronized 与 lock 的区别
  6. POJ 1743 Musical Theme ( 后缀数组 &amp;&amp; 最长不重叠相似子串 )
  7. layer.confirm
  8. Jquery TextBox进入focus的时候 改变background-color
  9. Qmake: Q_OBJECT
  10. 获取浏览区变化的方法resize() 方法