春季RESTful服务作为战争而不是Tomcat中的JAR溶液

2022-09-02 13:57:40

我正在Java Spring中创建REST Web服务。我已成功加载 STS 和示例,详见:

“本指南将引导您完成使用Spring创建'hello world'RESTful Web服务的过程。http://spring.io/guides/gs/rest-service/

但是,该教程只能到此为止。我想创建一个 WAR 文件,而不是一个包含 servlet 的自运行 jar,并部署该 WAR 文件。然后我找到了本教程,并尝试修改第一个教程build.gradle文件。

“将 Spring Boot JAR 应用程序转换为 WAR”http://spring.io/guides/gs/convert-jar-to-war/

它似乎可以很好地构建到.war文件中。该服务正在我的 TOMCAT 实例的管理器中运行。但是一旦我尝试使用该服务,我就会得到404。

网址 404'd

http://localhost:8080/gs-rest-service-0.1.0/dbgreeting?name=MyName

我是否需要修改映射?

数据库控制器.java

@RequestMapping("/dbgreeting")
    public @ResponseBody DataBaseGreeter dbgreeting(
            @RequestParam(value="name", required=false, defaultValue="World") String name) {
        return new DataBaseGreeter(counter.incrementAndGet(),String.format(template, name));
    }

现在我有根据混合事物创建的.war文件。并担心我可能错过了一些东西。

此后,我发现OSX上的XAMPP不包含webapp/文件夹,这迫使我加载Bitnami的Tomcat堆栈。人们通常是否基于此在 XAMPP 和其他堆栈之间切换?还是我错过了在XAMPP中创建webapp文件夹的内容?


答案 1

战争只是一个带有特殊属性的JAR。它需要有一个 WEB-INF,在该框架下,你需要一个 web.xml来描述你的部署,任何依赖于应用服务器 XML 的配置文件,以及通常的 lib、类和其他赔率和结局。

最简单的方法是使用Maven来创建你的WAR。我认为您应该能够简单地将pom.xml中的项目类型从JAR更改为WAR。您遵循的教程似乎使用了Gradle,而我相信Gradle又使用了Maven,因此您应该在某个地方有一个。除此之外,谷歌搜索有关如何构建WAR的教程。我不认为Tomcat需要任何特殊的部署描述符,所以你只需要Web.xml。


答案 2

(OP的回答从问题移至此处)

男孩,我觉得自己真的很笨。在更改gradle说明后发现本教程还有更多内容。包括非常需要的自动配置,取代/取代对Web的需求.xml

溶液

初始化 servlet

以前,该应用程序包含一个方法,该方法将spring-boot-gradle插件配置为在使用该命令时运行。public static void main()java -jar

通过将其转换为没有 XML 文件的 WAR 文件,您需要向 servlet 容器发出有关如何启动应用程序的不同信号。

src/main/java/hello/HelloWebXml.java

package hello;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.SpringBootServletInitializer;

public class HelloWebXml extends SpringBootServletInitializer {

  @Override
  protected void configure(SpringApplicationBuilder application) {
     application.sources(Application.class);
  }

}

将把功劳归于第一个答案,但你们俩都是对的,需要web.xml(或者Spring-Boot用来取代它的东西)。


推荐