自定义标签实现字符串截取功能
第一步:编写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;}@Overridepublic 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>