使用 Java 配置的 Spring MVC 中未加载资源
Resources are not loaded in Spring MVC with Java config
首先我在RootConfig中使用了WebMvcConfigurerAdapter,资源是对接的,但是我没有部署Spring安全项目
@Configuration
@ComponentScan({"org.example"})
public class RootConfig extends WebMvcConfigurerAdapter {
}
然后我从 class RootConfig 中删除了 WebMvcConfigurerAdapter,项目变得可部署,但资源停止工作。
@Configuration
@ComponentScan({"org.example"})
public class RootConfig {
}
project structure
我如何连接样式:
<link rel="stylesheet" href="${pageContext.request.contextPath}/resources/css/index.css">
我的资源处理程序:
@Configuration
@EnableWebMvc
@ComponentScan({
"org.example",
"org.example.model",
"org.example.repo",
"org.example.service"
})
public class WebConfig implements WebMvcConfigurer {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
}
SpringMvcDispatcherServletInitializer:
public class SpringMvcDispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{RootConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
尝试在如下资源上使用 web-security 覆盖配置方法,如果您使用 thymleaf,请使用 @ 表示 URI href="@{/**/css/index.css}" 否则请正确检查路径。
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/resources/*");
}
使用此语法访问您的 css 文件
<link href="<c:url value="/resources/css/index.css />" rel="stylesheet">
首先我在RootConfig中使用了WebMvcConfigurerAdapter,资源是对接的,但是我没有部署Spring安全项目
@Configuration
@ComponentScan({"org.example"})
public class RootConfig extends WebMvcConfigurerAdapter {
}
然后我从 class RootConfig 中删除了 WebMvcConfigurerAdapter,项目变得可部署,但资源停止工作。
@Configuration
@ComponentScan({"org.example"})
public class RootConfig {
}
project structure
我如何连接样式:
<link rel="stylesheet" href="${pageContext.request.contextPath}/resources/css/index.css">
我的资源处理程序:
@Configuration
@EnableWebMvc
@ComponentScan({
"org.example",
"org.example.model",
"org.example.repo",
"org.example.service"
})
public class WebConfig implements WebMvcConfigurer {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
}
SpringMvcDispatcherServletInitializer:
public class SpringMvcDispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{RootConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
尝试在如下资源上使用 web-security 覆盖配置方法,如果您使用 thymleaf,请使用 @ 表示 URI href="@{/**/css/index.css}" 否则请正确检查路径。
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/resources/*");
}
使用此语法访问您的 css 文件
<link href="<c:url value="/resources/css/index.css />" rel="stylesheet">