您的位置:首页 > 编程语言 > Java开发

解决静态资源不能加载的三种方法?

2017-05-08 11:30 423 查看

1、静态资源配置

spring mvc对静态资源的管理,是它最大的弱点,老是加载不到js、css等的静态资源

我使用的是法一,在springmvc中配置如下:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">

<!-- 可以扫描controller、service、...这里让扫描controller,指定controller的包 -->
<!-- <context:component-scan base-package="com"></context:component-scan> -->
<context:component-scan base-package="com.show.controller"></context:component-scan>

<!-- 使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置
mvc:annotation-driven默认加载很多的参数绑定方法,
比如json转换解析器就默认加载了,如果使用mvc:annotation-driven不用配置上边的RequestMappingHandlerMapping和RequestMappingHandlerAdapter
实际开发时使用mvc:annotation-driven
-->
<mvc:annotation-driven></mvc:annotation-driven>

<!-- 静态资源解析
包括 :js、css、img、..
-->
<mvc:default-servlet-handler/>

<!--注解映射器 -->
<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> -->
<!--注解适配器 -->
<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> -->

<!-- 视图解析器
解析jsp解析,默认使用jstl标签,classpath下的得有jstl的包
-->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置jsp路径的前缀 -->
<property name="prefix" value="/"/>
<!-- 配置jsp路径的后缀 -->
<property name="suffix" value=".jsp"/>
</bean>
<!-- 文件上传 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为5MB -->
<property name="maxUploadSize">
<value>5242880</value>
</property>
</bean>
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!-- 遇到MaxUploadSizeExceededException异常时,自动跳转到/WEB-INF/jsp/error_fileupload.jsp页面 -->
<prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop>
</props>
</property>
</bean>
</beans>


<mvc:resources mapping="***" location="***">进行静态资源的访问??

法一:

在SpringMVC3.0之后推荐使用一:

<!-- 静态资源访问 -->

<mvc:default-servlet-handler/>

以下两种在SpringMVC3.0之前可以使用

法二:

也可以使用二:

<!-- 静态资源访问

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

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

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

-->

法三:

也可以使用三:

web.xml里添加如下的配置

<servlet-mapping>

<servlet-name>default</servlet-name>

<url-pattern>*.css</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>*.jpg</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>default</servlet-name>

<url-pattern>*.js</url-pattern>

</servlet-mapping>

即可解决

但是我的又出现了这种怪异的情况

2、直接访问jsp页面可以加载页面样式,再通过controller访问同一个页面则加载不了?

刚开始想的原因有以下:
一种是路径问题:

request是会话请求,仅仅和这一次的请求相关,所以很容易被各种框架重写,比如需要指定跳转到其他地方。。

所以出现静态文件访问不到的情况,要么是路径问题,要么是使用了spring,但是没有指定过滤css,导致这些文件被spring直接拦截了

另一种是:在springmvc.xml中没有配置加载静态资源

我的就是路径问题。

我的访问路径是:
http://localhost:8080/maven_show/user/toLogin加载不出来样式,
加载不出来的看到图片的路径(通过控制台看到的404路径找不到)
http://localhost:8080/maven_show/user/images/p1.jpg
直接访问http://localhost:8080/maven_show/show/index.jsp 就有样式

直接这样访问图片也能访问http://localhost:8080/maven_show/show/images/p1.jpg

解决办法:在jsp页面引入<% String path = request.getContextPath(); %>

访问页面的时候

例如:

<script src="<%=path %>/resources/js/jquery-1.8.3.min.js"></script>

<script type="text/javascript" src="<%=path %>/resources/js/move-top.js"></script>

<script type="text/javascript" src="<%=path %>/resources/js/easing.js"></script>

访问相对路径下的静态资源。
即可解决。

【有什么问题或者有什么见解,可以留言交流。】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息