请教一个关于jsp传输%百分号的问题

zhangfengsummer 2009-11-03 09:59:05
一个jsp页面,向一个servlet里发请求,传输的参数里有%百分号,其实就是一个sql语句的like关键字,然后我servlet里接受到的是乱码,其他的字符都可以,中文也行。
求解决方法。

jsp的页面编码是GBK的。



...全文
1124 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangfengsummer 2009-11-03
  • 打赏
  • 举报
回复
大家太搞笑了,没办法,正在试9楼和11楼的方法,有结果告诉大家
飞哥在线 2009-11-03
  • 打赏
  • 举报
回复
就用中文汉字“百分号”传过去
到了后台,“百分号”再转成“%”
道光2008 2009-11-03
  • 打赏
  • 举报
回复
encodeURI?这个不行???
测试没有啊
飞哥在线 2009-11-03
  • 打赏
  • 举报
回复
9楼说的有道理。。。
BearKin 2009-11-03
  • 打赏
  • 举报
回复
URI不能传 % 号(就是说不能通过get方法传这个) 不过你可以通过传其他的东西 比如什么标记 到了后台再将标记替换回 % 号
zhangfengsummer 2009-11-03
  • 打赏
  • 举报
回复
谢谢,我试了大家的意见,都不管用,我也很郁闷。

环境:

myeclipse6
jdk1.4.2(客户要求)
tomcat4.1.27(客户要求)

我的代码片段:
a.jsp

<%if(hasChild){%>
sQuery = sQuery + " and b." + filterName + " like '%" + filterValue + "%' ";
<%}else{%>
sQuery = sQuery + " and a." + filterName + " like '" + filterValue + "' ";
<%}%>


b_servlet.java


sQuery = request.getParameter("sQuery");



如果我的filterName 是中文,一点问题没有,但是只要加入了%,就无法转换了。
报的错是

java.io.CharConversionException: isHexDigit


谢谢。

libingyang860917 2009-11-03
  • 打赏
  • 举报
回复
request.setCharacterEncoding("gb2312");
把这个去了试试
若鱼1919 2009-11-03
  • 打赏
  • 举报
回复
很可能是你的其他代码出了问题。
a.jsp:
<a href="testParam?p=<%=java.net.URLEncoder.encode("中%国","gb2312")%>">TestEncodeParamServlet</a>
web.xml:
<servlet>
<servlet-name>TestEncodeParam</servlet-name>
<servlet-class>edu.sdkd.xjs.TestEncodeParamServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestEncodeParam</servlet-name>
<url-pattern>/testParam</url-pattern>
</servlet-mapping>
TestEncodeParamServlet.java:
response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("gb2312");
PrintWriter out=response.getWriter();
String p=new String(request.getParameter("p").getBytes("ISO-8859-1"),"gb2312");
out.print(p);
在我的机器上无乱码,我用的tomcat6.


道光2008 2009-11-03
  • 打赏
  • 举报
回复
<a href="javascript:b.jsp?p=encodeURI('中%国')">b.jsp </a>
接收页面
String p=new String(request.getParameter("p").getBytes("ISO-8859-1"),"gb2312");
zhangfengsummer 2009-11-03
  • 打赏
  • 举报
回复
试了,不管用,
我从这个jsp页面传到另外一个jsp页面的时候就可以得到正确的%,
但是如果从这个jsp页面直接传到servlet就接受为乱码。

不过还是谢谢你,我就是试了网上的一些解决办法不好使才上来请教大家的,请大家积极帮助我
若鱼1919 2009-11-03
  • 打赏
  • 举报
回复
<a href="b.jsp?p=<%=java.net.URLEncoder.encode("中%国","gb2312")%>">b.jsp</a>
接受页面
String p=new String(request.getParameter("p").getBytes("ISO-8859-1"),"gb2312");
zhangfengsummer 2009-11-03
  • 打赏
  • 举报
回复
说详细点?
若鱼1919 2009-11-03
  • 打赏
  • 举报
回复
(1)字符替换,把%替换成一个其他的字符,不推荐
(2)对URL编码,推荐
zhangfengsummer 2009-11-03
  • 打赏
  • 举报
回复
我说有就有!




呵呵。
BearKin 2009-11-03
  • 打赏
  • 举报
回复
搞笑?我可没有啊 ...
zhangfengsummer 2009-11-03
  • 打赏
  • 举报
回复
搞定了,现在总结如下:

采用了9楼和11楼童鞋们的做法,总感觉有点不太爽,不过算了,人要开通一些,效率为高。


然后我在测试的时候发现,如果是url里的参数名,比如
filterName=<%=filterName%>


在servlet里如果取filterName就不行。
request.getParamter("filterName");

如果是中文,会乱码。

但是如果我把url里的参数名子改成fName,对应的servlet里取"fName",就没有问题。

暂时的结论:
不能将url里参数名和对应的参数值的名字相同,很迷惑,但是我这里就是这样。

再次谢谢各位童鞋们。

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