一个小问题,是关于过滤器的,在index页面我是这么过去的 <a href="servlet/TestDataServlet">测试</a>,servlet里面我也放了一些数据,是中文的,现在就是现实是一个个小方块的乱码,我过滤器是配置了,过滤器初始化执行了,好像doFilter那步好像没执行,下面是web里面的配置,先多谢大家了,据说<a href="servlet/TestDataServlet">这样的链接处理不了中文乱码?
web.xml<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>TestDataServlet</servlet-name>
    <servlet-class>servlet.TestDataServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>TestDataServlet</servlet-name>
    <url-pattern>/servlet/TestDataServlet</url-pattern>
  </servlet-mapping>
  <filter>
     <filter-name>EncodingServlet</filter-name>
     <filter-class>servlet.EncodingServlet</filter-class>
     <init-param>
       <param-name>encoding</param-name>
       <param-value>UTF-8</param-value>
     </init-param>
   </filter>
  <filter-mapping>
     <filter-name>EncodingServlet</filter-name>
     <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

解决方案 »

  1.   

    filter的配置与定义要放在servlet之前
      

  2.   

    没用,估计不是顺序问题,而且如果是顺序问题的话,web.xml DTD会报错的,要么就是启动的时候就报错了
      

  3.   

    在servlet里面加上一条request.setCharacterEncoding("UTF-8");
      

  4.   


    public class CharacterEncodingFilter implements Filter{ private String encoding;


    public void setEncoding(String encoding) {
    this.encoding = encoding;
    }

    @Override
    public void destroy() {
    // TODO Auto-generated method stub

    } @Override
    public void doFilter(ServletRequest req, ServletResponse res,
    FilterChain chain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest)req;
    if(encoding==null||encoding.trim().length()==0)
    request.setCharacterEncoding("UTF-8");
    else
    request.setCharacterEncoding(encoding);
    chain.doFilter(request, res);

    } @Override
    public void init(FilterConfig arg0) throws ServletException {
    // TODO Auto-generated method stub

    }}web.xml:<filter>
             <filter-name>CharacterEncodingFilter</filter-name>
             <filter-class>....CharacterEncodingFilter</filter-class>
             <init-param>
                 <param-name>encoding</param-name>
                 <param-value>UTF-8</param-value>
             </init-param>
        </filter>
        <filter-mapping>
             <filter-name>CharacterEncodingFilter</filter-name>
             <url-pattern>/*</url-pattern>
        </filter-mapping>
      

  5.   

    如果不行可以改成"GBK"字符集试试
      

  6.   


    顺序的确是要像这位说的那样去做的,顺序反了不会报错的应该
    在SERVLET里 要先写明 request.setCharacterEncoding("UTF-8");(虽然可以在FILTER 过滤器里就OK 了,但写了也没事) LZ试试
      

  7.   

    将6楼的代码改改public void init(FilterConfig filterconfig)
            throws ServletException
        {
            filterConfig = filterconfig;
            encoding = filterconfig.getInitParameter("encoding");
        }
      

  8.   

    只对post方式过滤,get方式不被过滤
      

  9.   

    filter的配置与定义要放在servlet之前
    --
    依你的页面<a href="servlet/TestDataServlet">测试</a>跳转,在web.xml中,就已经有  <servlet-mapping>
      <servlet-name>TestDataServlet</servlet-name>
      <url-pattern>/servlet/TestDataServlet</url-pattern>
      </servlet-mapping>
    与之对应相应了,过滤器当然不会执行。所以你页面的上的<a></a>应该先跳转到过滤器,再由过滤器跳到你要的页面
      

  10.   

    传过来的中文参数处理:
    用这个转码:
         String param= new String(request.getParameter("param").getBytes("ISO-8859-1"), "GBK");