无法在Spring4中加载静态文件

时间:2017-01-04 06:46:07

标签: java spring

我正在尝试创建一个示例Spring MVC项目但是静态文件没有被加载。我得到了下面提到的错误。

http://localhost:8080/BPMEI/static/css/bootstrap.css无法加载资源:服务器响应状态为404(未找到)

如果有人可以帮助我解决这个问题,我将不胜感激。

Project Structure

配置代码

 package com.dgsl.bpm.configuration;


@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.dgsl.bpm")
public class WebConfiguration extends WebMvcConfigurerAdapter {
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("/");
    }

}

初始化代码

package com.dgsl.bpm.configuration;

public class WebInitializer implements WebApplicationInitializer {

    public void onStartup(ServletContext container) throws ServletException {

        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(WebConfiguration.class);
        ctx.setServletContext(container);
        ServletRegistration.Dynamic servlet = container.addServlet("dispatcher", new DispatcherServlet(ctx));
        servlet.addMapping("/");
        servlet.setLoadOnStartup(1);

    }

}

JSP代码

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Student Enrollment Form</title>
    <link href="<c:url value='/static/css/bootstrap.css' />" rel="stylesheet"></link>
</head>
<body>

5 个答案:

答案 0 :(得分:1)

可能是你制作了错误的地图。

 registry.addResourceHandler("/static/**").addResourceLocations("/static/");

这段代码应该可行,我在本地机器上测试过。 addResourceLocations(“/ static /”)最后一个斜杠是强制 在sping-core-4.2.5-release.jar中,StringUtils.java具有以下代码

public static String applyRelativePath(String path, String relativePath) {
        int separatorIndex = path.lastIndexOf(FOLDER_SEPARATOR);
        if (separatorIndex != -1) {
            String newPath = path.substring(0, separatorIndex);
            if (!relativePath.startsWith(FOLDER_SEPARATOR)) {
                newPath += FOLDER_SEPARATOR;
            }
            return newPath + relativePath;
        }
        else {
            return relativePath;
        }
}

如果不以斜杠结尾,此方法将返回 relativePath

仅供参考,当我查看您的附图时,我在您的项目中找到了“bootstrap.min.css”。不要忘记使用正确的文件名。我希望我的建议可以帮到你

答案 1 :(得分:1)

到F2:如果你让它下载而不是我下载css文件并告诉Spring它们在哪里,你必须让js文件或某些东西发布到不受你自己控制的网页。建筑物所有者的目的是如何在Spring MVC项目中加载静态文件。我认为问题出在addResourceLocations的代码上,它应该是addResourceLocations ("classpath:/static/");

答案 2 :(得分:0)

如下所示更改addResourceHandlers定义并尝试: -

DataGridView

答案 3 :(得分:0)

请使用网址中的上下文路径:

array(4) {
  [0]=>
  array(2) {
    ["id"]=>
    int(73)
    ["label"]=>
    string(1) "M"
  }
  [1]=>
  array(2) {
    ["id"]=>
    int(72)
    ["label"]=>
    string(1) "L"
  }
  [2]=>
  array(2) {
    ["id"]=>
    int(68)
    ["label"]=>
    string(2) "2X"
  }
  [3]=>
  array(2) {
    ["id"]=>
    int(69)
    ["label"]=>
    string(2) "3X"
  }
}

这将为您提供网址值:

<c:url value='${pageContext.request.contextPath}/static/css/bootstrap.css' />

如果有效,请告诉我。

答案 4 :(得分:0)

更改addResourceHandlers,例如

@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/**").addResourceLocations("/");
}

并且还更改css文件名'bootstrap.min.css'