zoukankan      html  css  js  c++  java
  • 解决spring3 mvc中乱码的问题。

    今天搭建spring3 mvc框架的时候,发现居然又出现了乱码(万恶的iso编码啊),想起之前解决post提交乱码问题一般都是写一个filter,在filter中实现编码的转换,配置方法是是在web.xml中加入以下代码:

    1. <filter>    
    2.     <filter-name>Character Encoding</filter-name>    
    3.     <filter-class>com.filter.CharacterEncodingFilter</filter-class>    
    4.     <init-param>    
    5.         <param-name>encoding</param-name>    
    6.         <param-value>UTF-8</param-value>    
    7.     </init-param>    
    8. </filter>    
    9. <filter-mapping>    
    10.     <filter-name>Character Encoding</filter-name>    
    11.     <url-pattern>/*</url-pattern>    
    12. </filter-mapping>  

    其中:com.filter.CharacterEncodingFilter是自己实现的过滤器,具体写法可以参考tomcat6中webapps\examples\WEB-INF\classes\filters下SetCharacterEncodingFilter这个类。

    觉得这样做有点麻烦,百度了一下,发spring中自带了一个设置编码的过滤器org.springframework.web.filter.CharacterEncodingFilter,所以在web.xml中可以改成这样:

    1. <filter>    
    2.     <filter-name>Character Encoding</filter-name>    
    3.     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>    
    4.     <init-param>    
    5.         <param-name>encoding</param-name>    
    6.         <param-value>UTF-8</param-value>    
    7.     </init-param>    
    8. </filter>    
    9. <filter-mapping>    
    10.     <filter-name>Character Encoding</filter-name>    
    11.     <url-pattern>/*</url-pattern>    
    12. </filter-mapping>  

    这样就不用自己写过滤器了。

    但是还是觉得有点麻烦,因为使用spring mvc的时候,已经在web.xml中设置了servlet:

    1. <servlet>  
    2.  <servlet-name>spring</servlet-name>  
    3.  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
    4.  <load-on-startup>1</load-on-startup>  
    5. </servlet>  
    6.   
    7. <servlet-mapping>  
    8.  <servlet-name>spring</servlet-name>  
    9.  <url-pattern>*.do</url-pattern>  
    10. </servlet-mapping>  

    上面已经对请求做了一次过滤,如果再加一个过滤器感觉有点多余,直接改一下DispatcherServlet这个类,使它具有修改编码的功能不是更好?于是就写了一个新的类,继承自DispatcherServlet,代码如下:

    1. package com.mocha.servlet;  
    2.   
    3. import javax.servlet.ServletConfig;  
    4. import javax.servlet.ServletException;  
    5. import javax.servlet.http.HttpServletRequest;  
    6. import javax.servlet.http.HttpServletResponse;  
    7. import org.springframework.web.servlet.DispatcherServlet;  
    8.   
    9. public class EncodingDispatcherServlet extends DispatcherServlet {  
    10.  private String encoding;  
    11.   
    12.  public void init(ServletConfig config) throws ServletException {  
    13.   encoding = config.getInitParameter("encoding");  
    14.   super.init(config);  
    15.  }  
    16.   
    17.  protected void doService(HttpServletRequest request, HttpServletResponse response) throws Exception {  
    18.   request.setCharacterEncoding(encoding);  
    19.   super.doService(request, response);  
    20.  }  
    21. }  

    然后将web.xml中的配置改为:

    1. <servlet>  
    2.  <servlet-name>spring</servlet-name>  
    3.  <servlet-class>com.mocha.servlet.EncodingDispatcherServlet</servlet-class>  
    4.  <load-on-startup>1</load-on-startup>  
    5.  <init-param>  
    6.   <param-name>encoding</param-name>  
    7.   <param-value>UTF-8</param-value>  
    8.  </init-param>  
    9. </servlet>  
    10.   
    11. <servlet-mapping>  
    12.  <servlet-name>spring</servlet-name>  
    13.  <url-pattern>*.do</url-pattern>  
    14. </servlet-mapping>  

     OK,乱码消失,现在总结一下乱码的问题,get方法乱码解决方法一般是将tomcat中conf目录下server.xml文件中加入

    1. <Connector port="8080" maxHttpHeaderSize="8192"    
    2.                maxThreads="150" minSpareThreads="25" maxSpareThreads="75"    
    3.                enableLookups="false" redirectPort="8443" acceptCount="100"    
    4.                connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />  

    而post方法解决乱码是设置一个专门处理编码转换的filter或者servlet。

  • 相关阅读:
    Ubuntu18.04安装配置
    Ubuntu Terminal「控制台」
    Ubuntu16.04系统安装
    UEFI Install CentOS 7
    安装Ubuntu16.04后要做的事
    Ubuntu Google Chrome
    Nuke Linux Crack
    Selenium3自动化测试实战 基于Python语言
    函数基础
    Jenkins持续集成
  • 原文地址:https://www.cnblogs.com/xhk1228/p/3194875.html
Copyright © 2011-2022 走看看