为了账号安全,请及时绑定邮箱和手机立即绑定

Springmvc找不到静态资源

Springmvc找不到静态资源

开心每一天1111 2019-03-15 15:15:39
项目在IDEA中搭建的,webapp文件下的结构如下所示:|webapp---- static //存放的js、css等文件位置-------- js-------- css---- WEB-INF-------- web.xml-------- index.jsp-------- login.jsp下面是我的web.xml文件DispatcherServlet的配置:<!-- spring mvc servlet -->    <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>    </servlet>    <servlet-mapping>        <servlet-name>springMvc</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping>    <welcome-file-list>        <welcome-file>/index.jsp</welcome-file>    </welcome-file-list>spring-mvc的部分配置如下:    <!-- 自动扫描controller包下的所有类,使其认为spring mvc的控制器 -->    <context:component-scan base-package="com.myjob.controller"/>    <mvc:resources location="/static/" mapping="/static/**" cache-period="864000"/>index.jsp文件内容很简单,就是一个跳转链接。<%@ taglib prefix="logic" uri="http://struts.apache.org/tags-logic" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title></title></head><body>    <a href="/welcome">连接</a></body></html>对应的Controller代码如下:@Controller@RequestMapping("/")public class WelcomeController {    @RequestMapping("welcome")    public String welcome() {        return "login";    }}login.jsp页面中引入了我自己下载的jquery库,引入代码如下:<script src="/static/js/jquery-3.1.0.min.js"></script>我在spring-mvc.xml文件中。首先没有配置<mvc:resources location="/static/" mapping="/static/**" cache-period="864000"/>的时候,网页可以正常跳转(但是js、css引入报404 not found的错误)。后来在网上查找解决方法后,加上了上述的配置,但是这个时候网页跳转却出现了问题。报错如下:No mapping found for HTTP request with URI [/welcome] in DispatcherServlet with name 'springMvc'。请教下这是为什么,该怎么修改?感激不尽!
查看完整描述

7 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

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

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

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

可以这样子放行指定路径的资源,上面的模版

你的项目中这样子放行:


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


查看完整回答
1 反对 回复 2019-04-25
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

可以尝试用
<mvc:default-servlet-handler />
替代
<mvc:resources location="/,classpath:/META-INF/publicResources/" mapping="/resources/**"/>

查看完整回答
反对 回复 2019-04-25
?
Qyouu

TA贡献1786条经验 获得超11个赞

springmvc的设置中,/过滤了所有的请求,包括所有静态页面的后缀

解决方法1、改变你请求的拦截方法,例如以*.do,*.action 等等请求的才进行拦截,则filterMapping设置成*.do即可。

解决方法2、设置静态资源不拦截,可以选择在工程配置文件中设置<servlet-mapping> <servlet-name>default,<url-pattern>*.css,或者在springmvc的配置文件中设置 <mvc:resources location="/" mapping="/**/*.html"/>


查看完整回答
反对 回复 2019-04-25
?
九州编程

TA贡献1785条经验 获得超4个赞

<context:component-scan/>表示启动spring的扫描功能,扫描有@Controller @Service等注解的java类,就把类实例化bean,然后完成注入,但是是不能将URL请求映射到对应的控制器的,所以需要再增加一个配置<mvc:annotation-driven />,这样就能将URL映射到对应的控制器及对应的方法了


查看完整回答
反对 回复 2019-04-25
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

<mvc:resources location="classpath:/js/" mapping="/js/**"/>试一下


查看完整回答
反对 回复 2019-04-25
?
三国纷争

TA贡献1804条经验 获得超7个赞

审查一下元素,为什么找不到静态资源,是不是路径不对,先各种都调查一下。

另外建议写全路径:


<script src="${pageContext.request.contextPath}/static/js/jquery-3.1.0.min.js"></script>


查看完整回答
反对 回复 2019-04-25
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

有2种方法,应该可以解决,你试试,前提都是将DispatcherServlet请求映射配置为"/"

1.采用<mvc:default-servlet-handler />
spring-mvc的配置中加<mvc:default-servlet-handler />
它会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。

2.采用<mvc:resources />
spring-mvc的配置中加<mvc:resources />
由Spring MVC框架自己处理静态资源,并添加一些有用的附加值功能,允许静态资源放在任何地方并可指定静态资源在浏览器端的缓存时间,示例如:<mvc:resources location="/" mapping="/resources/**"/>即将Web根路径"/"映射到/resources路径


查看完整回答
反对 回复 2019-04-25
  • 7 回答
  • 0 关注
  • 1573 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信