java - 用于css文件但不适用于html文件的Spring Application 404
问题描述
解决方案:没有选择 SpringWebConfig 类,因为它与应用程序位于不同的包中。一旦我把它们放在一起并稍微调整了路径,一切都按预期工作。遵循有关软件包设置的错误指南。谢谢大家的帮助!
我有一个正在尝试使用注释配置的 spring 应用程序。在 localhost 上测试时,spring 会在 src/main/resources/templates 中返回 html 页面,但是我在 config.java 文件中指定的任何内容都没有受到尊重。我也无法让浏览器加载 src/main/resources/static 中的任何 css 文件。我从来没有能够让这个东西来解决 WEB-INF 中的任何问题。
我已经阅读了大约一百篇关于注释配置、xml 配置的指南,而且我今天已经重新配置了十几次。这里也有很多线程,但没有任何效果。这就像我在 webconfig.java 中的任何更改都没有被调用。
路径设置是 src/main/resources/static 中的 css 文件和 src/main/resources/templates 中的 html。
应用:
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
}
春季网络配置:
@EnableWebMvc // mvc:annotation-driven
@Configuration
@ComponentScan({"config"})
public class SpringWebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("static/");
}
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/static/");
viewResolver.setSuffix(".html");
System.out.println("test");
return viewResolver;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable("WebInitializer");
}
}
Servlet 初始化器:
public class WebInitializer {
public class MyWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] {SpringWebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[] {"/"};
}
@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}
}
}
重播模板.html:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="ISO-8859-1"></meta>
<title>$title</title>
<link rel="stylesheet" href="/static/main.css" type="text/css"></link>
</head>
<body>
<div class="topnav">
<a class="active" href="#Patreon">Patreon</a> <a href="#Stats">Stats</a>
<a href="#Ladder">Ladder</a> <a href="#Tournaments">Tournaments</a> <a
href="#Adv. Search">Adv. Search</a> <a href="#Forum">Forum</a> <a
href="#Wiki">Wiki</a>
</div>
<ul>
<li>$ReplayID</li>
<li>$TimePlayed</li>
<li>$TimeUploaded</li>
<li>$GameLength</li>
<li>$Map</li>
<li>$P1URL</li>
<li>$P1Race</li>
<li>$P2URL</li>
<li>$P2Race</li>
</ul>
</body>
</html>
我可以解决这个网页,但 css 文件上有 chrome 404。我对 upload.html 和 dropzone.css 有类似的结果。
我只是想了解发生了什么,以及为什么,似乎没有任何指南可以解释为什么 springwebconfig.java 没有被引用,或者我打算把任何html 或 css 文件。我已经看过大量关于 WEB-INF 的指南,但我似乎永远无法获得要解决的参考。除了这个之外,我是否还有一些 xml 配置?我现在的设置可以很好地解析 upload.html,但是在 chrome 中我在引用 css 文件时得到 404。
TL;DR SpringWebConfig 似乎对 viewresolver 没有任何作用。我必须将 html 文件移动到 src/main/resources/templates 中才能解析,当发生这种情况时,我会在 css 文件上得到 404,无论我将 href 更改为什么,似乎。有时当我更改href(有时我认为我做对了)时,eclipse控制台中没有显示任何内容,它只是不应用css,并为css文件提供404 chrome。其他时候我在 Eclipse 中得到模板解析错误,在 chrome 中得到 404。
编辑:pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>continuum</groupId>
<artifactId>Continuum</artifactId>
<version>0.1.0</version>
<packaging>war</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>scelight</groupId>
<artifactId>Scelight</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>7.0.0.jre8</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.11.Final</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestone</id>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-milestone</id>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
</project>
解决方案
您对 css 样式表的引用似乎是错误的。我看到您正在使用 thymeleaf,因此您可以执行以下操作来链接您的 css 文件:
<link rel="stylesheet" type="text/css" th:href="@{/main.css}"/>
静态目录由 / 提供。因此,您的src/main/resources/static/main.css
遗嘱将从/main.css
. 上式也可以写成
<link rel="stylesheet" type="text/css" href="/main.css"/>
我看到你@EnableWebMvc
在你的应用程序中使用了这将禁用 Spring Boot 的 Spring MVC 自动配置
推荐阅读
- java - 如何从字符串中获取特定的查询值?
- laravel - Laravel Eloquent 禁用自动急切加载
- c# - 令牌未使用 OpenIdDict/Connect 进行身份验证
- unit-testing - 从多平台 kotlin commonTest 代码中观察标准输出
- php - WooCommerce:CSS - 定位特定产品类别
- ruby-on-rails - 带有 jsonb 外键的 Rails 5 has_many
- istio - 添加多个外部服务时 Istio Pilot 警告 - “pilot_conflict_outbound_listener_tcp_over_current_tcp”
- node.js - 在 localhost 中运行 docker 时出现 ERR_EMPTY_RESPONSE
- python - TfidfVectorizer - 未安装词汇表
- javascript - 在对象文字内使用带有三元运算符的扩展语法