为什么我设置字符过滤器后登录页面css失效了??我是想只过滤page页面,这样写的为什么不可以呢?

为什么我设置字符过滤器后登录页面css失效了??我是想只过滤page页面,这样写的为什么不可以呢?

问题描述:

为什么我设置字符过滤器后登录页面css失效了??我是想只过滤page页面,这样写的为什么不可以呢?

package com.imooc.bookmanager.filter;

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

public class EncodeFilter implements Filter {
private static String encoding;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//接收web.xml配置文件中的初始参数
encoding = filterConfig.getInitParameter("CharsetEncoding");
}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
//请求的字符编码设置为“UTF-8”
request.setCharacterEncoding(encoding);
//响应的字符编码设置为“UTF-8”(仅将page页面设置)
String uri = request.getRequestURI();
System.out.println(uri);
if (uri.contains("page")) {
response.setContentType("text/html;charset="+encoding);
}
filterChain.doFilter(servletRequest, servletResponse);

}

@Override
public void destroy() {

}
}


相关截图:

http://img1.sycdn.imooc.com//climg/60028ee409b1fb6203120611.jpg

正在回答

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

3回答

你好,同学。

        我也遇到了同样的问题。

       后来在google F12检查时,发现,因为 是则于在过滤器里面 设置 了 contentType="text/html" ,这样,css就被 当成了mine类型 text/html ,而 不是text/css. 后来我把filter 改了 ,如下, 页面正常了。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

// TODO Auto-generated method stub

// place your code here

         HttpServletRequest req=(HttpServletRequest)request;

         //String contentType=req.getHeader("Accept");

         System.out.println("拦截到:"+req.getRequestURL());

        // System.out.println("contentType="+contentType);         

         req.setCharacterEncoding(encoding);

         HttpServletResponse res=(HttpServletResponse)response;

         //res.setContentType("contentType=text/html;charset="+encoding);

         res.setCharacterEncoding("UTF-8");

// pass the request along the filter chain

chain.doFilter(request, response);

}



      

好帮手慕小班 2021-01-16 17:47:38

同学你好,同学的请求的servlet都是/page 开头,那同学可以在配置这个EncodeFilter时,直接拦截page下的请求就可以,比如:

  <filter>

     ​    ​ <filter-name>EncodeFilter</filter-name>

     ​    ​ <filter-class>com.imooc.bookmanager.filter.EncodeFilter</filter-class>

  </filter>

   <filter-mapping>

      ​    ​ <filter-name>EncodeFilter</filter-name>

       ​    ​ <url-pattern>/page/*</url-pattern>

  </filter-mapping>

如上所示,同学再来试试。
祝学习愉快!

好帮手慕小班 2021-01-16 16:22:17

同学你好,1、同学的login页面是在page目录下吗,如果是,这样设置后,响应文件的格式会受到影响,由于css格式不正确(被变成text/html格式),从而导致css文件未正确解析,对应css等样式也就加载不到了。

    2、同学是想将page文件夹下的html或者jsp文件设置response.setContentType("text/html;charset="+encoding); 吗?

如果是不建议同学这样做。

如果同学想表达的不是这个意思,还麻烦同学具体描述一下。

祝学习愉快!

  • 提问者 谁叫我这么坏 #1

    jsp页面我放在WEB-INF下的jsp文件夹中的,请求的servlet都是/page 开头,所以我想的是这样应该可以过滤掉jsp页面

    2021-01-16 16:30:40
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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