请教spring mvc 伪静态MVC静态化后,访问问题

SpringMVC访问静态资源 - 停留的风 - 博客园
posts - 232, comments - 1195, trackbacks - 5, articles - 27
SpringMVC访问静态资源
在SpringMVC中常用的就是Controller与View。但是我们常常会需要访问静态资源,如html,js,css,image等。
默认的访问的URL都会被DispatcherServlet所拦截,但是我们希望静态资源可以直接访问。该肿么办呢?
在配置文件:web.xml可以看到:
&!-- Processes application requests --&
&servlet-name&appServlet&/servlet-name&
&servlet-class&org.springframework.web.servlet.DispatcherServlet&/servlet-class&
&init-param&
&param-name&contextConfigLocation&/param-name&
&param-value&/WEB-INF/spring/appServlet/servlet-context.xml&/param-value&
&/init-param&
&load-on-startup&1&/load-on-startup&
&/servlet&
&servlet-mapping&
&servlet-name&appServlet&/servlet-name&
&url-pattern&/&/url-pattern&
&/servlet-mapping&
静态资源访问,其实方法有多种,如:通过开放tomcat的defaultServlet,修改默认的url-parttern。
但是SpringMVC提供了更为便捷的方式处理静态资源。
解决方案:
直接在servlet-context.xml中添加资源映射。
我的开发环境:
1、Eclipse Luna SP1
2、Springsource-tool-suite 3.6.4&
修改servlet-context.xml,添加resource映射即可。
servlet-context.xml的路径如下:
配置文件内容:
&?xml version="1.0" encoding="UTF-8"?&
&beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"&
&!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure --&
&!-- Enables the Spring MVC @Controller programming model --&
&annotation-driven /&
&!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --&
&resources mapping="/resources/**" location="/resources/" /&
&resources mapping="/images/**" location="/images/" /&
&resources mapping="/js/**" location="/js/" /&
&!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --&
&beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"&
&beans:property name="prefix" value="/WEB-INF/views/" /&
&beans:property name="suffix" value=".jsp" /&
&/beans:bean&
&context:component-scan base-package="com.yank.firstapp" /&
&/beans:beans&
&!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --&
&resources mapping="/resources/**" location="/resources/" /&
&resources mapping="/images/**" location="/images/" /&
&resources mapping="/js/**" location="/js/" /&
mapping:映射
location:本地资源路径,注意必须是webapp根目录下的路径。
两个*,它表示映射resources/下所有的URL,包括子路径(即接多个/)
这样我们就可以直接访问该文件夹下的静态内容了。
http://localhost:8090/firstapp/images/cookie.png
http://localhost:8090/firstapp/js/jquery-1.11.2.js
配置的location一定要是webapp根目录下才行,如果你将资源目录,放置到webapp/WEB-INF下面的话,则就会访问失败。这个问题常常会犯。
错误方式:
WEB-INF目录作用
WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。
如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。
当然,你非要放在WEB-INF中,则必须修改resources映射,如:
&resources mapping="/js/**" location="/WEB-INF/js/" /&
推荐方式:本文的目录结构为如下图所示。springmvc(5)
最近在学习easyui,需要后台返回json数据格式,后台采用Springmvc+mybatis+spring+由于easyui主要包含一些静态文件的调用,因此我首先采用的是在springmvc配置文件中加上静态文件的映射关系,
&!-- 静态文件 --&
&mvc:resources mapping=&/css/**& location=&/css/& /&
&mvc:resources mapping=&/easyui/**& location=&/easyui/& /&
&mvc:resources mapping=&/js/**& location=&/js/& /&
但是,随后发现了很大的问题,静态页面可以显示,但是控制器失效了,无法处理请求并返回json数据了。
在网上查询了很多资料,发现解决静态文件访问的访问有很多,其中一种恰好可以实现静态文件和控制器同时生效。这种方式是启用Servlet的defaultServlet来处理静态文件,只需要在web.xml中加上上述配置即可。
&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&
&servlet-mapping&
&servlet-name&default&/servlet-name&
&url-pattern&*.css&/url-pattern&
&/servlet-mapping&
&servlet-mapping&
&servlet-name&default&/servlet-name&
&url-pattern&*.png&/url-pattern&
&url-pattern&*.js&/url-pattern&
&url-pattern&*.jpg&/url-pattern&
&url-pattern&*.css&/url-pattern&
&/servlet-mapping&
当然,springmvc中就不需要配置静态文件的映射了。
但是,我还是不懂为什么在springmvc中配置静态文件的映射之后,会出现控制器失效的情况???
解决方案:
&!-- 静态文件 --&
&mvc:annotation-driven/&
&mvc:resources mapping=&/css/**& location=&/css/& /&
&mvc:resources mapping=&/easyui/**& location=&/easyui/& /&
&mvc:resources mapping=&/js/**& location=&/js/& /&
加入一句&mvc:annotation-drivern/&就可以解决
另一种方法是在springmvc中加入
&!-- 对静态资源文件的访问
&mvc:default-servlet-handler/&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:13628次
排名:千里之外
原创:74篇
(1)(1)(1)(7)(10)(4)(19)(12)(3)(2)(3)(9)(1)(1)(1)关于springmvc静态资源的访问问题_百度知道
关于springmvc静态资源的访问问题
photos/ /photos/ mapping=&quot我配置了&&#47:resources location=&quot.JPG
无法访问 ;&quot,如果改为小写是OK的
对于图片资源后缀大写的话 则无法访问;&/
提问者采纳
&*;servlet-name&&servlet-name&*;*;/
&url-pattern&//servlet-name&servlet-name&/default&default&servlet-name&&url-pattern&gt.jpg的过滤servlet-mapping&url-pattern&url-pattern&servlet-mapping&/servlet-mapping&
&default&&lt.css&/&&servlet-name&url-pattern&
&&#47.xml中是不是定义了这样的&
&/servlet-mapping&servlet-mapping&gt.js&url-pattern&gt正常情况应该不会区分 文件后缀的吧你是不是在别处定义了 类似;servlet-mapping&gt
确实没有在别处定义
提问者评价
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁spring MVC 静态资源访问问题。
[问题点数:20分,结帖人shanxiuwei]
spring MVC 静态资源访问问题。
[问题点数:20分,结帖人shanxiuwei]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2016年1月 Java大版内专家分月排行榜第二2015年12月 Java大版内专家分月排行榜第二2015年8月 Java大版内专家分月排行榜第二2015年3月 Java大版内专家分月排行榜第二2015年1月 Java大版内专家分月排行榜第二2014年12月 Java大版内专家分月排行榜第二2014年11月 Java大版内专家分月排行榜第二2014年6月 Java大版内专家分月排行榜第二2014年4月 Java大版内专家分月排行榜第二2014年1月 Java大版内专家分月排行榜第二2013年11月 Java大版内专家分月排行榜第二
2015年9月 Java大版内专家分月排行榜第三2015年6月 Java大版内专家分月排行榜第三2015年5月 Java大版内专家分月排行榜第三2015年2月 Java大版内专家分月排行榜第三2014年3月 Java大版内专家分月排行榜第三2013年12月 Java大版内专家分月排行榜第三
2016年1月 Java大版内专家分月排行榜第二2015年12月 Java大版内专家分月排行榜第二2015年8月 Java大版内专家分月排行榜第二2015年3月 Java大版内专家分月排行榜第二2015年1月 Java大版内专家分月排行榜第二2014年12月 Java大版内专家分月排行榜第二2014年11月 Java大版内专家分月排行榜第二2014年6月 Java大版内专家分月排行榜第二2014年4月 Java大版内专家分月排行榜第二2014年1月 Java大版内专家分月排行榜第二2013年11月 Java大版内专家分月排行榜第二
2015年9月 Java大版内专家分月排行榜第三2015年6月 Java大版内专家分月排行榜第三2015年5月 Java大版内专家分月排行榜第三2015年2月 Java大版内专家分月排行榜第三2014年3月 Java大版内专家分月排行榜第三2013年12月 Java大版内专家分月排行榜第三
2016年1月 Java大版内专家分月排行榜第二2015年12月 Java大版内专家分月排行榜第二2015年8月 Java大版内专家分月排行榜第二2015年3月 Java大版内专家分月排行榜第二2015年1月 Java大版内专家分月排行榜第二2014年12月 Java大版内专家分月排行榜第二2014年11月 Java大版内专家分月排行榜第二2014年6月 Java大版内专家分月排行榜第二2014年4月 Java大版内专家分月排行榜第二2014年1月 Java大版内专家分月排行榜第二2013年11月 Java大版内专家分月排行榜第二
2015年9月 Java大版内专家分月排行榜第三2015年6月 Java大版内专家分月排行榜第三2015年5月 Java大版内专家分月排行榜第三2015年2月 Java大版内专家分月排行榜第三2014年3月 Java大版内专家分月排行榜第三2013年12月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。&&完spring MVC开发中静态页面访问路径为什么出错?今天在搭建springMVC项目练手的时候,碰到一个之前没遇到过的问题,在这里请教一下各位大神。问题是这样,在web.xml中配置dispatcherServlet时,拦截所有请求,在页面上的资源加载和访问,请求路径都是写的相对路径,但是在经过controller返回页面的时候,此时所有的请求路径(包括静态资源)都会给我自动加上一个类似于struts中的namespace字段,导致路径异常访问不了描述不是太清楚,大家配合截图,应该能更明了项目结构:maven项目项目首页:在这里是没有任何问题,因为这里是直接访问jsp页面,而并非是经过后台返回页面学校controller:访问学生列表,从这里返回到前端list页面学生列表:前端jsp页面,图中的js加载路径中加入&../&,直接从根目录获取js,这样也是没问题的若是js看不太明显,这里大家可以看到,只要是访问http://localhost:8080/SSM/school/*.action之后,此时页面上的所有请求访问都会被限制到http://localhost:8080/SSM/school这里,因为写的是绝对路径不知道大家有没有看明白。其实这个问题说起来也没有什么恶劣的影响,解决办法也很简单,我们只需要将项目的path设置&/&,这样直接访问http://localhost:8080即可,不用带上项目名称SSM,在所有的请求里面,也只需要在前面加上一个&/&。但是有一个问题,若是一台服务器上发布了一个以上的项目,这时候http://localhost:8080就不能确定到底访问的是哪一个项目了,所以就还是需要加上项目名称来区分,可是这样又会出现上述问题,好纠结,求大神指点一下。(之前一直没发现,是因为之前的项目中path就直接是&/&)5个牛币所有回答列表(9)&LV4你的这个提问涉及的路径问题挺多,也是有些开发者经常会遇到的问题,按我的经验给你说下。1.java web容器中项目部署时的访问路径一般网站部署后,访问路径是不带项目名称的,比如最代码的服务器部署目录:/data/www/zuidaima/,在tomcat的conf/server.xml中host的访问配置是:&Host name=&localhost& &appBase=&webapps&& & & & & & unpackWARs=&false& autoDeploy=&false&& & & & & & xmlValidation=&false& xmlNamespaceAware=&false&&& &&Context docBase=&/data/www/zuidaima/& path=&/&&&/Host&这样http的访问地址就是/而在eclipse jee集成tomcat版本本地开发时,eclipse的配置中path的配置是带有项目路径的所以访问的时候除了要有端口外,还得带上项目路径,比如:http://localhost:8080/zuidaima/建议Path设置为空,这样本地debug时,所有访问路径和线上是一致的,不会出现线上访问404的情况。2.mvc开发中view层中访问路径的问题比如jsp中配置静态页面的地址:&link href=&/resource/css/bootstrap.min.css& rel=&stylesheet& /&则该文件在项目的本地目录则是:/data/www/zuidaima/resource/css/bootstrap.min.css,则其通过http访问是/resource/css/bootstrap.min.css其中/resource/css/bootstrap.min.css以/开头则表示是相对于项目根目录而言,则本地访问中,根目录配置是:/data/www/zuidaima/,而web网页http访问中根路径是/。但是如果出现resource/css/bootstrap.min.css的不以/开头的配置,则其访问路径是相对于当前访问目录而言的,比如在最代码首页,分享页,这样配置,所有文件都是可以访问的,因为首页当前目录就是/根目录,但是如果访问比如:/user/3984.htm,这样访问就404错误,http真实访问目录是:/user/resource/css/bootstrap.min.css,这样对照到服务器资源明显就是错误的路径,所以出现这样的配置:&link href=&../resource/css/bootstrap.min.css& rel=&stylesheet& /&相当于/user/../resource/css/bootstrap.min.css,这样和/resource/css/bootstrap.min.css是一个作用,是否有点豁然贯通了?所以建议在web开发中,尽量是用相对路径的根目录配置法,这样一目了然,http访问路径和服务器配置路径是一一对应的,当然在很多情况下,静态资源和动态请求是分开域名提供服务的,比如最代码的css是:/resource/css/bootstrap.min.css,这样如果不在同一个域名那只能通过绝对路径访问了。最佳答案&LV2可是对于我的.action请求而言,并不能在访问的时候控制访问根路径,只能针对js这种静态资源才可以,还是说我理解错您的意思了?在你的springmvc的配置文件中添加如下配置,设置静态资源访问uriresources/请按自己实际替换&&!--设置静态资源访问 &--&&& &&mvc:resources location=&/resources/& mapping=&/resources/**&/&顶顶顶~调转路径设置的正确吗?把school_list放到webinf下面试试这是个常识性的问题,绝对路径和相对路径!!!在请求路径前面加上项目地址就行了&%=request.getContextPath()%&/&form method=&get& action=&&%=request.getContextPath()%&/login.do&&&script src=&&%=request.getContextPath()%&/css/bower_components/jquery/dist/jquery.min.js&&&/script&嗯~就是路径使用问题,这个我也遇到过,你在浏览器调试审查元素的时候就能看出来,引用js,css一定要注意路径写法问题。等等完等等等等完等完等等最热搜索问答话题编程语言基础Web开发数据库开发客户端开发脚本工具游戏开发服务器软硬件开源组件类库相关问答完等等完完等完等等等等等最近浏览暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级扫描二维码关注最代码为好友"/>扫描二维码关注最代码为好友

我要回帖

更多关于 spring mvc 静态资源 的文章

 

随机推荐