怎么设置了过滤器还是有乱码?

怎么设置了过滤器还是有乱码?

http://img1.sycdn.imooc.com//climg/60a0995709fc52fe13340447.jpg

设置了字符过滤的代码,怎么还是有乱码?

package com.imooc.bbs.global;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class EncodingFilter implements Filter {
   private String encoding = "UTF-8";

public void init(FilterConfig filterConfig) throws ServletException {
/* 判断一下配置文件中有没有设置编码格式
         如果有,则使用配置的
         如果没有,则使用默认值UTF-8*/
       if (filterConfig.getInitParameter("encoding") != null) {
           encoding=filterConfig.getInitParameter("encoding");
}
   }

   public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

       HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
/* 设置requestresponse的编码格式,并放行访问链接*/
       request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
chain.doFilter(request,response);


}

   public void destroy() {

   }
}


<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
        version="3.1">

   <display-name>Archetype Created Web Application</display-name>

   <!--配置字符过滤器-->
   <filter>
       <filter-name>encoding</filter-name>
       <filter-class>com.imooc.bbs.global.EncodingFilter</filter-class>
       <init-param>
           <param-name>encoding</param-name>
           <param-value>utf-8</param-value>
       </init-param>
   </filter>
   <filter-mapping>
       <filter-name>encoding</filter-name>
       <url-pattern>/*</url-pattern>
   </filter-mapping>

   <!--    配置默认servlet,对静态资源进行处理-->
   <servlet-mapping>
       <servlet-name>default</servlet-name>
       <url-pattern>/assets/*</url-pattern>
       <url-pattern>/js/*</url-pattern>
       <url-pattern>/vendor/*</url-pattern>
       <url-pattern>*.js</url-pattern>
       <url-pattern>*.jpg</url-pattern>
       <url-pattern>*.gif</url-pattern>
       <url-pattern>*.png</url-pattern>
       <url-pattern>*.css</url-pattern>
   </servlet-mapping>
   <!--    配置springMVC的全局servlet-->
   <servlet>
       <servlet-name>SpringMVC</servlet-name>
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
       <init-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>classpath:spring-web.xml</param-value>
       </init-param>
   </servlet>
   <servlet-mapping>
       <servlet-name>SpringMVC</servlet-name>
       <url-pattern>/</url-pattern>
   </servlet-mapping>
</web-app>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕阿满 2021-05-17 09:54:19

同学你好,前台页面中有static静态资源目录,如;:

http://img1.sycdn.imooc.com//climg/60a1cbde096f269c05320280.jpg

url.indexOf("/static/") == -1

是判断路径是否包含该目录,如果包含,则不设置编码。

在同学的代码中,缺少chain.doFilter(request,response);放行,造成显示空白。

建议同学在if判断外增加chain.doFilter(request,response);再试试。

祝学习愉快~

好帮手慕阿满 2021-05-16 14:23:24

同学你好,从图片上看是字体图标乱码,建议同学在过滤器的doFilter()方法中,增加如下代码,对前台页面的静态资源放行,如:

String url = request.getRequestURI();
if(url.indexOf("/static/") == -1){
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
}
filterChain.doFilter(request,response);

​然后删除target文件,清空浏览器缓存,重启项目再试试。

祝学习愉快~

  • 提问者 视线模糊 #1
    url.indexOf("/static/") == -1

    这个判断是什么意思啊?我的项目里面灭有static这个文件件啊

    2021-05-16 19:14:48
  • 提问者 视线模糊 #2
    改成这样反而什么都没有了哟


    public class EncodingFilter implements Filter {
       private String encoding = "UTF-8";
    public void init(FilterConfig filterConfig) throws ServletException {
    /* 判断一下配置文件中有没有设置编码格式
             如果有,则使用配置的
             如果没有,则使用默认值UTF-8*/
           if (filterConfig.getInitParameter("encoding") != null) {
               encoding=filterConfig.getInitParameter("encoding");
    }
       }

       public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {


           HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;
    /* 设置requestresponse的编码格式,并放行访问链接*/
           String url = request.getRequestURI();
    if(url.indexOf("/static/") == -1){
               request.setCharacterEncoding(encoding);
    response.setCharacterEncoding(encoding);
    }
    //        request.setCharacterEncoding(encoding);
    //        response.setCharacterEncoding(encoding);
    //        chain.doFilter(request,response);


       }

       public void destroy() {

       }
    }


    http://img1.sycdn.imooc.com//climg/60a101e00960370a07700402.jpg

    2021-05-16 19:29:18
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师