项目在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'
。
请教下这是为什么,该怎么修改?感激不尽!
<mvc:resources location="/,classpath:/META-INF/publicResources/ 대신
<mvc:default-servlet-handler />
를 사용해 볼 수 있습니다. " 매핑= "/resources/**"/>
으아아아
으아아아
다음과 같이 지정된 경로의 리소스를 해제할 수 있습니다.
으아아아프로젝트에서 다음과 같이 해제합니다.
<context:component-scan/>
은 Spring의 스캐닝 기능을 시작하고@Controller @Service
및 기타 주석으로 Java 클래스를 스캔하고 클래스의 Bean을 인스턴스화한 다음 주입을 완료하지만 URL 요청을 해당 컨트롤러에 매핑할 수 없음을 의미합니다. 따라서 URL이 해당 컨트롤러 및 해당 메서드에 매핑될 수 있도록 다른 구성<mvc:annotation-driven />
을 추가해야 합니다<mvc:resources location="classpath:/js/" mapping="/js/**"/> 사용해 보세요
요소를 확인하세요. 왜 정적 리소스를 찾을 수 없나요? 먼저 모든 것을 조사해 보겠습니다.
으아악전체 경로를 작성하는 것이 좋습니다:
문제를 해결할 수 있는 두 가지 방법이 있습니다. 전제는 DispatcherServlet 요청 매핑을 "/"로 구성하는 것입니다.
1. <mvc:default-servlet-handler />
spring-mvc 구성에 <mvc:default-servlet-handler />
를 추가하세요. org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler는 Spring MVC 컨텍스트에서 정의되며 DispatcherServlet을 입력하는 URL을 검사하고 정적 리소스 요청인 것으로 확인됩니다. 웹 애플리케이션 서버의 기본 서블릿 처리로 전달됩니다. 요청이 정적 자원이 아닌 경우 DispatcherServlet이 이를 계속 처리합니다.
2. <mvc:resources />
spring-mvc 구성에 <mvc:resources />
를 추가하고 Spring MVC 프레임워크가 이를 처리하도록 합니다. 그리고 몇 가지 유용한 부가 가치 기능을 추가하여 정적 리소스를 어디에나 배치할 수 있도록 하고 브라우저 측에서 정적 리소스의 캐싱 시간을 지정합니다(예: <mvc:resources location="/" mapping="/). resources/**" />웹 루트 경로 "/"를 /resources 경로에 매핑합니다