码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2017-12-29 23:31:25      阅读:322      评论:0      收藏:0      [点我收藏+]

标签:throw   this   core   src   default   for   来替   contex   public   

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自定义标签处理转义字符

标签:throw   this   core   src   default   for   来替   contex   public   

原文地址:https://www.cnblogs.com/weishao-lsv/p/8146571.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!