我正在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 中创建 Web 应用程序文件夹的内容?
WAR 只是一个具有特殊属性的 JAR。 它需要有一个 WEB-INF,在该 WEB-INF 下,你需要一个 web.xml来描述你的部署、任何依赖于应用程序服务器 XML 配置文件,通常还有一个库、类和其他零碎的东西。
最简单的方法是使用 Maven 来创建您的 WAR。 我认为您应该能够简单地将pom中的项目类型从JAR更改为WAR.xml 您遵循的教程似乎使用了 Gradle,我相信它反过来使用了 Maven,所以您应该在某个地方有一个。 除此之外,谷歌搜索有关如何构建 WAR 的教程。 我不认为Tomcat需要任何特殊的部署描述符,所以你应该只需要网络。.xml。
(OP的答案从问题移到这里)
男孩,我觉得真的很笨。发现更改 gradle 说明后教程还有更多内容。.包括非常需要的自动配置,取代/取代了对网络的需求.xml
溶液
初始化 servlet
以前,该应用程序包含一个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);
}
}
将归功于第一个答案,但你们都是正确的,需要网络.xml(或 Spring-Boot 用来替换它的东西)。
在 Spring 启动应用程序启动时看到一些 INFO 输出,所以一些想法是:
尝试常规雄猫实例
- 下载并解压缩 zip 发行版。
- 用
bin/startup.sh
启动雄猫 - 将您的战争复制到
webapps
目录 - 检查日志...希望看到一些春天启动的证据
手动检查战争文件
- 解压缩您的战争文件
- 期待看到 WEB-INF/web.xml