Tomcat运行servlet项目,静态资源css无法显示

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

问题复现:

先简述一下问题:

一个servlet项目,使用了Filter过滤器后,css等静态资源无法使用,但是在浏览器中可以看到状态码是200,说明请求成功,后台log显示路径文件放行。

Tomcat运行servlet项目,静态资源css无法显示_css

后台打印的信息

Tomcat运行servlet项目,静态资源css无法显示_html_02

在之前的servlet -demo项目中,登录页面是webapp下的h5,css也在webapp下,样式可以正常加载,随后在项目中使用了,Servlet中的Filter过滤器,web.xml中设置过滤路径为 /* ,让所有请求都经过过滤器, 在过滤器中的逻辑为判断URI是否为匹配的URI,是则放行,不是则执行else if的内容,与登录相关的资源直接放行。

xml过滤规则

Tomcat运行servlet项目,静态资源css无法显示_html_03

过滤器逻辑

//页面获取的session
     HttpSession session = req.getSession (false);
     String uri = req.getRequestURI ();
     if ("/login.html".equals (uri) || "/css/login.css".equals (uri) || "/loginServlet".equals (uri) || "/favicon.ico".equals (uri) || "/css/index.css".equals (uri)) {
         filterChain.doFilter (req, resp);
         System.out.println ("放行uri参数:" + uri);
     } else if (session == null) {
         System.out.println ("没有有效cookie,未放行uri参数:" + uri);
         resp.sendRedirect (req.getContextPath () + "/login.html");
     } else {
         filterChain.doFilter (req, resp);
         System.out.println ("其他放行uri参数:" + uri + "==>" + session.getId ());
     }

通过断点的验证也可以发现 ,代码逻辑是没有问题的。

解决思路

逻辑没有问题,大概率原因不在这儿,通过控制台的信息,发现css文件是请求到了,但是返回类型是是text/html

Tomcat运行servlet项目,静态资源css无法显示_css_04

通过这个信息可以知道,是过滤器后置增强的时候把所有返回类型设置成了text/html,接着往下看。

解决方案

虽然发现是这里设置到返回类型影响了所有的资源返回类型,但是解决方案不止删除。

Tomcat运行servlet项目,静态资源css无法显示_html_05

第一种方案

  • 当然是删除了,如果返回资源中存在多种类型的静态资源,而html资源没有太多要求时可以直接删掉。在我的项目中,因为只有两个css被转成html了,为了稳妥起见,我并不选择这种方法。

第二种方案

  • 虽然返回类型是html,但是可以让它不通过servlet响应体返回,这样它就不会转码了。那就是在tomcat中添加静态资源的路径。
  • 步骤如下:

Tomcat运行servlet项目,静态资源css无法显示_css_06

  • 选择deployment

Tomcat运行servlet项目,静态资源css无法显示_html_07

  • 选择加号,选择external Source

Tomcat运行servlet项目,静态资源css无法显示_css_08

  • 选择css文件夹所在位置

Tomcat运行servlet项目,静态资源css无法显示_html_09

最后应用,重启tomcat服务器

Tomcat运行servlet项目,静态资源css无法显示_解决方案_10

问题解决:

在解决过程中也看了别人的贴子和解决方案,还有另外一种解决方案是用@{ }包裹css路径,测试后发现不行,只能用于thymeleaf。










阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: CSSTomcat