在tomcat上部署war时发生Spring Boot静态资源404错误
我正在使用SpringBoot开发一个SpringREST应用程序。 我想使用AngularJS客户端使用SpringRESTAPI 我使用的堆栈是: 弹簧靴1.4.2 春季安全 角JS 问题是: 我无法在浏览器中获取呈现的静态内容 pom.xml:在tomcat上部署war时发生Spring Boot静态资源404错误,tomcat,spring-boot,Tomcat,Spring Boot,我正在使用SpringBoot开发一个SpringREST应用程序。 我想使用AngularJS客户端使用SpringRESTAPI 我使用的堆栈是: 弹簧靴1.4.2 春季安全 角JS 问题是: 我无法在浏览器中获取呈现的静态内容 pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.atul</groupId>
<artifactId>springbootrest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>springbootrest</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<wro4j.version>1.8.0</wro4j.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</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-data-jpa</artifactId>
</dependency>
<!-- <dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency> -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
</resource>
<resource>
<directory>${project.build.directory}/generated-resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<!-- Serves *only* to filter the wro.xml so it can get an absolute path for the project -->
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/wro</outputDirectory>
<resources>
<resource>
<directory>src/main/wro</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>ro.isdc.wro4j</groupId>
<artifactId>wro4j-maven-plugin</artifactId>
<version>${wro4j.version}</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
<configuration>
<wroManagerFactory>ro.isdc.wro.maven.plugin.manager.factory.ConfigurableWroManagerFactory</wroManagerFactory>
<cssDestinationFolder>${project.build.directory}/generated-resources/static/css</cssDestinationFolder>
<jsDestinationFolder>${project.build.directory}/generated-resources/static/js</jsDestinationFolder>
<wroFile>${project.build.directory}/wro/wro.xml</wroFile>
<extraConfigFile>${basedir}/src/main/wro/wro.properties</extraConfigFile>
<contextFolder>${basedir}/src/main/wro</contextFolder>
</configuration>
<dependencies>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>angularjs</artifactId>
<version>1.3.8</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
配置类:
WebConfig.java
@SpringBootApplication
@Import({ // @formatter:off
WebConfig.class,
JPAConfig.class,
ServiceConfig.class,
SecurityConfig.class
})
public class App extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(App.class);
}
}
@Configuration
@ComponentScan({ "com.atul.controller" })
@EnableWebMvc
public class WebConfig {
}
@Configuration
@EnableJpaRepositories(basePackages = "com.atul.persistent.dao")
@EntityScan(basePackages = "com.atul.persistent.model")
@EnableTransactionManagement
public class JPAConfig {
}
@Configuration
@ComponentScan({"com.atul.service"})
public class ServiceConfig {
}
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.httpBasic().and()
.authorizeRequests()
.antMatchers("/index.html", "/home.html", "/login.html", "/").permitAll()
.anyRequest().authenticated()
.and()
.csrf().disable();
//.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
// @formatter:on
}
}
JPAConfig.java
@SpringBootApplication
@Import({ // @formatter:off
WebConfig.class,
JPAConfig.class,
ServiceConfig.class,
SecurityConfig.class
})
public class App extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(App.class);
}
}
@Configuration
@ComponentScan({ "com.atul.controller" })
@EnableWebMvc
public class WebConfig {
}
@Configuration
@EnableJpaRepositories(basePackages = "com.atul.persistent.dao")
@EntityScan(basePackages = "com.atul.persistent.model")
@EnableTransactionManagement
public class JPAConfig {
}
@Configuration
@ComponentScan({"com.atul.service"})
public class ServiceConfig {
}
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.httpBasic().and()
.authorizeRequests()
.antMatchers("/index.html", "/home.html", "/login.html", "/").permitAll()
.anyRequest().authenticated()
.and()
.csrf().disable();
//.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
// @formatter:on
}
}
ServiceConfig.java
@SpringBootApplication
@Import({ // @formatter:off
WebConfig.class,
JPAConfig.class,
ServiceConfig.class,
SecurityConfig.class
})
public class App extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(App.class);
}
}
@Configuration
@ComponentScan({ "com.atul.controller" })
@EnableWebMvc
public class WebConfig {
}
@Configuration
@EnableJpaRepositories(basePackages = "com.atul.persistent.dao")
@EntityScan(basePackages = "com.atul.persistent.model")
@EnableTransactionManagement
public class JPAConfig {
}
@Configuration
@ComponentScan({"com.atul.service"})
public class ServiceConfig {
}
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.httpBasic().and()
.authorizeRequests()
.antMatchers("/index.html", "/home.html", "/login.html", "/").permitAll()
.anyRequest().authenticated()
.and()
.csrf().disable();
//.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
// @formatter:on
}
}
SecurityConfig.java
@SpringBootApplication
@Import({ // @formatter:off
WebConfig.class,
JPAConfig.class,
ServiceConfig.class,
SecurityConfig.class
})
public class App extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(App.class);
}
}
@Configuration
@ComponentScan({ "com.atul.controller" })
@EnableWebMvc
public class WebConfig {
}
@Configuration
@EnableJpaRepositories(basePackages = "com.atul.persistent.dao")
@EntityScan(basePackages = "com.atul.persistent.model")
@EnableTransactionManagement
public class JPAConfig {
}
@Configuration
@ComponentScan({"com.atul.service"})
public class ServiceConfig {
}
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.httpBasic().and()
.authorizeRequests()
.antMatchers("/index.html", "/home.html", "/login.html", "/").permitAll()
.anyRequest().authenticated()
.and()
.csrf().disable();
//.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
// @formatter:on
}
}
我已尝试将静态资源放在以下位置:
1) src\main\resources
2) 网络应用
生成的war包含以下静态资源:
1) WEB-INF/类以及
2) web应用程序的根目录
运行url时-http://localhost:8080/contextPath/
,我得到一个例外
在名为“DispatcherServlet”的DispatcherServlet中未找到URI为的HTTP请求的映射
有人能帮我吗 诀窍是阅读文档,而不是尝试随机位置:谢谢你的帮助。我将资源放在相同的位置,但仍然不起作用。因为我是打包为war的,所以根据文档,它应该在src/main/webapp中。你有服务于/path的控制器方法吗?尝试使用并查看您的静态内容是否可访问。诀窍是阅读文档而不是尝试随机位置:谢谢您的帮助。我将资源放在相同的位置,但仍然不起作用。因为我是打包为war的,所以根据文档,它应该在src/main/webapp中。你有服务于/path的控制器方法吗?尝试使用并查看您的静态内容是否可访问。