页面a.htm
<%@page contentType="text/html;charset=gb2312"%>
<form action="b.jsp" method="post">
  用户名:<input type="text" name="name">
  <input type="submit" value="提交">
</form>
页面b.jsp
<%@page contentType="text/html;charset=GB2312"%>
输入的内容为:<%=request.getParameter("name")%>
过滤器:
package com.cn.filter;
import java.io.*;
import javax.servlet.*;
public class EncodingFilter implements Filter{
public void init(FilterConfig filterConfig) throws ServletException
 {
System.out.println("过滤器初始化");
          }
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
             throws IOException,ServletException{
  System.out.println("过滤器执行前");
  String name=request.getParameter("name");
  if(name!=null){
   request.setCharacterEncoding("GB2312") ;
           System.out.println(name); //该处在控制台输出的也是乱码
  chain.doFilter(request,response);
   }  
  System.out.println("过滤器执行后");          
  }
}
web.xml配置文件
          <filter>
 <filter-name>filter</filter-name>
 <filter-class>com.cn.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
   <filter-name>filter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
不知道是哪里错了,怎么一直无法提交中文?

解决方案 »

  1.   

    控制台出现 "过滤器执行前"信息了吗?filter不是解决提交中文一劳永逸的方法
      

  2.   

    控制台出现的信息依次是:
    过滤器执行前
    乱码
    过滤器执行后
    .....
    这个过滤器的问题一直没搞明白是哪里出的错,曾经在一个ssh的项目里遇到过,没解决。如今单独做过滤器的测试还是没通过,一直想弄明白到底是哪出了问题,请高手们指点一下
      

  3.   

    感觉应该是设置response.setCharacterEncoding吧。? 
      

  4.   

    你先把name转换再打印在控制台看下.
    String   name=new   String((request.getParameter( "name")).getBytes( "ISO8859-1 "),   "GB2312 ");//至于你要把什么改成什么,看你机器的设置了.
    然后,你应该象3L说的,应该设置的是返回的字符集,非请求的.
      

  5.   


    public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) 
                throws IOException,ServletException{ 
      System.out.println("过滤器执行前");
      request.setCharacterEncoding("GB2312") ;   //在request.getParameter("name")之前转码,根据你的机器设置编码GB2312  reponse.setCharacterEncoding("GB2312");
      String name=request.getParameter("name"); 
      if(name!=null){ 
          System.out.println(name);
      } 
      chain.doFilter(request,response); 
      System.out.println("过滤器执行后");          
      } 

      

  6.   

    另外根据提交方式不同,转码方式也不同
    提交的两种方式,GET和POST 
        1.记住超链接是GET方式提交 
        2.POST方式提交可以统一转码(这样获得的参数可以统一转码) ,也就是说你可以用过滤器来统一转码 
                例:request.setCharacterEncoding("UTF-8");  //如果你用的编码方式是GBK就写GBK,要写在获得参数的前面 
                  String name=request.getParameter("name"); 
                  System.out.println(name);  //可以转过来,必须是POST提交 
        3.GET方式不能用统一转码 
                但可以这样做: 
                  String name=request.getParameter("name"); 
                  name=new String(name.getBytes("ISO-8859-1"),"UTF-8");    //这种也叫重新赋值的方式 
                    System.out.println(name); 
                但这样做也带来很多不便,假如你有很多request.getParameter("something");  你必须一一转码. 
        4.GET方式还有一种配置可以在Tomcat下配置URIEncoding=UTF-8 
      

  7.   

    struts过滤器! protected boolean processPreprocess(HttpServletRequest arg0,
    HttpServletResponse arg1) {
    // TODO Auto-generated method stub
    // post转码方式
    if (arg0.getMethod().compareToIgnoreCase("post") > 0) {
    try {
    arg0.setCharacterEncoding("gbk");
    System.out.println("post方式转码!");
    } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    } else {
    // get转码方式;
    Iterator it = arg0.getParameterMap().values().iterator();
    System.out.println("get方式转码!");
    while (it.hasNext()) {
    String[] para = (String[]) it.next(); for (int i = 0; i < para.length; i++) {
    try {
    para[i] = new String(para[i].getBytes("ISO-8859-1"),
    "gbk");
    } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    } return super.processPreprocess(arg0, arg1);
    }
      

  8.   

    public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) 
                throws IOException,ServletException{ 
      System.out.println("过滤器执行前"); 
      String name=request.getParameter("name"); 
     String fromPageCode="GB2312";
      String cType=req.getHeader("content-type");
      if(cType.indexOf("utf-8")>=0)
       fromPageCode="utf-8";

      if(name!=null){ 
      request.setCharacterEncoding(fromPageCode) ; 
      System.out.println(name); 
      chain.doFilter(request,response); 
      } 
      System.out.println("过滤器执行后");          
      } 
      

  9.   

    先改字符再取request啊request.setCharacterEncoding("GB2312") ; 放String name=request.getParameter("name"); 前面试试