我的爬坑日记丨使用@RequestMapping("**")处理404导致静态资源无法正确加载

我们知道,当我们请求一个不存在的路径请求时,web服务器会抛出404异常。因而我们需要提供一个友好页面反馈给用户。为此我写了以下方法:

这个方法的作用为:当映射处理器(HandlerMapping)找不到与之对应的url时,便会将该请求交给该方法来处理。这样可以我们就可以判定此次请求不存在,并将其跳转到404友好界面。现在我们来验证实验结果,我在地址栏输入一个不存在的路径请求。注意,如果使用了拦截器,过滤器,一定要输入一个会被放行的路径。结果如下

 

可以看到刚刚写的方法成功了。页面成功跳转到404友好页面了。但是却带来了另外一个问题。样式表css似乎没有加载成功。我们打开开发者模式重新请求一遍。

 

貌似找到了问题。静态资源没有加载成功。警告为“Resource interpreted as Stylesheet but transferred with MIME type text/html”:资源解释为样式表,但使用mime-type-text/html传输,注意这里的警告不是404错误。 真是奇怪的问题,也正是这问题导致了浏览器后面报的错误,导致了样式表没有起作用。之前没有这种状况,问题必然是刚写的方法导致的。

于是,我在新写的方法加上断点,看看是怎么回事?现在再次请求

从图中看到,不合法的请求已经进到该方法了。但是这不是导致问题的原因,按f8将其放行。

是的,这次我们看到了问题的原因。静态资源的请求竟然进入了该方法。这也是警告为“Resource interpreted as Stylesheet but transferred with MIME type text/html”原因。看到这你可能认为我过滤器、拦截器出问题了。我们来看下是如何配置的。

 细看确实没有问题啊。拦截器对静态资源进行了放行。过滤器使用的默认过滤器,也会对静态资源进行放行。那么问题出在哪呢?

其实问题就出在@RequestMapping("**")。**表示所有的路径请求,即静态资源的请求也会进入该方法。那么该如何处理该方法呢?其实只要将静态资源进行特别处理就可以了。下面是我用的方法。

在web.xml加入以下配置,激活 Tomcat 的 defaultServlet 来处理静态资源。注意,一定要放到DispatcherServlet之前

当然,还有其他处理方式。这个自行到网上查询关键字 spring mvc处理静态资源。在此不再赘述。现在来查看实验结果。重启服务器。

这时,静态资源不会再进入spring mvc。问题成功解决。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值