JSPによる表示
【アプリケーションクラス】
今まで使用していた
javax.ws.rs.core.Applicationクラスのサブクラスは
今回は使いません。
(あるとうまく動かないようなので消したほう良いみたいです。
【web.xml】
web.xmlに設定を行います。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <filter> <filter-name>jersey</filter-name> <filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>jp.glory.ui.service</param-value> </init-param> <init-param> <param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name> <param-value>/WEB-INF/template</param-value> </init-param> </filter> <filter-mapping> <filter-name>jersey</filter-name> <url-pattern>/service/*</url-pattern> </filter-mapping> </web-app>
[フィルタクラス]
フィルタクラスには
com.sun.jersey.spi.container.servlet.ServletContainerを指定します。
[サービスクラスの設定]
Applicationクラスを使用していないので、
フィルタ側でサービスクラスを登録する必要があります。
サービスクラスの登録にはサービスクラスのパッケージを指定します。
init-paramタグのinit-nameタグに「com.sun.jersey.config.property.packages」を、
init-valueタグにサービスクラスがあるパッケージを指定します。
【サービスクラス】
package jp.glory.ui.service; import javax.ws.rs.FormParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import jp.glory.ui.template.bean.SampleJspBean; import com.sun.jersey.api.view.Viewable; @Path("/service/jsp") public class JspService { @FormParam("name") private String name = null; @FormParam("year") private Integer year = null; @POST public Viewable view() { return new Viewable("/sample.jsp", new SampleJspBean(name, year)); } }
[Viewableクラス]
JSPの表示を行うためには
com.sun.jersey.api.view.Viewableクラスのオブジェクトを返却します。
サンプルではテンプレートとなるJSPの名前とモデルオブジェクト(表示用のBean)を
コンストラクタのパラメータとして渡しています。
[Pathアノテーション]
今まではAplicationクラスを通していたので、
個々のサービスクラスではルートからの指定は不要でした。
今回はApplicationクラスを使用していないので、
ルートからのパスの指定をしています。
【JSP】
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JAX-RSサンプル</title> </head> <body> <div> Name:${it.name} </div> <div> Year:${it.year} </div> </body> </html>
[モデルオブジェクトの名称]
Viewableのコンストラクタで指定したモデルオブジェクトの名称は
固定で「it」となります。
【実行用のHTML】
<html> <head> <title>JAX-RSサンプル</title> <style type="text/css"> .area { margin-bottom: 20px; } </style> </head> <body> <div class="area" > <form action="../service/jsp" method="post"> <input type="text" name="name" /><br/> <input type="number" name="year" /><br/> <input type="submit" value="JSP Response"/> </form> </div> </body> </html>