spring 关于引入js、css文件问题
来源:互联网 发布:snh 知乎 编辑:程序博客网 时间:2024/06/04 17:11
最近项目中遇到引入JS文件失败,页面调式发现404错误,提示找不到引入文件,之前对这一部分一知半解,为此现在查看了很多资料和书籍,网上参考如下:
http://www.cnblogs.com/shinejaie/p/5258630.html
http://blog.csdn.net/taijianyu/article/details/44672035
http://blog.csdn.net/sbangm/article/details/41722559
仔细看完了一些资料以后算是理解了它的一些原理和使用方式:(下面大部分粘贴自别人的博客,加入少许自己的理解。上面链接第四个,讲解的很详细,请尊重原创)
spring mvc 静态资源 404问题(注意 最好不要把静态文件放在在WEB_INF下面,第1,2种方法不能访问,第三种可以访问)
在web.xml配置servlet-mapping的时候,如果url-pattern设置为“/” (如下),很多人都会遇到导入js,css,图片等静态资源出现Firefox调试窗口会报出的404错误,而你的确也不能访问那些资源。
此处说的web.xml中配置代码如下:
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
方法1. 修改web.xml文件,增加对静态资源的url映射,要加在org.springframework.web.servlet.DispatcherServlet的前面
如:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
在web.xml中添加好配置后,在jsp页面就可以引用这些静态资源了
<script type="text/javascript" src="static/js/1.js"></script>
如果放在WEB-INF目录下,即使你使用<c:url value=“/WEB-INF/js/jquery.js”>也是会出现404错误的。
百度时发现:以下各容器的default servlet名字,而且还提到静态资源servlet映射需要写在dispatcherServlet的前面;我在Jboss-eap-5.1中测试过,前后没有关系;所以可能是容器或者版本的关系吧。
Tomcat, Jetty, JBoss, and GlassFish 默认 Servlet的名字 -- "default"
Google App Engine 默认 Servlet的名字 -- "_ah_default"
Resin 默认 Servlet的名字 -- "resin-file"
WebLogic 默认 Servlet的名字 -- "FileServlet"
WebSphere 默认 Servlet的名字 -- "SimpleFileServlet"
方法2.在相应的 -servlet.xml中添加spring配置<mvc:default-serlvet-handler>
如:
<mvc:default-servlet-handler/>
这种方法只需要添加一行代码,在jsp页面中引用时和方法1一样,同样也不能引用WEB-INF下的资源。
方法3.使用spring 3.0.4的新特性,在相应的 -servlet.xml中添加配置<mvc:resource>
如:
3.1 <mvc:resources location="/js/" mapping="/js/**" />
或
3.2 <mvc:resources location="/WEB-INF/js/" mapping="/js/**" />
这种方法我写了两个配置,不同的地方只是location的值,一个是“/js/”,一个是“/WEB-INF/js/”;两种都可以,根据你自己的目录结构来引用。这就说明使用这种方式可以引用WEB-INF目录下的静态资源;这里的mapping属性的值用了ant的通配符方式,"/js/**"(两个"*") 指location的值所表示的目录以及所有子目录;但是在jsp页面中引用时需要注意:加<mvc:resources...前,要加上<mvc:annotation-driver/>,否则servlet控件器会解析失败
方法4 直接在web.xml中设置spring mvc的过滤路径
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup><!-- 大于等于0启动时加载此框架 -->
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
-------------------------------------------------------------------------处理方法完结-------------------------------------------------------------------------
补充说明:多个HandlerMapping的执行顺序问题:
DefaultAnnotationHandlerMapping的order属性值是:0
<mvc:resources/ >自动注册的 SimpleUrlHandlerMapping的order属性值是: 2147483646
<mvc:default-servlet-handler/>自动注册 的SimpleUrlHandlerMapping 的order属性值是: 2147483647
spring会先执行order值比较小的。当访问一个a.jpg图片文件时,先通过 DefaultAnnotationHandlerMapping 来找处理器,一定是找不到的,因为我们没有叫a.jpg的Action。然后再按order值升序找,由于最后一个 SimpleUrlHandlerMapping 是匹配 "/**"的,所以一定会匹配上,就可以响应图片。
访问一个图片,还要走层层匹配。不知性能如何?
最后再说明一下,方法1、方法3在访问静态资源时,如果有匹配的总拦截器(即web.xml中:<url-pattern>/</url-pattern>),就会走拦截器。如果你在拦截中实现权限检查,要注意过滤这些对静态文件的请求。
如果你的DispatcherServlet拦截 *.do这样的URL后缀,就不存上述问题了。那么还是有后缀方便。
- spring 关于引入js、css文件问题
- js、css等文件引入空白问题
- JSP引入js、CSS文件的问题
- JS、CSS文件引入、导入404问题,引入报错。
- 关于springmvc无法引入js文件问题
- 关于iOS项目中引入Html5文件(html/js/css)的路径问题
- jsp文件中引入js、css文件失败问题
- 关于CI框架引入CSS与JS文件
- 关于引入js和css文件是否成功
- Spring mvc jsp中引入静态css资源文件问题
- 网页中引入外部js,css文件出现的问题
- springMvc整合Freemarker引入CSS,JS文件404的问题
- Thinkphp5的css和js文件引入问题
- 引入js、css等文件的路径问题
- Maven项目引入JS,css等文件的问题
- 引入外部css ,js文件
- yii引入js,css文件
- ftl文件引入css,js
- python中List添加,删除元素的几种方法
- Redis-Cluster的安装
- 开源爬虫: Heritrix 1.14.4 安装/使用
- 《算法导论》Dijkstra算法实现
- SEO介绍
- spring 关于引入js、css文件问题
- c++实验四
- 150.Evaluate Reverse Polish Notation(Stack-Medium)
- C++类成员函数存储方式
- Lua + GraphicsMagick安装(第三种的lua脚本)
- kali Linux 搜狗输入法无法使用
- EIGRP基本配置
- AOJ.853 SLF 改造计划
- 主成分碎石检验