我的问题对应的解决方案是: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. SQLSERVER 死锁标志

    最开始做DBA的时候,整天死锁到头痛1222,至今都能回想到这个错误窗口: 死锁定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待 ...

  2. 企业网盘: Owncloud 搭建

    说明:搭建很简单,就是一个lamp环境,但是最新的owncloud 9.x版本对php的版本需求不能低于5.4, 所以需要下载yum源来进行安装. 搭建过程 1)配置yum源 rpm -Uvh htt ...

  3. Python 实现网页截屏、查库、发邮件

    本文介绍了使用 Python(2.7版本)实现网页截屏.查库.发邮件的 demo.用到了 selenium.phantomjs.mailer.jinja2.mysqldb 还有 image,都是比较典 ...

  4. HTML编码规范、CSS编码规范

    HTML编码规范 IE 兼容模式 IE 支持通过特定的 标签来确定绘制当前页面所应该采用的 IE 版本.除非有强烈的特殊需求,否则最好是设置为 edge mode,从而通知 IE 采用其所支持的最新的 ...

  5. cobbler自动安装系统(Centos7.X)

    环境: [root@kickstart ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@kickstart ~]# unam ...

  6. PHP连接LDAP进行登录验证

    基于安全性考虑,准备把PHP做的自动化平台加入ldap登录验证,具体做法如下: 了解背景: LDAP 的全称是"轻量级目录访问协议(Lightweight Directory Access ...

  7. centos6.5 redis搭建

    redis安装1.wget http://download.redis.io/redis-stable.tar.gz2.tar -zxvf redis-stable.tar.gz3.cd redis- ...

  8. 微信小程序之自定义toast弹窗

    微信小程序里面的自带弹窗icon只有两种,success和loading.有时候用户输入错误的时候想加入一个提醒图标,也可以使用wx.showToast中的image来添加图片达到使用自定义图标的目的 ...

  9. SQLAlchemy表操作和增删改查

    一.SQLAlchemy介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数 ...

  10. tomcat server location 地址的修改

    如果是目录是灰色,那么请先删除现有的项目,然后Clean 修改之后,发布的目录是.具体目录与tomcat 安装目录相关 access_log