當URL中攜帶的參數中包含特殊字符時需要進行URL編碼才能正確地進行偉遞。例如參數的值=&123時。
自定義一個JSP標簽,對參數進行URL編碼轉換:
import java.io.IOException;
import java.io.UnsupportedEncodingException;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.TagSupport;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif) /** *//**
* 對字符進行URL編碼.
*
* @author wang
*
*/
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif) public class URLEncoderTag extends BodyTagSupport {
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) /** *//**
*
*/
private static final long serialVersionUID = 1L;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) public int doStartTag() throws JspException {
return TagSupport.EVAL_BODY_AGAIN;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) public int doAfterBody() throws JspException {
BodyContent body = getBodyContent();// 得到標簽主體的內容
String b = body.getString();
JspWriter out = body.getEnclosingWriter();
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) try {
b=b.replaceAll("&", "&");
b=b.replaceAll("<", "<");
b=b.replaceAll(">", ">");
b=b.replaceAll(""", "\"");
b=b.replaceAll(" ", "");
b=b.replaceAll("—", "-");
b=b.replaceAll("“", "“");
b=b.replaceAll("”", "”");
b=b.replaceAll("'", "\'");
String s=java.net.URLEncoder.encode(b.trim(), "UTF-8");
out.write(s);// 對標簽主體的內容進行URL編碼
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return TagSupport.SKIP_BODY;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
codetag.tld文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>Application Tag Library</shortname>
<info></info>
<tag>
<name>urlencoder</name>
<tagclass>標簽類的類名</tagclass>
</tag>
</taglib>
JSP中使用標簽:
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif) <% @taglib uri="/tags/code-tag" prefix="code"%>
<a href="imageview.jsp?partNo=<code:urlencoder>AB&&#@TT</code:urlencoder>">測試</a>
服務端解碼:
java.net.URLDecoder.decode(客戶端轉來的值,"UTF-8");
|