关于myeclipse中web project中文乱码的解决《过滤器Filter》

来源:互联网 发布:python上位机 编辑:程序博客网 时间:2024/05/16 09:31

在使用HttpServletRequest.getParameter(String name)时我们可能会取得中文的乱码。

问题描述:

当利用getParameter()方法去取HTML元素中value值时当元素的value值为中文时用该方法取到的值可能为乱码。这时候我们需要的取得它的中文。

 

a) 方法一
在利用getParameter方法之前添加如下语句 
request.setCharacterEncoding("utf_8"); 

相对来说用起来比较方便而且对提交方式没有限制。

 

b) 方法二

如果是get方式提交有中文,楼主还可以去tomcat 的server.xml配置文件里在 
<Connector port="8080" protocol="HTTP/1.1"  
               connectionTimeout="20000"  
        redirectPort="8443" /> 
中加上URIEncoding="GB2312"即可。 

缺点:无法解决用post方式提交时的中午乱码

 

c) 方法三

String kind = new String(request.getParameter("RBLkind").getBytes("iso-8859-1"), "utf-8"); 
但是这个方法只能针对一行一行代码修改要是你要多次利用getParameter方法取

值时要多次输入此行代码比较麻烦。

 

d) 过滤器(Filter)
在使用过滤器解决乱码问题是form表单的提交方式一定要设为POST默认的是GET。 
在web.xml里面加过滤器遇上全部的jsp、servlet、do等所有乱码问题都得消失哈。 

(1)、先在项目的src中servlt包添加一个过滤器代码如下

package servlet;  import java.io.IOException; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;  public final class CharacterEncodingFilter implements Filter {  private String encoding;   private boolean ignore;    public CharacterEncodingFilter()   {    encoding = "utf-8";    ignore = false;   }    public void init(FilterConfig config)   {    if (config.getInitParameter("encoding") != null)     encoding = config.getInitParameter("encoding");    if (config.getInitParameter("ignore") != null) ignore = (new Boolean(config.getInitParameter("ignore")))       .booleanValue();   }    public void doFilter(ServletRequest request, ServletResponse response,     FilterChain chain) throws IOException, ServletException   {    HttpServletRequest req = (HttpServletRequest) request;    HttpServletResponse res = (HttpServletResponse) response;    if (!ignore)    {     req.setCharacterEncoding(encoding);     res.setCharacterEncoding(encoding);    }    chain.doFilter(request, response);   }    public void destroy() 
{   }  } 
 (2)、在web.xml里面添加过滤器filter   <filter>   <filter-name>Set Character Encoding</filter-name>   <filter-class>servlet.CharacterEncodingFilter</filter-class>   <init-param>    <param-name>encoding</param-name>    <param-value>UTF-8</param-value>   </init-param>  </filter>   <filter-mapping>   <filter-name>Set Character Encoding</filter-name>   <url-pattern>*.do</url-pattern>  </filter-mapping>   <!-- 过滤所有的jsp文件 -->  <filter-mapping>   <filter-name>Set Character Encoding</filter-name>   <url-pattern>*.jsp</url-pattern>  </filter-mapping>   <!-- 过滤所有的servlet文件 -->  <filter-mapping>   <filter-name>Set Character Encoding</filter-name>   <url-pattern>/*</url-pattern> </filter-mapping> 这样所有的request.getparameter都会经过这个过滤器处理乱码问题就没有了而且可以任意修改<param-value>UTF-8</param-value>不过本人还是较为推荐UTF-8。  

0 0