我正在学习spring-boot和AngularJS,使用Eclipse作为IDE,使用Tomcat 8.0.30(64位)作为容器,在Eclipse中运行。这是一个Maven项目。
虽然应用程序是非常基本和愚蠢的,但是在通过浏览器访问应用程序时出现错误。问题是,如果我最后没有输入带斜杠(/)的URL,则会出错。服务器日志抛出这个:
java.lang.IllegalArgumentException: Path index.html does not start with a "/" character
但是,如果我输入类似http://localhost:8080/app/的网址,那么应用程序运行正常。
您可能知道,spring-boot应用程序不依赖于 web.xml 。事实上,spring-boot加载 index.html 作为欢迎页面,或者它应该是。
我在Eclipse之外运行应用程序,部署到Tomcat容器。我得到了没有斜线的404,并且斜线,它工作正常。通过在自包含模式下运行(嵌入Tomcat),它可以正常工作。
为什么应用程序在没有斜杠的情况下不会重定向到index.html?
你可以在这里找到整个应用程序(我标记了它):
https://github.com/ajkret/spring-boot-sample/tree/slash-problem
这是我的Application.java
@SpringBootApplication
@ComponentScan(basePackages = { "br.com.cinq.greet" })
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
new Application().configure(new SpringApplicationBuilder(Application.class)).run(args);
}
}
这是我的ResourceConfig,适用于泽西岛。
@Configuration
@ApplicationPath("rest")
public class Config extends ResourceConfig {
public Config() {
register(GreetResource.class);
}
}
以下是GreetResource,一个典型的泽西资源:
@Path("/greet")
public class GreetResource {
Logger logger = LoggerFactory.getLogger(GreetResource.class);
// For now, store the information on a bean, in memory
@Autowired
Greet greet;
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response greet() {
logger.debug("Received GET requisition");
return Response.ok().entity(greet).build();
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response greet(Greet greet) {
try {
this.greet.setMessage(greet.getMessage());
logger.info("Greeting message updated {}",this.greet.getMessage());
} catch (Exception e) {
logger.error("An exception occurred during Greet message update", e);
return Response.status(Status.INTERNAL_SERVER_ERROR).entity("exception").build();
}
return Response.ok().build();
}
}
就是这样,所有可能干扰该过程的Java类都在这里。
以下是POM的依赖关系:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
</dependencies>
更新
我已经安装了Tomcat 8.0.24,显然问题已经解决了。
是否有新规则,RFC,我不了解斜线的新内容?