今天在做门户密码验证的时候遇到特殊字符后台却莫名奇妙的报错如下:
E SRVE0026E: [Servlet
错误]-[]:java.lang.IllegalArgumentException
参数转换错误,我想应该是传参过程中有特殊字符,下面是从网上搜的一篇关于ajax中传参过程中遇见特殊字符怎么办,很受用,按照下面的方法错误就解决了,呵呵。
Ajax参数传递到服务端时含有特殊字符的参数解决。这类特殊字符包括:%、\。现象:有时一部分参数值传过去了,或者后台直接报错:转码失败!
例如:
统一编码UTF-8.
1.JSP页面:
pageEncoding="UTF-8"%>
2.Ajax.js页面:传递参数时,可能出现特殊字符的参数用escape(encodeURIComponent())两函数进行转码,传递到后台!
var url =
"/ZX/servlet/AddMemoServlet?memo=" + memoCode +
"&otherMemo=" + escape
(encodeURIComponent(otherMemo)) +
"&applNo=" +
applNo.innerText.substr(0,16); //alert("url="+url);
xmlHttp.open("POST",
url, true);
xmlHttp.onreadystatechange
= doMemo;
xmlHttp.send(null);
3.服务器端接收传递的数据 比如:一个servlet的doGet方法中:
request.setCharacterEncoding("gb2312");
response.setContentType("text/xml;charset=utf-8");
response.setHeader("Cache-Control",
"no-cache");
......
//以下解决Ajax中url传递的参数值中包含特殊字符,后端解析出错的问题:以utf-8以方式解码
java.net.URLDecoder urlDecoder=new
java.net.URLDecoder();
String otherMemo
=
urlDecoder.decode(request.getParameter("otherMemo"),"utf-8");
logger.info("otherMemo:"
+ otherMemo);