zoukankan      html  css  js  c++  java
  • 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

     
  • 相关阅读:
    x64 平台开发 Mapxtreme 编译错误
    hdu 4305 Lightning
    Ural 1627 Join(生成树计数)
    poj 2104 Kth Number(可持久化线段树)
    ural 1651 Shortest Subchain
    hdu 4351 Digital root
    hdu 3221 Bruteforce Algorithm
    poj 2892 Tunnel Warfare (Splay Tree instead of Segment Tree)
    hdu 4031 Attack(BIT)
    LightOJ 1277 Looking for a Subsequence
  • 原文地址:https://www.cnblogs.com/haimishasha/p/6117403.html
Copyright © 2011-2022 走看看