我的问题对应的解决方案是:web.xml中filter的顺序问题【置顶】。需要将编码过滤器放置在所有过滤器之前。

在解决这个问题途中学习到的东西:

解决方案总结(post中文乱码):

    • 前后台编码方式一致;
    • 结合过滤器的使用;
    • 表单传输方式的指定;
    • Tomcat的server.xml;

1.前台:

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<%
    request.setCharacterEncoding("UTF-8");
%>

2.后台Struts.xml配置文件:

<constant name="struts.i18n.encoding" value="UTF-8"/>

3.web.xml中的过滤器(以下两个都可以,择一即可)

  <!-- spring的中文乱码拦截器(必须置顶) -->
  <filter>
         <filter-name>EncodingFilter</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>
     </filter>
     <filter-mapping>
         <filter-name>EncodingFilter</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>
 
  <!-- 自定义的struts2的中文乱码拦截器(置顶) -->
 <filter>
      <filter-name>CharEncodingFilter</filter-name>
      <filter-class>com.sram.filter.CharEncodingFilter</filter-class>
      <init-param>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>CharEncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
  
package com.sram.filter;
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 CharEncodingFilter implements Filter{
    String encoding;
    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp,
            FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        req.setCharacterEncoding(encoding);
        chain.doFilter(req, resp);
    }

    @Override
    public void init(FilterConfig config) throws ServletException {
        // TODO Auto-generated method stub
        encoding  = config.getInitParameter("encoding");
        if(encoding==null||encoding.equals("")){
            encoding  = "UTF-8";
        }
    }
}

4.将form表单提交方式变为post方式,即添加method="post"

5.Tomcat的server.xml没有配置编码,添加URIEncoding="UTF-8"就可以了

<Connector port="6060" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="UTF-8" 
useBodyEncodingForURI="true" 
/>

6.在action中重编码,在指定参数的set方法中,将编码设会“UTF-8",例如:需要修改每个参数的set方法,比较麻烦(不推荐)

