一个困扰好久的乱码问题

 最近在在项目中要开发一个发布系统,用来发布新闻等。页面上用了fck编辑器,
在页面上提交发布的内容,先前是默认的get提交,一直没有出现乱码,因为内容比较多,必须采用post提交,
但是一直出现了乱码。我的页面设置的全是utf-8

 而且在BaseAction 里面

               /**
	 * 获得客户端参数值,返回值已经经过了转码。
	 */	
	protected String getParam(String name){
		String tmp = getRequest().getParameter(name);
		if(log.isDebugEnabled()){
			log.debug("request.getParamter: " + name + " = " + tmp);
		}
		if(tmp==null || "".equals(tmp)){
			return null;
		}else{
			try {
				String result = URLDecoder.decode(tmp, GlobalConstant.SYSTEM_ENCODING);
				return result;
			} catch (UnsupportedEncodingException e) {
				log.error("getParam()", e);
				return tmp;
			}
		}
	}

 都做了处理,定义的那个常量也是utf-8. 在网上查了查乱码的几种解决方案,

 决定像先前的那样 弄个过滤器,于是采用了

 spring 内置的过滤器 在web.xml 添加如下代码

<filter>
   <filter-name>springEncodingFilter</filter-name>
   <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
   <init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
   </init-param>
   <init-param>
    <param-name>forceEncoding</param-name>
    <param-value>true</param-value>
   </init-param>
</filter>
<filter-mapping>
   <filter-name>springEncodingFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

 貌似还是不很凑效,乱码一直存在。继续找乱码的原理,get 和 post 的传递方式的不一样,等等 于是把

更改 D:\Tomcat\conf\server.xml,指定浏览器的编码格式为“简体中文”:

  方法是找到 server.xml 中的

    <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" redirectPort="8443" acceptCount="100"
    connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='utf-8' />
改了,但是 还没有效果,

 无奈只好自己写了个过滤器,还是不行,,把网上各位大侠的解决方法都用了遍,就感觉纳闷了,一个小小的乱码问题竟然困扰了好几天,在action里面 进行 设置,

getRequest().setCharacterEncoding("utf-8");

还是不行,简直疯掉了,难道真的是人品问题,开始怀疑自己了。

最终 找的了 百度hi 上一牛人的解决方法

struts2.1.6版本中存在一个Bug,即接收到的中文请求参数为乱码(以post方式提交),原因是struts2.1.6在获取并使用了请求参数后才调用 HttpServletRequest的setCharacterEncoding()方法进行编码设置,导致应用使用的就是乱码请求参数。这个bug在struts2.1.8中已经被解决,如果你使用的是struts2.1.6,要解决这个问题,你可以这样做:新建一个Filter,把这个Filter放置在Struts2的Filter之前,然后在doFilter()方法里添加以下代码

public void doFilter(...){
HttpServletRequest req = (HttpServletRequest) request;
req.setCharacterEncoding("UTF-8");//应根据你使用的编码替换UTF-8
filterchain.doFilter(request, response);
}

哎 仔细一看 ,我就是用的这个,我把web.xml

<filter>
   <filter-name>springEncodingFilter</filter-name>
   <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
   <init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
   </init-param>
   <init-param>
    <param-name>forceEncoding</param-name>
    <param-value>true</param-value>
   </init-param>
</filter>
<filter-mapping>
   <filter-name>springEncodingFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

 

 

<filter>

		<filter-name>struts2</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
		</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>*.action</url-pattern>

 

 

 放在 struts2 的过滤器前面 (先前的字符过滤器是放在Struts2的Filter之后的),web.xml 是按照顺序加载的,所以就出现了问题。

,一切 ok, 哎 好烦人的这个乱码问题终于解决掉了。。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值