第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メインで行ったほうがらくだと思われ。