struts2乱码问题

简介:做了个功能,用的struts2,表单提交到后台,接收后打印出来的数据乱码。

解决步骤:

1. struts.xml中配置<constant name="struts.i18n.encoding" value="utf-8" />

结果:乱码

2. web.xml中配置CharsetEncodingFilter过滤器

结果:还是乱码

3. jsp页面编码 pageEncoding="UTF-8"

结果:仍然乱码

4. <form>标签里加 method="post"

结果:正常显示

网上一些见解:

get方式乱码还是post乱码?post乱码可以使用过滤器解决,get方式一般要进行URLEncode,或者改tomcat配置。
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" redirectPort="8443" acceptCount="100"
    debug="0" connectionTimeout="20000"
    disableUploadTimeout="true" URIEncoding="GBK" />

本来的URLEncoding="UTF-8"是没有的,加上这一句话,就行了,下面是为什么这么做的原因:

<constant name="struts.i18n.encoding" value="UTF-8" /> 表示把struts2设置为utf-8,相当于response.setCharacterEncoding("UTF-8"),对HTTP请求的数据进行编码,但是get请求的数据是直接在URL中,通过配置struts2配置为utf-8或CharacterEncodingFilter拦截器都不会对URL进行拦截并转换。对于很多人来说会觉得用 request.setCharacterEncoding("字符集")可以指定解码方式,其实是不可以的,当看了servlet的官方API说明有对此方法的解释:

Overrides the name of the character encoding used in the body of this request. This method must be called prior to reading request parameters or reading input using getReader().

可以看出对于get方法它是无能为力的。那么到底用什么编码方式解码数据的呢,这是tomcat的事情了,默认缺省用的是 iso-8859-1 所以出现了上面的配置方式。 当然了还的一种:

new String(request.getParameter("name").getBytes("iso-8859-1"),"客户端指定的URL encode编码方式")

总之,对于post来说,乱码问题是很容易解决的,关键在于get,因为所有页面上的编码设置对于get方法是彻底无效的。

时间: 2024-10-16 21:11:56

struts2乱码问题的相关文章

struts2乱码

今天遇到Struts2中,完成一个action以后,通过 <action name="saveDir" class="directorySaveAction" >   <result type="redirect-action">    <param name="actionName">listDirByParent</param>    <param name="

Struts2乱码问题的解决办法

乱码问题的起因在于数据在web系统的各个层中间传递的时候编码不同,比如页面使用GB18030而中间层使用UTF-8.由于struts2默认使用的就是UTF-8编码,所以在页面如果使用的是其他的编码格式,那么表单提交后就会产生乱码了. 我们使用过滤器来解决这个问题. 以页面使用GB18030为例,两个步骤: 1.在struts.xml中添加:<constant name="struts.i18n.encoding" value="GB18030"/> 2.

Struts2中文乱码问题源码分析___转

前几天在论坛上看到一篇帖子,是关于Struts2.0中文乱码的,楼主采用的是spring的字符编码过滤器 (CharacterEncodingFilter)统一编码为GBK,前台提交表单数据到Action,但是在Action中得到的中文全部是乱码,前 台的页面编码都是GBK没有问题.这是为什么呢?下面我们就通过阅读FilterDispatcher和CharacterEncodingFilter 这两个过滤器的源代码,了解其实现细节,最终得出为什么中文还是乱码! web.xml配置: 1     

SSH项目web.xml文件的常用配置【struts2的过滤器、spring监听器、解决Hibernate延迟加载问题的过滤器、解决中文乱码的过滤器】

配置web.xml(struts2的过滤器.spring监听器.解决Hibernate延迟加载问题的过滤器.解决中文乱码的过滤器) <!-- 解决中文乱码问题 --> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-c

struts2拦截器の简单实现(日语系统,请忽略乱码,重在实现)

1.创建类实现interceptor接口或者继承abstractinter~~~类 package com.mi.intercepter; import java.util.Date; import com.mi.action.LoginAction; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; public class Inter

关于struts2中表单提交时,中文乱码问题的解决

http://blog.csdn.net/hjw506848887/article/details/8966194 今天写项目时,突然遇到了struts2中表单提交的中文乱码问题,调了好久就是不知道答案. 下面的我的jsp页面: [html] view plaincopyprint? <form action="indexAction.action"> <input name="dimName" type="text" />

struts2 中文乱码问题,自定义过滤器通用解决方法

问题描述 在JSP中使用form表单向后台action中传递中文参数,后台action接收到参数出现中文乱码.JSP页面统一采用了utf-8编码格式.由于struts2默认采用的编码为utf-8,根据官方文档的提示,编码格式改为GBK,就能解决中文乱码.遂改之.但是,改为GBK后仍然出现中文乱码.很是不解(后来去官网查了一下,发现这是个BUG). 环境描述 服务器采用tomcat6.0,struts的版本为2.3.12,spring的版本为2.5.6 解决办法 1.如果你的项目采用了spring

[Java Web]Struts2解决中文乱码问题

1.设置struts的字符编码,可以在struts.xml中增加以下代码: <constant name="struts.i18n.encoding" value="GBK" /> 或者找到struts的默认配置文件,位置在 struts2-core-2.3.16.3.jar 里面 org.apache.struts2 包中的 default.properties 文件.修改以下配置: ### This can be used to set your d

Struts2文件下载中文名乱码

Struts2中提供了快捷的下载方式,通过配置struts.xml文件即可实现文件的下载,但是功能实现后下载文件的文件名却出现乱码,或者直接来个***.action,让人很是无语,但很显然,这是中文乱码问题需要设置编码格式,道理都懂,但是怎样实现呢?其实很简单,上代码: <result name="download" type="stream"> <param name="contentType">application/