我的JSP页面不会加载CSS文件

时间:2018-07-21 23:15:52

标签: css spring spring-mvc jsp

我有Spring MVC应用程序,我使用的是Java配置,没有XML。我的JSP无法访问CSS文件。我整天用Google搜索,几乎尝试了所有操作。当我检查页面时,在控制台中出现错误-无法加载资源:服务器以404(未找到)状态进行了响应,我正在使用Wildfly服务器。

folder structure

SpringConfig:

AVG

DispatcherInitializer:

package com.library.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;


@EnableWebMvc
@Configuration
@ComponentScan(basePackages = "com.library")
public class SpringConfig extends WebMvcConfigurerAdapter {

    @Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/resources/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

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

JSP页面:

package com.library.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class DispatcherInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {


    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] {SpringConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }
}

1 个答案:

答案 0 :(得分:0)

根据您提出的问题信息,我首先对您的项目做出一些假设/猜测:

  1. 您的项目已设置为Java项目。
  2. 您正在使用Maven来运行您的构建,并且将包生产设置为<packaging>WAR</packaging>
  3. 成功构建后,style.css的副本将出现在以下位置:/target/libraryproject/WEB-INF/classes/static/css/style.css

我认为在前2个方面我很安全,但是根据您的构建设置,第3个猜测可能不正确。例如,目标路径的libraryproject部分实际上可能类似于:libraryproject-0.0.1-SNAPSHOT。如果是这样,您可能需要对后续操作进行一些调整,因此请记住这一点,但这是我的建议:

步骤1:

更改现有的SpringConfig.addResourceHandlers方法,放下DEVELOPMENT_TIME透视图,重构resourceLocations参数以定义RUNTIME规范,然后在RUNTIME处,静态资源是从classpath文件的根WAR加载的:

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

步骤2:

更新link中的样式表login.jsp规范,以便从步骤1中定义的style.css文件WAR加载resourceLocation

<link href="<c:url value="css/style.css"/>" rel="stylesheet"/>

请注意该路径如何相对于目标构建位置中的/static/资源根位置,该路径在WAR中保持不变。

这2项更改之后,我认为您将可以正常运行。但愿如此。让我知道是否可以,我会尽力帮助您的。我记得曾经遇到过同样的问题,困扰了几个小时,以及令人沮丧的404错误。这很痛苦-希望这可以帮助您解决问题-