解决spring3 mvc中乱码的问题。

本文介绍了在Spring MVC项目中解决GET和POST请求乱码的方法。针对POST请求,可以通过自定义DispatcherServlet或使用Spring内置的CharacterEncodingFilter来解决;GET请求则通过修改Tomcat的server.xml配置来解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

  1. <filter>
  2. <filter-name>CharacterEncoding</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>CharacterEncoding</filter-name>
  11. <url-pattern>/*</url-pattern>
  12. </filter-mapping>

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

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

  1. <filter>
  2. <filter-name>CharacterEncoding</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>CharacterEncoding</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. <servlet-mapping>
  7. <servlet-name>spring</servlet-name>
  8. <url-pattern>*.do</url-pattern>
  9. </servlet-mapping>

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

  1. packagecom.mocha.servlet;
  2. importjavax.servlet.ServletConfig;
  3. importjavax.servlet.ServletException;
  4. importjavax.servlet.http.HttpServletRequest;
  5. importjavax.servlet.http.HttpServletResponse;
  6. importorg.springframework.web.servlet.DispatcherServlet;
  7. publicclassEncodingDispatcherServletextendsDispatcherServlet{
  8. privateStringencoding;
  9. publicvoidinit(ServletConfigconfig)throwsServletException{
  10. encoding=config.getInitParameter("encoding");
  11. super.init(config);
  12. }
  13. protectedvoiddoService(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{
  14. request.setCharacterEncoding(encoding);
  15. super.doService(request,response);
  16. }
  17. }

然后将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. <servlet-mapping>
  11. <servlet-name>spring</servlet-name>
  12. <url-pattern>*.do</url-pattern>
  13. </servlet-mapping>

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

  1. <Connectorport="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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值