19

我正在使用 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。

URL 404

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 文件夹的东西?

4

3 回答 3

6

WAR 只是一个具有特殊属性的 JAR。它需要有一个 WEB-INF,在它下你需要一个 web.xml 来描述你的部署,任何依赖于应用服务器的 XML 配置文件,通常还有一个 lib、类和其他零碎的东西。

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

于 2013-11-06T19:43:27.810 回答
3

OP的回答从问题移到了这里

男孩,我觉得真的很愚蠢..在更改 gradle 指令后发现教程还有更多内容.. 包括非常需要的自动配置,它取代/替换了对 web.xml 的需求

解决方案

初始化小服务程序

以前,应用程序包含一个public static void main()方法,spring-boot-gradle-plugin 配置为在使用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 用来替换它的东西)是正确的。

于 2016-08-03T07:23:47.930 回答
1

我希望在 Spring Boot 应用程序启动时看到一些 INFO 输出,所以一些想法是:

尝试常规的 tomcat 实例

  • 下载并解压缩 zip 分发包
  • 启动tomcatbin/startup.sh
  • 将你的战争复制到webapps目录
  • 检查日志...希望看到一些春天开始的证据

手动检查war文件

  • 解压你的战争文件
  • 期望看到 WEB-INF/web.xml
于 2013-11-06T20:45:21.680 回答