web-dev-qa-db-ja.com

TomcatのJARではなくWARとしてのSpring RESTfulサービス

REST WebサービスをJava Springで作成しています。STSと正常にロードされたサンプルを正常にロードしました:

「このガイドでは、Springを使用して「hello world」RESTful Webサービスを作成するプロセスについて説明します。」 http://spring.io/guides/gs/rest-service/

ただし、そのチュートリアルはこれまでしか進んでいません。サーブレットを含む自己実行jarファイルの代わりにWARファイルを作成し、そのWARファイルをデプロイします。次に、このチュートリアルを見つけて、最初のチュートリアルのbuild.gradleファイルを変更しようとしました。

「Spring Boot JARアプリケーションをWARに変換する」 http://spring.io/guides/gs/convert-jar-to-war/

.warファイルに問題なく組み込まれているようです。サービスはTomcatインスタンスのマネージャーで実行されています。しかし、サービスを使用しようとすると、404が表示されます。

URL 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フォルダを取得するために何かを見逃しましたか?

19
Erik

WARは、特別なプロパティを持つJARです。これにはWEB-INFが必要です。その下に、デプロイメント、アプリケーションサーバー依存XML構成ファイル、および通常はlib、クラス、およびその他のオッズとエンドを記述するweb.xmlが必要です。

最も簡単な方法は、Mavenを使用してWARを作成することです。 pom.xmlのプロジェクトタイプをJARからWARに簡単に変更できるはずです。あなたが従ったチュートリアルはGradleを使用しているようですが、GradleはMavenを使用していると思いますので、どこかにあるはずです。それ以外は、WARを構築する方法のチュートリアルをググる。 Tomcatが特別なデプロイメント記述子を必要とするとは思わないので、必要なのはweb .xmlだけです。

6
CodeChimp

OPからの回答が質問からここに移動しました

少年私は本当に馬鹿げていると思います。gradleの手順を変更した後、チュートリアルにもっと多くのことがありました。web.xmlの必要性に取って代わる/置き換えられる、非常に必要な自動構成を含みます。

解決

サーブレットを初期化する

以前は、アプリケーションにはpublic static void main()メソッドが含まれていましたが、これは、spring-boot-gradle-pluginがJava -jarコマンド。

これをXMLファイルのないWARファイルに変換することにより、アプリケーションの起動方法に関するサーブレットコンテナーへの別のシグナルが必要になります。

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がそれを置き換えるために使用するもの)が必要であることはどちらも正しいことでした。

3
Duncan Jones

スプリングブートアプリケーションの起動時にINFO出力が表示されることを期待しているため、いくつかのアイデアがあります。

通常のTomcatインスタンスを試してください

  • Zipディストリビューション をダウンロードして解凍します。
  • bin/startup.shを使用してTomcatを起動します
  • 戦争をwebappsディレクトリにコピーします
  • ログを確認してください...春が始まったことの証拠をいくつか見たいと思います

warファイルを手動で検査します

  • Warファイルを解凍します
  • WEB-INF/web.xmlを参照してください
1
samlewis