ssm框架 访问url 限制我设置了可以访问静态资源,但是,我去访问webapp下的jsp报404

18:03 提问
SSM框架关于js和css及静态资源无法加载问题
创建了一个ssm框架的项目,但是在运行的时候,出现了一个bug,就是在运行的时候js,css,以及一些静态资源被拦截,无法加载;
web中的配置如下:
&?xml version="1.0" encoding="UTF-8"?&
xmlns="/xml/ns/javaee" xmlns:web="/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_2_5.xsd"
id="taotao" version="2.5"&
&welcome-file-list&
&welcome-file&index.html&/welcome-file&
&welcome-file&index.htm&/welcome-file&
&welcome-file&index.jsp&/welcome-file&
&welcome-file&default.html&/welcome-file&
&welcome-file&default.htm&/welcome-file&
&welcome-file&default.jsp&/welcome-file&
&/welcome-file-list&
&!-- 加载spring容器 --&
&context-param&
&param-name&contextConfigLocation&/param-name&
&param-value&classpath:spring/applicationContext-*.xml&/param-value&
&/context-param&
&listener&
&listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&
&/listener&
&!-- springmvc的前端控制器 --&
&servlet-name&mvc&/servlet-name&
&servlet-class&org.springframework.web.servlet.DispatcherServlet&/servlet-class&
&!-- contextConfigLocation不是必须的, 如果不配置contextConfigLocation, springmvc的配置文件默认在:WEB-INF/servlet的name+"-servlet.xml" --&
&init-param&
&param-name&contextConfigLocation&/param-name&
&param-value&classpath:spring/springmvc.xml&/param-value&
&/init-param&
&load-on-startup&1&/load-on-startup&
&/servlet&
&filter-name&CharacterEncodingFilter&/filter-name&
&filter-class&org.springframework.web.filter.CharacterEncodingFilter&/filter-class&
&init-param&
&param-name&encoding&/param-name&
&param-value&utf-8&/param-value&
&/init-param&
&filter-mapping&
&filter-name&CharacterEncodingFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
&servlet-mapping&
&servlet-name&mvc&/servlet-name&
&url-pattern&/&/url-pattern&
&/servlet-mapping&
&/web-app&
spring mvc中的配置如下:
&mvc:annotation-driven/&
&!--包扫描器
&context:component-scan base-package="com.ny.controller" /&
&!--视图解析器
class="org.springframework.web.servlet.view.InternalResourceViewResolver"&
&property name="prefix" value="/WEB-INF/jsp/" /&
&property name="suffix" value=".jsp" /&
&!--配置静态资源映射,防止静态资源被拦截
&mvc:resources location="/WEB-INF/css/" mapping="/css/**"&&/mvc:resources&
&mvc:resources location="/WEB-INF/js/" mapping="/js/**"&&/mvc:resources&
&mvc:resources location="/WEB-INF/images/" mapping="/images/**"/&
&mvc:resources location="/WEB-INF/lay/" mapping="/lay/**"/&
&mvc:resources location="/WEB-INF/font/" mapping="/font/**"/&
配置在Tomcat插件运行时没有错误,但是在本地的Tomcat运行的时候,抛出如下信息:
DEBUG [http-bio-8080-exec-3] - DispatcherServlet with name 'mvc' processing GET request for [/School/baoming]
DEBUG [http-bio-8080-exec-3] - Looking up handler method for path /baoming
DEBUG [http-bio-8080-exec-3] - Returning handler method [private java.lang.String com.ny.controller.BaomingController.transfer()]
DEBUG [http-bio-8080-exec-3] - Returning cached instance of singleton bean 'baomingController'
DEBUG [http-bio-8080-exec-3] - Last-Modified value for [/School/baoming] is: -1
DEBUG [http-bio-8080-exec-3] - Rendering view [org.springframework.web.servlet.view.JstlView: name 'baoming'; URL [/WEB-INF/jsp/baoming.jsp]] in DispatcherServlet with name 'mvc'
DEBUG [http-bio-8080-exec-3] - Forwarding to resource [/WEB-INF/jsp/baoming.jsp] in InternalResourceView 'baoming'
DEBUG [http-bio-8080-exec-3] - Successfully completed request
想问下各位哪错了??
按时间排序
我也才学,不知道你错哪了,我是这么做的
&!-- 解决静态资源访问 --&
&!-- 解决静态资源访问 --&
&mvc:default-servlet-handler /&
其他相关推荐如下,在web.xml中配servlet-mapping时候,如果将DispatcherServlet请求映射配置为&/&,则Spring
MVC将捕获Web容器所有的请求,包括静态资源的请求,Spring MVC会将它们当成一个普通请求处理,因此找不到对应处理器将导致错误。
通过该url-pattern的配置,所有URL请求都将被Spring
MVC的DispatcherServlet截获,无法访问index.html,js,images等静态资源。
web.xml&!-- Spring MVC 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:spring-mvc.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&
如何让Spring框架能够捕获所有URL的请求,同时又将静态资源的请求转由Web容器处理?在把DispatcherServlet的请求映射
配置为&/&的前提下,spring提供以下解决方案:
采用&mvc:default-servlet-handler /&
在springMVC-servlet.xml中配置&mvc:default-servlet-handler /&后,会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。
一般Web应用服务器默认的Servlet名称是&default&,因此DefaultServletHttpRequestHandler可以找到它。如果你所有的Web应用服务器的默认Servlet名称不是&default&,则需要通过default-servlet-name属性显示指定:
&mvc:default-servlet-handler default-servlet-name=&所使用的Web服务器默认使用的Servlet名称& /&
如下配置片段:
spring-mvc.xml&!-- 定义跳转的文件的前后缀 ,视图模式配置 --&
class=&org.springframework.web.servlet.view.InternalResourceViewResolver&&
&!-- 前缀和后缀,变成一个可用的url地址 --&
&property name=&prefix& value=&/WEB-INF/jsp/& /&
&property name=&suffix& value=&.jsp& /&
&!-- 解除servlet对静态资源文件访问的限制 --& &
&mvc:default-servlet-handler/& &
这样就可以成功的访问静态资源了
本文已收录于以下专栏:
相关文章推荐
问题描述:
一个如下所示的个人主页JavaWeb项目:
默认首页:index.jsp
然后通过域名+项目名访问的结果显示为:
什么是REST?
符合REST约束风格和原则的应用程序或者设计就是REST
=&查询id=1的blog
HTTP DELETE...
cordova5.0 android程序访问外网报404错误解决办法在5.0以前,使用ajax jsonp跨域都没有遇到问题,但是5.0以后使用以前的代码就会报错。
比如: $.ajax({
今天在搭建nginx环境时出现一个奇怪问题,配置的静态资源目录下面文件无法访问,浏览器访问出现403 forbidden,环境是centos7 + nginx 1.6。nginx.conf中http配...
如果你的Apache、PHP、Mysql系统架构是自己配置的,或使用的某些安装包,可能会有这个问题,本人曾经遇到过,用第五条解决,如下:AllowOverride Not Enabled 服务器可能没...
每一个Ubuntu发布版本都有它的结束时间,通常,Ubuntu发布版本支持18个月,而LTS (Long Term Support)(长期支持)版本分别支持3年(服务器版)和5年(桌面版)。当一个Ub...
由于CodeIgniter当初是设计在apache的,而apache对pathinfo是支持比较好的,所以一切都很nice。但是当你把写好的代码放到nginx上,傻眼了,可能出了CodeIgniter...
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)关于ssm框架下怎么访问WEB-INF下的静态文件
众所周知,放在WEB-INF下的文件在项目运行的时候是被隐藏起来得,也就是说,通过在浏览器下,即时填写的路径正确也读取不到静态文件。
传统的项目文件像jsp,js都是直接放在webroot下,也就是项目的根目录下。但如果有人偏偏想把jsp,js放在WEB-INF下怎么办。
这就要在ssm的配置文件里加一点东西了。一般的公司开发项目的时候也是这么做的。因为有些东西是重要文件是需要隐藏的。常规配置有三种,我就写一种在springMVC.xml下的配置方法。打开springMVC的配置文件在里面加如下代码:
怎么理解这些语句:比如第二句
当你引用一段js代码时,src=“js/test.js”,那么服务器就会去访问WEB-INF/JS/TEST.JS
为什么会这样呢?
这跟web.xml的配置有关,用ssm框架的时候,一定写过下面这段代码:
这段的意思是,任何请求都会被springMVC前段控制器拦截,也就是说src,href,里面的懂地址都会被前端控制器拦截。
而在springMVC.xml中的这一句
default-servlet-handler /&
就会把拦截下来的请求进行分类,如果是服务器请求就就交给DispatcherServlet处理,如果不是就交给Web应用服务器处理。而Web应用服务器只能处理允许被访问的路径下的静态文件,也就是在WEB-INF,Web应用服务器是访问不到的。
&mvc:resources location="/WEB-INF/js/" mapping="/js/**"/&
打破这一规则,不管文件在哪个目录下,通过这种映射都能访问到。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。30468人阅读
技术篇(15)
spring mvc 静态资源 404问题
在web.xml配置servlet-mapping的时候,如果url-pattern设置为“/” (如下),很多人都会遇到导入js,css,图片等静态资源出现Firefox调试窗口会报出的404错误,而你的确也不能访问那些资源
&servlet-mapping&
&servlet-name&dispatcherServlet&/servlet-name&
&url-pattern&/&/url-pattern&
&/servlet-mapping&
百度了很久,大致有3种方法:但是我仍然没有解决404问题,后来又google了一下,发现少了一个关键的地方(在百度搜索中都没提到的一个地方,所以认为比较关键 :)),就是在jsp页面中导入静态资源的时候需要用&c:url&标签。
&%@ taglib prefix=&c& uri=&/jsp/jstl/core& %&
&script type=&text/javascript& src='&c:url value=&/js/jquery.js&&&/c:url&'&&/script&
这里的c:url中 value的值也是需要特别注意到地方,见下面3种方法详细说明:
方法1. 修改web.xml文件,增加对静态资源的url映射
&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页面就可以引用这些静态资源了,但需要用&c:url value=&&&,
&%@ taglib prefix=&c& uri=&/jsp/jstl/core& %&
&script type=&text/javascript& src='&c:url value=&/js/jquery.js&&&/c:url&'&&/script&
这里还需要说明的是:这种方法不能访问WEB-INF目录下的静态资源,也就是js目录必须是web根(可能是webapp,webContent等)目录下,否则是不能引用的;
如果放在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页面中引用时需要注意:
&c:url value=&/js/jquery.js&& value的值必须类似于mapping属性的值,如果是3.1方式的配置,则引用的是web根目录下js/jquery.js,如果是3.2方式的配置,则引用的是web根目录下WEB-INF/js/jquery.
&c:url value=&/js/ui/jquery-ui.js&& 则引用location目录下子目录ui下的jquery-ui.js。
被这个问题困扰了一天,搞得很郁闷,现在终于解决了,写一篇博客记录一下:
qq:(欢迎交流)
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:116055次
排名:千里之外
原创:18篇
转载:13篇
评论:28条
(1)(1)(1)(2)(1)(1)(1)(1)(4)(2)(1)(2)(2)(1)(1)(7)(3)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'12:04 提问
ssm访问静态资源js报错404
我已经加入配置文件了
是不是还好什么必要的设置呀?
我的正常跳转是可以的,就是无法访问静态资源
按赞数排序
首先,必须知道所有的404都是路径错误,其次看你的springMVC的有没有配置静态路径
&!-- 静态资源配置
&mvc:resources mapping="/static/**" location="/static/"/&
看你springmvc里面配置这个没有,我的js文件再static下面
静态资源的路径配置
如果你直接放在webapp下的话就可以直接访问
但是如果你是放在web-inf下
需要使用如下类似的语法
&mvc:resources mapping="/js/**" location="/js/"/&
&mvc:resources mapping="/css/**" location="/css/"/&
静态的资源我建议这样的配置,不以文件夹为后缀的,直接使用静态资源的类型为后缀的配置,这样保证你可以访问到,成功了望采纳。
&mvc:resources location="/" mapping="/**/*.css"/&
&mvc:resources location="/" mapping="/**/*.js"/&
&mvc:resources location="/" mapping="/**/*.html"/&
在控制台输出了一个
:Mapped URL path [/static/**] onto handler 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'
把静态资源相关的配置以及相关的路径都贴出来呀,这些说起来干巴巴的……
其他相关推荐

我要回帖

更多关于 spring ssm支持静态 的文章

 

随机推荐