

Jax-rsを使って、簡単なREST APIを作成しようとしています。  
GETメソッドで2つの数字を受け取り、その和をプレーンテキストで返すREST APIです。  
以下のページを参考にしています。  
<https://atmarkit.itmedia.co.jp/ait/articles/1411/10/news105.html>

上記ページに合わせるため、Java、Tomcat、Jerseyのバージョンは少し古いものを使用しています。  
Java 1.8.0  
Tomcat 8  
Jersey 2.25.0

Javaのソースコード

[code]

    package com.example;
    import java.math.BigDecimal;
    
    import javax.ws.rs.core.Application;
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.QueryParam;
    import javax.ws.rs.core.MediaType;
    
    @Path("add")
    public class Add {
      @GET
      @Produces(MediaType.TEXT_PLAIN)
      public String add(@QueryParam("x") String ax, @QueryParam("y") String ay) {
        BigDecimal x = new BigDecimal(ax);
        BigDecimal y = new BigDecimal(ay);
        return x.add(y).toString();
      }
    
      public static void main(String[] args) {
        Add a = new Add();
        System.out.println(a.add(args[0], args[1]));
      }
    }
    
[/code]

以下のコマンドラインでビルドしています

[code]

    javac -cp %CATALINA_HOME%\webapps\calc\WEB-INF\lib\javax.ws.rs-api-2.0.1.jar Add.java
    
[/code]

※上記lib配下にJerseyの.jarをすべて配置しています。

web.xmlの内容

[code]

    <web-app version="3.0"
      xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <servlet>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
      </servlet>
      <servlet-mapping>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <url-pattern>/*</url-pattern>
      </servlet-mapping>
    </web-app>
    
[/code]

Tomcatはポート番号などを変更しておらずデフォルトのまま(8080)使用しています。

Tomcatの起動ログを見る限り、コンテクストcalcは正しく起動できているように見えます。（以下一部抜粋。その他の行にもエラーなし）  
07-May-2022 01:19:42.256 情報 [localhost-startStop-1]
org.apache.catalina.startup.HostConfig.deployDirectory ディレクトリ
[C:\pleiades\2022-03\tomcat\8\webapps\calc] の Web アプリケーションの配備は [1,094] ms
で完了しました。

Webアプリケーションの構成は以下の通りです。

[code]

    [CATALINA_HOME]
    └[webapps]
    　└[calc]
    　　└[WEB-INF]
    　　　　├[classes]
    　　　　｜　└[com]
    　　　　｜　　└[example]
    　　　　｜　　　└Add.class
    　　　　├[lib]
    　　　　｜　├javax.ws.rs-api-2.0.1.jar
    　　　　｜　└その他Jerseyのjarファイルすべて
    　　　　└web.xml
    
[/code]

treeコマンドを使ったフォルダ階層は以下の通りです。

[code]

    C:\pleiades\2022-03\tomcat\8\webapps>tree /f calc
    フォルダー パスの一覧:  ボリューム OS
    ボリューム シリアル番号は 00000031 64E6:0238 です
    C:\PLEIADES\2022-03\TOMCAT\8\WEBAPPS\CALC
    └─WEB-INF
        │  web.xml
        │
        ├─classes
        │  └─com
        │      └─example
        │              Add.class
        │
        └─lib
                aopalliance-repackaged-2.5.0-b32.jar
                hk2-api-2.5.0-b32.jar
                hk2-locator-2.5.0-b32.jar
                hk2-utils-2.5.0-b32.jar
                javassist-3.20.0-GA.jar
                javax.annotation-api-1.2.jar
                javax.inject-2.5.0-b32.jar
                javax.servlet-api-3.0.1.jar
                javax.ws.rs-api-2.0.1.jar
                jaxb-api-2.2.7.jar
                jersey-client.jar
                jersey-common.jar
                jersey-container-servlet-core.jar
                jersey-container-servlet.jar
                jersey-guava-2.25.1.jar
    
[/code]

この状態で以下のURLにアクセスすると404エラーが発生します。  
[http://127.0.0.1:8080/calc/add?x=100000000&y=80000000000](http://127.0.0.1:8080/calc/add?x=100000000&y=80000000000)

Tomcatのログには404以外には特にエラーは出ていない状況です。

なぜ404になってしまうのか、原因がわかる方ご教示お願いいたします。


CC BY-SA 4.0
2022-05-06T17:08:22.200
88675
2022-05-08T02:00:18.897
2022-05-08T02:00:18.897
52507
52507
question
java tomcat jax-rs
Jax-rsで作ったREST APIを呼ぼうとURLを入力すると404 Not Foundエラーになってしまう