我有Spring MVC应用程序,我使用的是Java配置,没有XML。我的JSP无法访问CSS文件。我整天用Google搜索,几乎尝试了所有操作。当我检查页面时,在控制台中出现错误-无法加载资源:服务器以404(未找到)状态进行了响应,我正在使用Wildfly服务器。
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[] {"/"};
}
}
答案 0 :(得分:0)
根据您提出的问题信息,我首先对您的项目做出一些假设/猜测:
Java
项目。Maven
来运行您的构建,并且将包生产设置为<packaging>WAR</packaging>
。style.css
的副本将出现在以下位置:/target/libraryproject/WEB-INF/classes/static/css/style.css
。我认为在前2个方面我很安全,但是根据您的构建设置,第3个猜测可能不正确。例如,目标路径的libraryproject
部分实际上可能类似于:libraryproject-0.0.1-SNAPSHOT
。如果是这样,您可能需要对后续操作进行一些调整,因此请记住这一点,但这是我的建议:
更改现有的SpringConfig.addResourceHandlers
方法,放下DEVELOPMENT_TIME
透视图,重构resourceLocations
参数以定义RUNTIME
规范,然后在RUNTIME
处,静态资源是从classpath
文件的根WAR
加载的:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**")
.addResourceLocations("classpath:/static/");
}
更新link
中的样式表login.jsp
规范,以便从步骤1中定义的style.css
文件WAR
加载resourceLocation
。
<link href="<c:url value="css/style.css"/>" rel="stylesheet"/>
请注意该路径如何相对于目标构建位置中的/static/
资源根位置,该路径在WAR
中保持不变。
这2项更改之后,我认为您将可以正常运行。但愿如此。让我知道是否可以,我会尽力帮助您的。我记得曾经遇到过同样的问题,困扰了几个小时,以及令人沮丧的404错误。这很痛苦-希望这可以帮助您解决问题-