【问题标题】:Spring MVC with Java annotation configuration doesn't found Javascript and CSS files in resource folder带有 Java 注释配置的 Spring MVC 在资源文件夹中找不到 Javascript 和 CSS 文件
【发布时间】:2016-06-28 17:31:07
【问题描述】:

我正在使用 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 配置中的 Resource Handler

@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

【问题讨论】:

    标签: java spring jsp spring-mvc


    【解决方案1】:

    两点需要注意,正如@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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 好的,我将它添加到资源处理程序中,但是我应该如何将路径放在 src="" 中,还有没有办法在不使用 jstl 值的情况下放置路径?像这样的“../resources”等,不使用 {cp}
      • 路径和以前一样,只是改变了物理位置
      • 而且我不是 jsp 和 jstl 方面的专家,但是通过添加 WEB-INF,你的春天的故事会很好
      猜你喜欢
      • 2019-05-18
      • 2012-05-16
      • 1970-01-01
      • 2017-05-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 2015-12-17
      • 2011-07-12
      相关资源
      最近更新 更多