Spring Boot - “路径index.html不以”/“字符开头”

时间:2016-02-05 22:36:09

标签: java angularjs maven spring-boot tomcat8

我正在学习spring-boot和AngularJS,使用Eclipse作为IDE,使用Tomcat 8.0.30(64位)作为容器,在Eclipse中运行。这是一个Maven项目。

虽然应用程序是非常基本和愚蠢的,但是在通过浏览器访问应用程序时出现错误。问题是,如果我最后没有输入带斜杠(/)的URL,则会出错。服务器日志抛出这个:

网址http://localhost:8080/app

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,我不了解斜线的新内容?

0 个答案:

没有答案