用tomcat作服务器的 时候,使用的是Struts框架,如果页面以get方式提交的话,url中含中文比如想通过点击某个会员的昵称(可以为中文)超链到他的 个人空间
http://localhost:8080/RunCommunity/member/showSpace.do?nickname=碧海蓝天 当交给struts中的Action处理的时候 通过String nickname=request.getParameter("nickname"); 来获得该字段的值的时候,会是乱码,当然后面的查询数据库就会失败了,即使数据库本来有页面上请求的这个记录还是会失败因为Action中或得的值已经与页面不一致了通过System.out.println测试输出会是乱码。从这推测通过get方式提交,在Struts框架中配置的字符编码转化过滤器好象并没有起作用,
public class EncodeFilter implements Filter{
public void destroy() {
}
//过滤请求 把编码格式改为GB2312
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
request.setCharacterEncoding("GBK");
filterChain.doFilter(request, arg1);
//请求回来做以下动作 关闭会话
HibernateSessionFactory.closeSession();
}
public void init(FilterConfig arg0) throws ServletException {
}
后面想了下在doFilter中添加如下代码
*Enumeration names = request.getParameterNames();
//过滤中文url地址 get方式提交的url中包含中文参数或值防止导致后台获得的值为乱码
//System.out.println("进入Filter,Requst为:"+names);//测试
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
// System.out.print(" parameter=" + name + "=");
String values[] = request.getParameterValues(name);
for (int i = 0; i < values.length; i++) {
//把每一个请求的参数都先转化为GBK 防止url中含中文参数或值或直接就是中文uri出现编码转化后乱码的问题
values[i]=new String(values[i].getBytes("iso-8859-1"),"GBK");
System.out.println(values[i]);//测试
}
System.out.println();//测试
}
Url中的含中文的问题得到解决,后台能正常获得以get方式提交的中文数据。问题还没结束,这样做虽然能正常获得get方式提交的中文数据,但如果图片的文件名为中文还是不能正常显示,因为在会员的个人空间里可以上穿图片
当然就可以是中文名的图片了,在服务器端用那种统一给图片另外取名的方式个人觉得不妥,很可能用户就是要这个图片以某种特定意义的名字来命名呢你把它该了会让人很不爽,所以就直接放弃了这个解决方案。
由于图片是保存在服务器端的本地硬盘上(非数据库中) 当请求某个含图片的JSP页面的时候,filter好象不好做response过滤吧,好象这个需求也不大,所以在jsp页面上也得对图片URL进行编码转化,关指定pageEncoding="gbk"和charset="gbk"是没用的 要对图片URL 地址单独处理
<IMG alt=Face
src="<%=basePath + URLEncoder.encode("图片的url","GBK")%>">
本以为到这因该没什么问题了,可惜还是不行 图片出不来,
修改Tomcat中的server.xml文件中改为:
<Connector
port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" />
再测试发现中文图片是可以出来了 当url 中含中文的问题又出现了,,仔细考虑了下可能是由于2次编码转化导致的冲突,把filter中后面加的那些对request的value做编码转化的代码删掉 问题彻底解决。
高兴ING。。。