我有以下百里香的html页面:
<head th:fragment="header">
<meta charset="utf-8" />
<link rel="stylesheet" href="../../css/main.css" th:href="@{/css/main.css}" />
<title th:text="#{device.page.title}">Title</title>
</head>
<body>
<div>
<h1 th:text="#{device.table.caption}"></h1>
<hr class="fineline"/>
Select devices using the checkboxes, you can update the client version or add client commands.
<form action="#" th:action="@{/devices/modify}" th:object="${deviceCommand}" method="post">
<table border="0" cellpadding="0" cellspacing="0" class="touchTable">
<!--<thead> -->
<tr>
<td scope="col" th:text="#{device.check.label}">Select</td>
<td width="300" scope="col"><span th:text="#{device.id.label}"></span> (<span th:text="#{device.retailer.name.label}"></span>)</td>
<td scope="col" th:text="#{device.current.label}">Curr Version</td>
<td scope="col" th:text="#{device.next.label}">Next Version</td>
<td scope="col" th:text="#{device.commands.label}">Commands</td>
</tr>
<!--</thead>-->
<!--<tbody> -->
<tr th:each="d : ${devices}">
<td><input type="checkbox" th:field="*{deviceModificationIds}" th:value="${d.id}"/></td>
<td><span th:text="${d.id}"></span> (<span th:text="${d.retailerName}"></span>)</td>
<td th:text="${d.currentClientVersion}">Washington</td>
<td th:text="${d.nextClientVersion}">gwash</td>
<td th:text="${d.commands}">gwash</td>
</tr>
<tr>
<td colspan="2"></td>
<td><span th:text="#{device.change.version.label}"></span><br/><input type="text" th:field="*{newVersion}"/></td>
<td><span th:text="#{device.add.command.label}"></span><br/><input type="text" th:field="*{newCommand}"/></td>
<td><br/><button type="submit" th:text="#{device.modify.action.button}">Action</button></td>
</tr>
<!--</tbody> -->
</table>
</form>
</div>
</body>
问题在于css样式表。基本上春天似乎无法找到它,鄙视我将文件放在/resources/static/css/main.css
它返回错误(在日志中):
o.s.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/css/main.css] in DispatcherServlet with name 'dispatcherServlet'
现在doco都说Spring Boot应该自动提供/ resources / static
中的东西这是我的WebConfig:
@Configuration
@ComponentScan("com.txxxxcorp.txxxxpoint.resource")
@EnableWebMvc
public class WebConfig {
@Bean
MultipartConfigElement multipartConfigElement() {
MultiPartConfigFactory factory = new MultiPartConfigFactory();
factory.setMaxFileSize("4096KB");
factory.setMaxRequestSize("4096KB");
return factory.createMultipartConfig();
}
@Bean
public ViewResolver viewResolver() {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setTemplateMode("XHTML");
templateResolver.setPrefix("templates/");
templateResolver.setSuffix(".html");
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(templateResolver);
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(engine);
String[] excludedViews = new String[]{
"/resources/static/**"};
viewResolver.setExcludedViewNames(excludedViews);
return viewResolver;
}
@Bean
public EmbeddedServletContainerCustomizer servletContainerCustomizer() {
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer servletContainer) {
((TomcatEmbeddedServletContainerFactory) servletContainer).addConnectorCustomizers(
new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
AbstractHttp11Protocol httpProtocol = (AbstractHttp11Protocol) connector.getProtocolHandler();
httpProtocol.setCompression("on");
httpProtocol.setCompressionMinSize(256);
String mimeTypes = httpProtocol.getCompressableMimeTypes();
String mimeTypesWithJson = mimeTypes + "," + MediaType.APPLICATION_JSON_VALUE;
httpProtocol.setCompressableMimeTypes(mimeTypesWithJson);
}
}
);
}
};
}
@Bean
public ResourceBundleMessageSource messageSource() {
ResourceBundleMessageSource source = new ResourceBundleMessageSource();
source.setBasename("messages");
return source;
}
由于某种原因,编辑器不允许我插入spring安全配置而不抱怨其格式不正确(IntelliJ,Maven和Spring Boot不同意这一点,因为它编译和工作),请放心,我已经允许/css/main.css要经历的路径
有谁知道为什么我无法解析css文件?
答案 0 :(得分:10)
您使用@EnableWebMvc
这一事实将关闭Spring Boot的MVC自动配置(以及静态资源处理)。
要启用静态资源处理,最佳解决方案是删除@EnableWebMvc
并让Spring Boot执行最佳功能 - 自动配置。
在更改之后,您应该进行一些回归测试,以确保没有其他任何打破
答案 1 :(得分:1)
@ geoand&#39; s答案是正确的,当您使用@enablWebMvc
时,您的应用程序的静态资源已关闭。所以你在这里使用的任何css文件都是由thyemeleaf解析的,你需要声明该类继承WebMvcAutoConfigurationAdapter
并覆盖addResourceHandlers
方法,
代码可能如下所示:
@Configuration
@ComponentScan("com.txxxxcorp.txxxxpoint.resource")
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String[] STATIC_RESOURCE = {"/","classpath:/","classpath:/META-INF/resources/", "classpath:/META-INF/resources/webjars/",
"classpath:/resources/", "classpath:/static/", "classpath:/public/"};
if (!registry.hasMappingForPattern("/**")) {
registry.addResourceHandler("/**").addResourceLocations(STATIC_RESOURCE);
}
}
.......................
}
答案 2 :(得分:0)
我不得不将百里香叶依赖性添加到pom中。没有这种依赖性,Spring Boot找不到静态资源。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>