java - Springmvc找不到静态资源
大家讲道理
大家讲道理 2017-04-18 10:09:18
0
7
585

项目在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)
小葫芦

可以嘗試用

替代

洪涛

雷雷

巴扎黑
<mvc:resources location="/image/" mapping="/image/**"/> 
<mvc:resources location="/css/" mapping="/css/**"/> 
<mvc:resources location="/js/" mapping="/js/**"/>

可以這樣子放行指定路徑的資源,上面的模版
你的專案中這樣子放行:

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

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

黄舟

試試看

Peter_Zhu

審查一下元素,為什麼找不到靜態資源,是不是路徑不對,先各種都調查一下。
另外建議寫全路徑:

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

有2種方法,應該可以解決,你試試,前提都是將DispatcherServlet請求映射配置為"/"

1.採用
spring-mvc的配置中加
它會在Spring MVC上下文中定義一個org.springframework.web. servlet.resource.DefaultServletHttpRequestHandler,它會像一個檢查員,對進入DispatcherServlet的URL進行篩選,如果發現是靜態資源的請求,就將該請求轉由Web應用伺服器預設的Servlet處理,如果不是靜態資源的請求,才由DispatcherServlet繼續處理。

2.採用
spring-mvc的配置中加
由Spring MVC框架自己處理靜態資源,並添加一些有用的附加值功能,允許靜態資源放在任何地方並可指定靜態資源在瀏覽器端的快取時間,範例如:即將Web根路徑"/"對應/resources路徑

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板