关于jsp传递参数乱码问题

时间:2008-05-10 10:56:11   来源:论坛整理  作者:  编辑:chinaitzhe
我用Struts开发的工程统一用的是GBK编码,在进行分页显示传递参数的时候,中文参数乱码

-----------------------------第一次查询---------------------------------
JSP:
<input type="text" name="title"> <input type="button" value="查询">

Action:
String title = request.getParameter("title"); 中文参数正常
request.setAttribute("title",title);
-----------------------------------------------------------------------

-----------------------------点击下一页---------------------------------
JSP:
<%@ taglib uri="http://jsptags.com/tags/navigation/pager" prefix="pg"%>
<pg:param name="title" value='${title}' /> 中文参数正常

Action:
String title = request.getParameter("title"); 中文参数乱码
--------------------------------------------------------------------------

我设置了GBK编码过滤器(传递时有经过过滤器)
Server.xml设置了 URIEncoding="GBK"
页面 <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
都不行,最后用强转
title = new String(title.etBytes("iso8859-1"),"GBK");

title = new String(title.etBytes("iso8859-1"),"gb2312");

还是没有解决,肯请高手们多多指教


网友回复:咋就没人给个回应呢
网友回复:过滤器 代码 写一下 就可以了 其他的应该不用在过滤了

过滤器的代码

HttpServletRequest em=(HttpServletRequest)request;
em.setCharacterEncoding("GBK");


只要在 web.xml 里
<url-pattern>/* </url-pattern>
/* 所有的页都会自动过滤中文 不管你如何调用
网友回复:
引用 2 楼 chenml823 的回复:
过滤器 代码 写一下 就可以了 其他的应该不用在过滤了

过滤器的代码

HttpServletRequest em=(HttpServletRequest)request;
em.setCharacterEncoding("GBK");


只要在 web.xml 里
<url-pattern>/* </url-pattern>
/* 所有的页都会自动过滤中文 不管你如何调用

这个我有提到了,我已经设置了
网友回复:假如页面出现的 乱码 就在页面加
request.setCharacterEncoding("GBK");
假如是在 servlet里面出现的乱码 就在 servlet 里加上面的代码.
网友回复:你的form提交方式为get?
tomcat的配置文件server.xml里加这句:
XML code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/



 <Connector URIEncoding="GBK"

               port="8080" maxHttpHeaderSize="8192"

               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

               enableLookups="false" redirectPort="8443" acceptCount="100"

               connectionTimeout="20000" disableUploadTimeout="true" />


filter只能解决form为post的,对get无效
网友回复:
引用 5 楼 nanjg 的回复:
你的form提交方式为get?
tomcat的配置文件server.xml里加这句:

XML code <Connector URIEncoding="GBK"
port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />


filter只能解…

这个我有提到了,我已经设置了
网友回复:
引用 4 楼 Allen_Chao 的回复:
假如页面出现的 乱码 就在页面加
request.setCharacterEncoding("GBK");
假如是在 servlet里面出现的乱码 就在 servlet 里加上面的代码.


已经在过滤器里设置了,而且在页面请求到服务器时就有经过过滤器
网友回复:
在每个jsp页面加上下面3行:
<%@ page pageEncoding="GBK"%>
<%@ page contentType="text/html;charset=GBK"%>
<%request.setCharacterEncoding("GBK");%>
//把GBK改成gb2312也可以

看看行不行
网友回复:action里加上request.setCharacterEncoding("GBK");
试试.

估计假如用request强制转换的方法都不行,那上面的方法也不行.

不会是没重新部署吧,
1.你把E:\Tomcat 5.5\work\Catalina\localhost下的和你工程名相同的文件删除掉.
2.重起TOMCAT,然后重新部署工程试试.

记得大学的一个最高手的老师经常说:大傻猫,...
所以请看看是不是大傻猫的问题.
网友回复:我觉得假如用过滤器和request强制转换这两种万能方法都不行.
应该就是工程在TOMCAT服务器下的.class文件没被替换.

反正在TOMCAT5.0之前经常有这问题.都习惯把%TOMCAT_HOME%\work\Catalina\localhost的快捷方式放桌面上了.
网友回复:给你看看我传参时乱码的处理方法吧,你对照一下哪一步没有做好。

①修改Tomcat---->conf----->server.xml文件,在修改端口的标签后面加一行代码,如下:

XML code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





 <Connector port="8080" protocol="HTTP/1.1" 

               connectionTimeout="20000" 

               redirectPort="8443"  URIEncoding="UTF-8"/>




②编写过滤器Filter

Java code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





import java.io.IOException;



import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;



public class CharacterEncodingFilter implements Filter ...{



    @Override

    public void destroy() ...{

    }



    @Override

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException   {

    request.setCharacterEncoding("utf-8");

    chain.doFilter(request, response);

    }



    @Override

    public void init(FilterConfig arg0) throws ServletException ...{

    }



}



利用过滤器,把requst传递的中文参数都设成“UTF-8”编码。

③修改web.xml文件

打开项目里的web.xml文件,在前面加上如下代码:

XML code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





<filter>

 <filter-name>characterEncoding</filter-name>

 <filter-class>com.v512.example.CharacterEncodingFilter</filter-class>

 </filter>

 <filter-mapping>

 <filter-name>characterEncoding</filter-name>

 <url-pattern>/*</url-pattern>

 </filter-mapping>




注重其过滤的URL为“/*”,表示当前的request请求。为了使设置生效,重起tomcat。

网友回复:
引用 11 楼 ivorytower 的回复:
给你看看我传参时乱码的处理方法吧,你对照一下哪一步没有做好。

①修改Tomcat---->conf----->server.xml文件,在修改端口的标签后面加一行代码,如下:


XML code
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>


②编写过滤器Filter


Java code
import java.io.IOException;

import ja…

网友回复:在struts配置文件src/struts.xml里

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

<constant name="struts.i18n.encoding" value="GBK" />

<package name
网友回复:非常感谢大家的热心回复,问题我自己已经找出来了
<%@ taglib uri="http://jsptags.com/tags/navigation/pager" prefix="pg"%>
是这个国外标签不支持中文,只要不用这个标签就可以了,或者把工程统一改成UTF-8,这样更麻烦
关键字:jsp,传递,参数,乱码,问题,
上一篇:sessioncontains

相关文章

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面