解决静态资源不能加载的三种方法?
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>
访问相对路径下的静态资源。
即可解决。
【有什么问题或者有什么见解,可以留言交流。】
相关文章推荐
- 加载不了静态资源解决方法
- Django项目不能加载静态资源的问题,解决办法!
- Nginx 配置不当造成加载静态资源件提示ERR_CONTENT_LENGTH_MISMATCH解决方法
- struts2框架下Tomcat不能加载css、js和图片等静态资源的解决办法
- springmvc controller跳转后jsp页面无法加载静态资源css,图片等错误解决方法
- springmvc解决静态资源无法访问的两种方法
- Oracle 11g不能导出空表的三种实用解决方法
- PHP 5.0不能加载动态模块的解决方法
- Unity 编辑器环境下不能正确加载Android Assetbundle 中的 Shader 解决方法
- 游戏中避免重复资源加载,解决资源重复加载的方法
- SpringMVC 拦截器不拦截静态资源的三种处理方式方法
- sdwebImageview 在https 中不能加载图片时解决方法
- Linux开机不能自动加载 ~/.bash_profile 文件的解决方法
- xcode7和ios9下UIWebView不能加载网页的解决方法
- 解决springMVC 跳转js css图片等静态资源无法加载的问题
- SpringMVC 拦截器不拦截静态资源的三种处理方式方法
- ionic加载网络图片资源的解决方法
- 解决Github使用Fastly CDN而导致不能加载网页的方法 转自 沙丘:http://www.enkoo.net/fastly-cdn-in-gifhub.html
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
- 解决maven jetty启动后无法加载修改过后的静态资源