zoukankan      html  css  js  c++  java
  • [forwarding] Struts2中action接收中文参数为乱码解决方法

    老实说,中文乱码问题是每个程序员会经常遇到的问题,而且也是一个很头疼的问题。网上很多关于解决中文乱码的帖子,看几个之后你会发现大都是一样的。但是我们照着做,却还是无法解决乱码问题。我也是看了好多帖子,好多解决方法,最后把几个方法结合起来,修改一下就可以用了。废话少说,下面进入正题。

    首先Struts默认的编码方式是utf-8,出现乱码首先检查jsp页面的编码方式是否也是utf-8,也许你会很奇怪,为什么统一了编码方式,还是出现乱码呢?原因是jsp网页发送请求request,默认编码是ISO-8859-1。也就是说,虽然你Jsp页面设置的编码方式是utf-8,但是把中文参数发送出去,系统默认把参数以ISO-8859-1编码方式放到request中了。

    下面是针对post方式提交请求解决中文乱码的方法:

    1.编写过滤器:

    package org.filter;
    
    
    import java.io.IOException;
    import java.net.URLDecoder;
     
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    public class CharsetEncodingFilter implements Filter {
    	
    	@Override   
    	public void doFilter(ServletRequest sRequest, ServletResponse sResponse,   
    	        FilterChain filterChain) throws IOException, ServletException   
    	{   
    	    HttpServletRequest request = (HttpServletRequest) sRequest;   
    	    HttpServletResponse response = (HttpServletResponse) sResponse;   
    	    // 设置字符集   
    	    request.setCharacterEncoding("utf-8");   
    	    response.setCharacterEncoding("utf-8");   
    	      
    	    filterChain.doFilter(request, response);   
    	}
    
    	@Override
    	public void destroy() {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void init(FilterConfig arg0) throws ServletException {
    		// TODO Auto-generated method stub
    		
    	}   
    	  
    }
    	
    

      

    2.配置web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
    	xmlns="http://java.sun.com/xml/ns/javaee" 
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <!-- <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list> -->
      <!-- 过滤所有的请求的编码为utf-8 -->
      <filter>
        <filter-name>CharsetEncodingFilter</filter-name>
        <filter-class>org.filter.CharsetEncodingFilter</filter-class>
        
      </filter>
      <filter-mapping>
        <filter-name>CharsetEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
      
      
      <filter>
          <filter-name>struts2</filter-name>
          <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
          <!-- <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> -->
      </filter>
      <filter-mapping>
      	<filter-name>struts2</filter-name>
      	<url-pattern>/*</url-pattern>
      </filter-mapping>
      
      
     
      
      
    </web-app>
    

      

    通过以上方法,把所有请求的编码方式都设成了utf-8。如果没有用到struts2,上面第二个<filter>开始的代码就不要写上了。用第一个filter就可以了。希望可以帮到更多因为中文乱码烦心的朋友们

  • 相关阅读:
    关于ShareSDK接入的各种问题,以及解决方案
    Cocos2d-x使用iOS游戏内付费IAP(C++篇)
    数论——终结素数判定
    poj 2528 线段树+离散化
    STL 优先队列
    poj 2777 线段树+延迟更新
    RMQ
    codeforces 拼手速题2
    codeforces 拼手速题1
    子矩阵 思维吧
  • 原文地址:https://www.cnblogs.com/daocaowu/p/3462243.html
Copyright © 2011-2022 走看看