springMVC无法访问静态资源问题

解决这个问题涉及到两个方面的问题: 配置问题 、引入静态文件问题

1、配置问题

web.xml配置的DispatchServlet如下:

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

这样DispatchServlet会把所有的请求都会拦截,静态资源就也会被拦截,导致无法访问(譬如:js文件,css文件,图片等)。

    这样就必须得配置允许访问静态变量的方法,网上方法有好几种,这里我用的是:

    在springMVC的配置文件中加<mvc:resources location="/js/" mapping="/js/**" />的这种方法,

但是配置好后,还是无法访问到我页面的js文件。

    网上查了很多,说是要在配置文件中加<mvc:annotation-driven />配置的,但是我的配置文件里本来就有这个配置,但是别人能访问,我的就不可以呢?

其实是项目布局的问题,项目布局不一样达到效果就不一样了,我的项目的文件目录如下:


因为我的js、jsp文件是在WEB-INF下的,所以配置文件中应该配置成<mvc:resources location="/WEB-INF/js/" mapping="/js/**" />,这样就可以了。

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

2、静态文件引入问题

    就算上面的配置都配置对了,还是出现访问不了静态资源页面(这里我引入的是js文件),这就很有可能是引入文件路径有问题导致无法访问到该文件(这里我说的是我出现的问题,每个人出现的问题可能不一样,要根据情况而定)

    刚开始的时候我在我的jsp页面引入js文件如下:(ps : 我的jsp文件是在jsp目录下的)

    <script src="../js/jquery-3.3.1.js"></script>


根据相对路径引入js文件,这个路径是正确的,但是还是报找不到js文件问题,最后我发现引入路径有问题,改成

<script src="js/jquery-3.3.1.js"></script>就对了。

        因为通过DispatchServlet处理后,在进入的jsp页面的根目录是: spring-mvc(我的项目名)/webapp目录,那么引入的js文件的路径是,spring-mvc(我的项目名)/webapp/js/jquery-3.3.1.js ,这样怎么可以访问到WEB-INF/js/jquery-3.3.1.js,因为我们在上面的配置文件中配置了<mvc:resources location="/WEB-INF/js/" mapping="/js/**" />,这样就相当于访问了spring-mvc(我的项目名)/webappWEB-INF/js/jquery-3.3.1.js。

(注意:

        在html(或 jsp文件当做html文件一样用时)中,引入js文件<script src="../js/jquery-3.3.1.js"></script>(根据我项目的路径)这个是对的,这个是相对于html或jsp这个路径的相对路径来引入js文件。

        但是在springMVC中进过DispatchServlet处理请求后,再进入对应的jsp页面后,这个js文件引入路径<script src="../js/jquery-3.3.1.js"></script>就是错的了。

        这个时候就应该是对象项目的根目录引入js文件,譬如<script src="js/jquery-3.3.1.js"></script>,这就是直接访问项目的webapp下的js目录的jquery-3.3.1.js,但是明明我的js目录不在webapp下,而是在webapp/WEB-INF目录下,这是因为前面的配置文件中配置了<mvc:resources location="/WEB-INF/js/" mapping="/js/**" />,所以就可以访问了。

猜你喜欢

转载自blog.csdn.net/xingkongdeasi/article/details/79557198