public void setCopyRight(String copyRight){

    try {

this .copyRight = java.net.URLDecoder.decode (copyRight, "UTF-8" );

}  catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

补充post方式:

补充get方式:

如果提交方式为get,设置request对象的编码是无效的,想不乱码,只能手工转换。

1.  String data = "???????";//乱码字符串
     byte source [] = data.getBytes("iso8859-1");//得到客户机提交的原始数据
     data = new String (data.getBytes("iso8859-1"),"UTF-8");//解决乱码

//等同于

data = new String (source,"UTF-8");

2.get方式的乱码,还可以通过更改服务器配置的方式实现。更改Tomact的conf目录下的server.xml文件。

2.1    这种方式并不推荐,因为更改了服务器且并不灵活。

2.2这么设置后,request的setCharacterEncoding设置什么编码,连接器就用什么编码,虽然比上一种更改灵活,但依然会导致我们的应用程序牢牢依赖于服务器,也不被推荐。

参考网址:http://www.cnblogs.com/yyz666/p/4051294.html

      http://www.cnblogs.com/wanggangblog/p/3477525.html

     http://www.cnblogs.com/chenssy/p/4220400.html

     Struts2拦截器解决乱码问题http://blog.csdn.net/a9529lty/article/details/7069040

 

SSH中post提交表单action中文乱码问题的更多相关文章

  1. Casperjs中fill提交表单遇到的问题

    1.if you access internet with proxy please add             --ignore-ssl-errors=true --ssl-protocol=a ...

  2. MVC中ajax提交表单示例

    页面中: @using (Ajax.BeginForm("Login", "User", new AjaxOptions() { HttpMethod = &q ...

  3. laravel中,提交表单后给出提示例如添加成功,添加失败等等

    laravel中的表单插入,我想在表单插入成功后,可以像thinkphp一样可以有一个提示内容,上网Google,他们还是给出的方法就是 return redirect('/')->with(' ...

  4. 使用jQuery.form库中ajaxSubmit提交表单时遇到的一些问题

    初入前端,网上找的很多资料都不够详细,导致遇到很多问题,现记录如下: 1.首先引入 <script src="~/Scripts/jquery-1.10.2.js">& ...

  5. Spring MVC 用post方式提交表单到Controller乱码问题,而get方式提交没有乱码问题

    在web.xml中添加一个filter,即可解决post提交到Spring MVC乱码问题 <!-- 配置请求过滤器,编码格式设为UTF-8,避免中文乱码--> <filter> ...

  6. JQuery中button提交表单报TypeError: elem[type] is not a function jquery

    错误: TypeError: elem[type] is not a function jquery 解决: 出现这种现象的原因是,提交的表单中,有标签的name,有以submit命名的 name中不 ...

  7. Yii2 modal中 ajax提交表单

    view: // view 代码 $form = ActiveForm::begin(['id' => $model->formName()]); // js 代码 $js = <& ...

  8. jquery中使用serialize() 序列化表单时 中文乱码问题

    序列化中文时之所以乱码是因为.serialize()调用了encodeURLComponent方法将数据编码了 解决方法就是进行解码 1 原因:.serialize()自动调用了encodeURICo ...

  9. form中的button按钮在IE11中自动提交表单问题导致弹出框关闭之后表单被重置

    最近几天,测试系统,遇到一个兼容性问题,form中有一个button按钮,没有指定type类型,点击按钮弹出框选择值之后回填给form上的一个单行文本框,在IE6.IE7.IE8.IE9.IE10中测 ...

随机推荐

  1. Python学习_13_继承和元类

    继承 继承的含义就是子类继承父类的命名空间,子类中可以调用父类的属性和方法,由于命名空间的查找方式,当子类中定义和父类同名属性或者方法时,子类的实例调用的是子类中的属性,而不是父类,这就形成了pyth ...

  2. 原生 js 实现点击按钮复制文本

    最近遇到一个需求,需要点击按钮,复制 <p> 标签中的文本到剪切板 之前做过复制输入框的内容,原以为差不多,结果发现根本行不通 尝试了各种办法,最后使了个障眼法,实现了下面的效果 一.原理 ...

  3. 执行查询“BACKUP LOG [XXX] TO DISK = N'F:\\BackData\\事务日至备份\\...”失败,错误如下:“无法执行 BACKUP LOG,因为当前没有数据库备份。 BACKUP LOG 正在异常终止。

    执行查询"BACKUP LOG [XXX] TO  DISK = N'F:\\BackData\\事务日至备份\\..."失败,错误如下:"无法执行 BACKUP LOG ...

  4. linux apache虚拟主机配置(基于ip,端口,域名)

    配置环境: linux版本:Centos6.4 httpd版本: [root@centos64Study init.d]# pwd/etc/init.d[root@centos64Study init ...

  5. Windows服务器安装Memcache缓存服务及PHP扩展

    一.Windows服务器安装Memcache缓存服务,需要下载windows稳定版Memcache程序memcached.zip,下载后解压到自定义服务目录,如D:\phpStudy\tools\me ...

  6. ThreadPool.QueueUserWorkItem引发的血案,线程池异步非正确姿势导致程序闪退的问题

    ThreadPool是.net System.Threading命名空间下的线程池对象.使用QueueUserWorkItem实现对异步委托的先进先出有序的回调.如果在回调的方法里面发生异常则应用程序 ...

  7. C#winform程序关闭计算机的正确姿势

    /// <summary> /// 计算机电源控制类 /// </summary> public class EnvironmentCheckClass { [DllImpor ...

  8. Keepalived学习笔记

    注LVS(Linux Virtual Server):Linux虚拟服务器,这里通过keepalived作为负载均衡器RS(Real Server):真实服务器VRRP(Virtual Router ...

  9. mysql加锁读

    Locking Reads 在同一个事务中,如果你先查询数据,随后对相关数据进行插入或修改,那么在标准的SLELECT中不会给出足够的保护.在你查询期间另一个事务可以更新或者删除相同的行.InnoDB ...

  10. Java框架之Hibernate(二)

    本文主要介绍: 1 Criteria 接口 2 用 myeclipse 反向生成 3 hibernate  主键生成策略 4 多对一 5 一对多 6 使用List 集合的一对多 7 多对多 一.Cri ...