• SSH中post提交表单action中文乱码问题


    我的问题对应的解决方案是: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

     
  • 相关阅读:
    FLEX,图标操作,xml, 通信,实例
    FLEX 合并两个XML的属性
    在内核中如何获得系统的日期和时间
    delphi中生成空格的函数
    Delphi中使用@取函数地址的问题
    vc中产生随机数
    delphi里label显示多行文本的两种方法
    360,傲游,诺顿最新版,网页溢出防护原理
    VC使用Zlib对内存流进行压缩与解压缩
    【TXPManifest控件】Delphi使用XP样式的按钮等控件
  • 原文地址:https://www.cnblogs.com/haimishasha/p/6117403.html
Copyright © 2020-2023  润新知