【自定义标签开发】10-标签案例-开发转义标签

接下来我们开发我们最后一个自定义标签实例。
在网站上我们想直接显示html是不行的,它会自动被浏览器解析成html并加载,所以我们要将html代码的关键字进行转移,让浏览器认为他们是普通字符而不是html代码。

我们要开发一种标签,使这个标签包裹的内容中的html代码能够显示在页面上,前端效果类似于:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="/example" prefix="z" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Hello</title>
  </head>
 
  <body>
      <z:htmlfilter>
          <a href="www.baidu.com">超链接的写法</a>
      </z:htmlfilter>
  </body>
 
</html>

首先创建一个标签处理器类:


在其中实现转义的逻辑代码:
package org.zyg.web.exampleTag;

import java.io.IOException;
import java.io.StringWriter;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class HtmlfilterTag extends SimpleTagSupport {

    @Override
    public void doTag() throws JspException, IOException {
        JspFragment jf=this.getJspBody();
        StringWriter sw=new StringWriter();
        jf.invoke(sw);//给其一个带缓冲的writer流
        
        String content=sw.getBuffer().toString();//获得标签体内容
        //标签体的原始内容为"<a href="www.baidu.com">超链接的写法</a>"
        //我们要把它转义为"$lt;a href="www.baidu.com">超链接的写法$lt;/a>"
        content=filter(content);
        this.getJspContext().getOut().write(content);
    }
    
    /**
     * Apache的转义方法
     * @param message 要转义的字符串
     * @return String 转义后的字符串
     */
    public static 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("<");
                break;
            case '>':
                result.append(">");
                break;
            case '&':
                result.append("&");
                break;
            case '"':
                result.append(""");
                break;
            default:
                result.append(content[i]);
            }
        }
        return (result.toString());

    }

}

其中的转义代码参考的tomcat提供的一套转义方法,其位置在tomcat所在文件夹下的webapps\examples\WEB-INF\classes\util目录下的HTMLFilter.java文件。

然后我们在z.tld方法中注册这个标签:
<tag>
    <name>htmlfilter</name><!-- 标签名 -->
    <tag-class>org.zyg.web.exampleTag.HtmlfilterTag</tag-class>
    <body-content>scriptless</body-content><!-- 有无标签体(单标签还是成对标签) -->
</tag>

重启Web项目,我们来测试一下:
【自定义标签开发】10-标签案例-开发转义标签_第1张图片

发现我们将html代码成功的转义了。

转载请注明出处:http://blog.csdn.net/acmman/article/details/51381298

你可能感兴趣的:(jsp,标签,tag,SimpleTag)