SprringMVC引入外部静态文件

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

这是SpringMVC项目的web.xml文件中的配置,由于url-pattern=/,所以不论任何请求都会被dispatcherServlet拦截处理,这包括一些静态资源,比如html,css ,js,jpg等,比如

<a href="../staticResource/front2.html">front2.html</a>

dispatcherServlet就会拦截这个路径,然后寻找是否有匹配的requestMapping,如果发现没有就会报错

No mapping found for HTTP request with URI [/Spring-test/staticResource/front2.html] in DispatcherServlet with name 'springServlet'

这样强行加载的结果就是404.

当然有两个方法可以解决这个问题

1.使用DefaultServlet来拦截加载静态资源的请求

        <servlet>
		<servlet-name>default</servlet-name>
		<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.html</url-pattern> <--注意此处*前不能有/-->
	</servlet-mapping>

它可以抢在dispatcherServlet之前抢先把静态资源的请求拦截。只要不会被dispatcherServlet拦截,并在可以读取的范围内,静态文件就能成功加载。

2.使用mvc:resources标签引用静态资源

只需要在配置文件中添加如下代码即可。

<mvc:annotation-driven></mvc:annotation-driven>   
     <mvc:resources location="/staticResource/" mapping="/staticResource/**"/>   

location:静态文件们在哪个包下面

mapping : 需要被拦截的请求路径,格式一般为“/xx/**",注意最好以*号来结尾,否则会报错,原因我也不知道,谁知道请告诉我为啥吧!

猜你喜欢

转载自blog.csdn.net/qq_26950567/article/details/80327896