jsp自定义标签处理转义字符

Posted weishao-lsv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsp自定义标签处理转义字符相关的知识,希望对你有一定的参考价值。

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(0,message.length(),content,0);
         StringBuffer result=new StringBuffer(content.length+50);
         for(int i=0;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访问结果展示,通过自定义标签做到了特殊字符的转义

技术分享图片

 

以上是关于jsp自定义标签处理转义字符的主要内容,如果未能解决你的问题,请参考以下文章

JSP第六篇自定义标签之传统标签

自定义标签

07Java--JSP自定义标签

JSP自定义标签

jsp 自定义标签

jsp 自定义标签