Spring RESTful服务作为WAR而不是Tomcat中的JAR

时间:2013-11-06 18:35:49

标签: java spring tomcat gradle spring-boot

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

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

我是否需要修改映射?

DataBaseController.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文件夹的内容吗?

3 个答案:

答案 0 :(得分:6)

WAR只是一个特殊的JAR。它需要一个WEB-INF,在这个WEB-INF下你需要一个web.xml来描述你的部署,任何app server dependentXML配置文件,通常还有lib,类和其他的几率。

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

答案 1 :(得分:3)

OP的答案从问题移到这里

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

解决方案

初始化servlet

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

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

的src /主/ JAVA /你好/ 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用它来代替它)。

答案 2 :(得分:1)

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

尝试常规的tomcat实例

  • 下载并解压缩zip distribution
  • 使用bin/startup.sh
  • 启动tomcat
  • 将您的战争复制到webapps目录
  • 检查日志......希望看到弹簧启动的一些证据

手动检查war文件

  • 解压缩您的战争文件
  • 期待看到WEB-INF / web.xml