第43夜 JAX-RSをWebアプリのフロントエンドとして利用する

久々のJavaネタ。

JAX-RSのRI実装であるJerseyでのWebアプリケーションの作り方。

いつものように足し算する。


テンプレート。今回はJSP

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <h1>${a} + ${b} = ${c}</h1>
    </body>
</html>


アクションクラス。

@Path("calc")
public class CalcResource {
    @Path("{a}/{b}")
    @GET
    public Viewable add(@Context HttpServletRequest request,@PathParam("a")int a, @PathParam("b")int b) {
        request.setAttribute("a", a);
        request.setAttribute("b", b);
        request.setAttribute("c", a + b);

        return new Viewable("/index.jsp");
    }
}

動きは予想通り。パスパラメータにはint以外を渡すとちゃんとエラーになってくれてこのメソッド自体実行されない。
たとえばintに変換できない文字列はもちろんのこと、小数点を入れるとエラー。ただし、引数のところをfloatにすると実行可能になる。このへんはJAX-RSのいいところ。すばらしい。


ちなみに以下のようにサーブレットのパラメータに渡すとそこからの相対パスになる。

<init-param>
    <param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name>
    <param-value>/WEB-INF/jsp</param-value>
</init-param>

古のSpringMVCのようですな。


このようにJAX-RSだけでアクションは作れるのとパスとか融通が利くのでJAX-RSメインで行ったほうがらくだと思われ。