解决No mapping found for HTTP request with URI [/] in DispatcherServlet with name 'dispatcherServlet'

21-Nov-2018 11:27:52.789 警告 [http-nio-8088-exec-3] org.springframework.web.servlet.DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI [/] in DispatcherServlet with name ‘dispatcherServlet’
关于springMVC拦截后无法访问静态资源问题

一、问题介绍
在平常的ssm开发中,经常遇到这样的拦截问题,但是拦截器过于强大,连不需要的拦截的资源也一起拦截了,导致静态资源无法访问,也就导致了一堆的404
二、问题分析

    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:config/spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

通过以上代码看出,服务器会对@Controller中的@RequestMapping里带有.html请求进行拦截,那么怎么才能拦截静态资源呢

三、解决方案
1、简单粗暴的servlet方法
通过一堆的拦截器进行拦截所有的静态文件(根据各自情况)
这种方法相当于在告诉服务器,这些东西你别管

	<servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>*.png</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>*.jsp</url-pattern>
    </servlet-mapping>

这种方法显得过于臃肿和麻烦
2.方法与上面大体相同

    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/resouces/*</url-pattern>
    </servlet-mapping>

3.通过springMVC配置来解决问题
在mvc文件中加上静态资源配置(推荐)

    <mvc:resources location="static" mapping="/static/**"/>

这里的location代表在webapp下的static的所有文件,mapping表示以static开头的所有请求
4.

<mvc:default-servlet-handler/>

这里可以直接一键配置,但是弊端也很多,不是非常推荐使用,平常比较懒的同学可以尝试~

总结:如果还是无法访问资源,可能是以上配置出现的问题,如果有其他方法解决欢迎留言交流,转载请注明出处,谢谢~

发布了4 篇原创文章 · 获赞 2 · 访问量 3465

猜你喜欢

转载自blog.csdn.net/qq_40479674/article/details/84316887