我正在使用Spring MVC 4.2.5.RELEASE
创建一个Web应用程序,我有这个基本的java注释配置,而不使用web-xml文件或context.xml文件。
到目前为止,当我在浏览器中访问视图时,应用程序正常加载,但CSS和JavaScript文件没有加载,它在谷歌控制台中说找不到资源,它显示404错误代码。
这是我的JSP,我将路径放在src
标记(index.jsp)中:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="cp" value="${pageContext.request.servletContext.contextPath}" scope="request" />
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Spring 4 Web MVC via Annotations</title>
<script src="${cp}/resources/js/js.js"></script>
<link rel="stylesheet" type="text/css" href="${cp}/resources/css/site.css" />
<link rel="stylesheet" type="text/css" href="../resources/css/site.css" />
<link rel="stylesheet" type="text/css" href="/resources/css/site.css" />
<link rel="stylesheet" type="text/css" href="resources/css/site.css" />
</head>
<body>
<h4>Spring 4 Web MVC via Annotations</h4>
Spring says: <span class="blue">${msg}</span>
</body>
</html>
如果您查看我尝试使用四种不同方式调用它们的代码
<link rel="stylesheet" type="text/css" href="${cp}/resources/css/site.css" />
<link rel="stylesheet" type="text/css" href="../resources/css/site.css" />
<link rel="stylesheet" type="text/css" href="/resources/css/site.css" />
<link rel="stylesheet" type="text/css" href="resources/css/site.css" />
但仍然总是说未找到来源。
我知道WEB-INF
文件夹里面的所有内容都是私有的,但我已经阅读了很多教程,并且他们都在该文件夹中拥有自己的资源,并且他们在Config.JAVA文件中配置此方法能够使用它们。
这是我的Java配置中的资源处理程序:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
以下是我的配置类。我正在使用Java注释,我没有任何context.xml
或web.xml
文件
我的配置课程:
@Configuration
@ComponentScan({"config", "controllers"})
@EnableWebMvc
public class ConfigMVC extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
@Bean
public UrlBasedViewResolver setupViewResolver() {
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
}
我的WebInitializer
班级
public class WebInicializar implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(ConfigMVC.class);
ctx.setServletContext(servletContext);
Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
servlet.addMapping("/");
servlet.setLoadOnStartup(1);
}
}
我的控制器
@Controller
public class HomeController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index(ModelMap map) {
map.put("msg", "Hello Spring 4 Web MVC!");
return "index";
}
}
这是我的项目结构
MyWebAppName
--Web Pages
--WEB-INF
--jsp
index.jsp
--resources
--js
js.js
--css
site.css
--Source Packages
--config
ConfigMVC.java
WebInitializaer.java
答案 0 :(得分:1)
将WEB-INF
前缀添加到资源位置:
registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/");
答案 1 :(得分:0)
有两点需要注意,正如@Ali Dehgani 在之前的回答中提到的,
registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/");
这是必要的,因为您的资源文件夹不是直接部署的文件夹,而是在 WEB_INF 内。
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<link rel="stylesheet" href='<spring:url value="/resourses/css/site.css"/>' />
我通过这两个更改解决了一个类似的问题。谢谢:)
编辑:此链接有助于了解配置: https://www.boraji.com/spring-mvc-5-static-resources-handling-example