Tomcat运行servlet项目,静态资源css无法显示
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
问题复现:
先简述一下问题:
一个servlet项目,使用了Filter过滤器后,css等静态资源无法使用,但是在浏览器中可以看到状态码是200,说明请求成功,后台log显示路径文件放行。
后台打印的信息
在之前的servlet -demo项目中,登录页面是webapp下的h5,css也在webapp下,样式可以正常加载,随后在项目中使用了,Servlet中的Filter过滤器,web.xml中设置过滤路径为 /* ,让所有请求都经过过滤器, 在过滤器中的逻辑为判断URI是否为匹配的URI,是则放行,不是则执行else if的内容,与登录相关的资源直接放行。
xml过滤规则
过滤器逻辑
//页面获取的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
通过这个信息可以知道,是过滤器后置增强的时候把所有返回类型设置成了text/html,接着往下看。
解决方案
虽然发现是这里设置到返回类型影响了所有的资源返回类型,但是解决方案不止删除。
第一种方案
- 当然是删除了,如果返回资源中存在多种类型的静态资源,而html资源没有太多要求时可以直接删掉。在我的项目中,因为只有两个css被转成html了,为了稳妥起见,我并不选择这种方法。
第二种方案
- 虽然返回类型是html,但是可以让它不通过servlet响应体返回,这样它就不会转码了。那就是在tomcat中添加静态资源的路径。
- 步骤如下:
- 选择deployment
- 选择加号,选择external Source
- 选择css文件夹所在位置
最后应用,重启tomcat服务器
问题解决:
在解决过程中也看了别人的贴子和解决方案,还有另外一种解决方案是用@{ }包裹css路径,测试后发现不行,只能用于thymeleaf。
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |