解决 web 项目只能访问 jsp 确无法访问 html 页面(绝对有效)

一、问题描述

遇到个怪问题,项目访问jsp 页面可以正常访问,但是访问 HTML 页面时,就无法访问,报 404 错误
在这里插入图片描述
排除了页面没啥问题,那就是web.xml 的问题了
在这里插入图片描述
主要问题就是出在了这个前端控制器上了

原因
这里 dispatcherServlet 会对请求进行拦截,当设置为 / 时,意味着会对除了*.jsp之外的页面都进行拦截(对于*.jsp,由于servlet 容器中内置了 jspServlet,所以不会被 /拦截),
拦截后去 springmvc 就会进入spring mvc的DispatcherServlet类,然后去寻找 controller,接着找不到对应的 controller,资源找不到、所以报404。

二、解决方案

(1)激活默认的 defaultServlet 来处理静态文件
在这里插入图片描述

<servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>
 
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.png</url-pattern>
    </servlet-mapping>
 
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.jpg</url-pattern>
    </servlet-mapping>
 
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.gif</url-pattern>
    </servlet-mapping>
        <servlet-mapping> 
            <servlet-name>default</servlet-name> 
            <url-pattern>*.html</url-pattern> 
    </servlet-mapping>

对于这些静态资源,都是采用默认的servlet 处理,不对他们进行过滤处理,需要注意如果这样处理需要,将其放到 spring mvc的DispatcherServlet的前面,否则程序需要先执行DispatcherServlet拦截*.html请求,然后再执行defaultServlet时,又放开*.html请求,多走了一步,可以提升性能

具体的区别:

defaultServlet:是既服务于静态资源又服务于目录列表(如果允许目录列表的话)的servlet;通过defaultServlet我们可以通过链接访问应用内的资源文件,例如.jpg、.html、.js、.css、.jpg这类的静态文件。

DispatcherServlet:spring mvc的前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。

(2)修改 dispatcherServlet 的过滤条件,只对后缀为 *.do 的请求路径提交到 springmvc 中:

 <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
 </servlet-mapping>

这样做,需要对应 controller 里的请求路径:也就是只对 *.do 的请求路径,拦截到controller 里匹配
在这里插入图片描述
(3)

扫描二维码关注公众号,回复: 11340558 查看本文章

猜你喜欢

转载自blog.csdn.net/nanhuaibeian/article/details/106796458
今日推荐