[英]Spring RESTful Service as a WAR instead of JAR in Tomcat
我正在使用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
我需要修改映射嗎?
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文件夾的內容?
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。
( OP的答案從問題轉移到這里 )
男孩,我覺得真的很蠢..發現更改了gradle指令之后教程還有更多內容..包括非常需要的自動配置,取代/取代了對web.xml的需求
初始化servlet
以前,該應用程序包含一個public static void main()
方法,spring-boot-gradle-plugin配置為在使用java -jar
命令時運行。
通過將其轉換為沒有XML文件的WAR文件,您需要向servlet容器發出有關如何啟動應用程序的不同信號。
的src / main / 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使用它來替換它)。
我希望在Spring啟動應用程序啟動時會看到一些INFO輸出,所以有些想法是:
嘗試一個常規的tomcat實例
bin/startup.sh
啟動tomcat webapps
目錄 手動檢查war文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.