带有Java注释配置的Spring MVC在资源文件夹

时间:2016-03-13 19:18:59

标签: java spring jsp spring-mvc

我正在使用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.xmlweb.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

2 个答案:

答案 0 :(得分:1)

WEB-INF前缀添加到资源位置

registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/");

答案 1 :(得分:0)

有两点需要注意,正如@Ali Dehgani 在之前的回答中提到的,

  1. 将目录结构更改为
registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/");

这是必要的,因为您的资源文件夹不是直接部署的文件夹,而是在 WEB_INF 内。

  1. 将链接标签更改为类似这样的内容以使用 Spring:Url 标签:
<%@ 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