自定义标签实现字符串截取功能

第一步:编写java代码继承SimpleTagSupport类并重写父类的方法doTag(),该方法是关键,然后定义2个属性str(需要被截取的字符串),len(需要截取的长度。
package tag;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

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


public class MyTag extends SimpleTagSupport {

	private String str;
	private int len;
	
	public String getStr() {
		return str;
	}

	public void setStr(String str) {
		this.str = str;
	}

	public int getLen() {
		return len;
	}

	public void setLen(int len) {
		this.len = len;
	}

	@Override
	public void doTag() throws JspException, IOException {
		JspWriter out = this.getJspContext().getOut();
		StringBuilder sb = new StringBuilder();
		
		String temp = subStr(str,len);
		
		sb.append(temp);
		
		out.write(sb.toString());
		System.out.println(sb.toString());
	}

	public static void main(String[] args) {
		try {
			System.out.println(new MyTag().subStr("a的a飞z好d吧d吗", 7));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}
	
	/** 
	    * 将给定的字符串按着给定的截取长度截取 
	    * <br> 
	    * 注意一个汉字占2个字节 
	    * @param str 
	    * @param subSLength 
	    * @return 截取后的字符串 
	    * @throws UnsupportedEncodingException  
	    */  
	   public String subStr(String str, int subSLength)  
	           throws UnsupportedEncodingException{ 
	       if (str == null)  
	           return "";  
	       else{ 
	           int tempSubLength = subSLength;//截取字节数
	           String subStr = str.substring(0, str.length()<subSLength ? str.length() : subSLength);//截取的子串  
	           int subStrByetsL = subStr.getBytes("GBK").length;//截取子串的字节长度  
	           // 说明截取的字符串中包含有汉字  
	           while (subStrByetsL > tempSubLength){  
	               subStr = str.substring(0, --subSLength);  
	               subStrByetsL = subStr.getBytes("GBK").length;
	           }  
	           return subStr; 
	       }
	   }
}


第二步:编写tag.tld文件并将其放在WEB-INF目录下,如下所示

<?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">
    
  <tlib-version>1.0</tlib-version>
  <short-name>mytag</short-name>
  <uri>/WEB-INF/tag.tld</uri>

  <tag>
    <name>page</name>
    <tag-class>tag.MyTag</tag-class>
    <body-content>empty</body-content>
    <attribute>
        <name>str</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
        <type>java.lang.String</type>
    </attribute>
    <attribute>
        <name>len</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
        <type>java.lang.Integer</type>
    </attribute>
  </tag>

</taglib>


第三步:使用标签,如下

<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="/WEB-INF/tag.tld" prefix="mytag"%>
<%
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>
  </head>
  
  <body>
    <mytag:page len="8" str="a的a飞z好d吧d吗"></mytag:page>
  </body>
</html>

你可能感兴趣的:(java,jstl,自定义标签)