1
かんたん Java EE 日 本 オラクル 株 式 会 社 オラクルユニバーシティ #jdt2014_e2 2
以 下 の 事 項 は 弊 社 の 一 般 的 な 製 品 の 方 向 性 に 関 する 概 要 を 説 明 するもので す また 情 報 提 供 を 唯 一 の 目 的 とするものであり いかなる 契 約 にも 組 み 込 むことはできません 以 下 の 事 項 は マテリアルやコード 機 能 を 提 供 す ることをコミットメント( 確 約 )するものではないため 購 買 決 定 を 行 う 際 の 判 断 材 料 になさらないで 下 さい オラクル 製 品 に 関 して 記 載 されている 機 能 の 開 発 リリースおよび 時 期 につ いては 弊 社 の 裁 量 により 決 定 されます Oracleは 米 国 オラクル コーポレーション 及 びその 子 会 社 関 連 会 社 の 米 国 及 びその 他 の 国 における 登 録 商 標 または 商 標 です 他 社 名 又 は 製 品 名 は それぞれ 各 社 の 商 標 である 場 合 があります 3
Agenda Java EE とは? Webアプリケーションを 作 ってみよう ステップ アップしよう 4
Java EE とは? 5
Java EE とは? Java Platform, Enterprise Edition Java SE をベースにした 企 業 システム 向 けのフレームワーク オープンなWebシステムの 構 築 を 支 える 機 能 群 の 標 準 仕 様 コミュニティ 主 導 のエンタープライズ ソフトウェア 標 準 コンポーネント 仕 様 とサービスアクセスのための 各 種 APIを 規 定 移 植 性 (Write Once Run Anywhere を 担 保 ) Oracle などのベンダーは Java EE に 準 拠 した 実 装 としてアプリケーショ ン サーバーを 提 供 Oracle WebLogic Server GlassFish 6
Java EE の 過 去 現 在 未 来 シンプル 化 & HTML5 軽 量 化 Java EE 7 JPE Project Enterprise Java Platform J2EE 1.2 Servlet, JSP, EJB, JMS RMI/IIOP 強 靱 性 J2EE 1.3 CMP, Connector Architecture Webサービス J2EE 1.4 Web Services Mgmt, Deployment, Async Connector 開 発 の 容 易 性 Java EE 5 Ease of Development, Annotations, EJB 3.0, JPA, JSF, Updated Web Services Java EE 6 Pruning, Extensibility Ease of Dev, CDI, JAX-RS Web Profile Servlet 3.0, EJB 3.1 Lite JMS 2.0, Batch, TX Interceptors HTML5: WebSocket, JSON Web Profile JAX-RS 2.0 May 1998 Dec 1999 10 specs Sep 2011 13 specs Nov 2003 20 specs May 2006 23 specs Dec 2009 28 specs Jun 2013 33+ specs 7
Java EE と Java SE Java EE 新 規 更 新 Servlets 3.0 JPA 2.0 EJB 3.1 JDBC StAX JSF 2.1 Interceptors 1.1 JAX-RS JNDI JavaMail サーバー EJB 3.1 Lite JSP 2.2 Bean Validation1.0 CDI 1.0 JAXB JAX-WS JMS JAXP JACC SAAJ JTA 1.1 Managed Beans 1.0 JASPIC JAX-RPC... Web Profile デスクトップ Java SE 8
Java EE 6 の 主 な 標 準 仕 様 標 準 仕 様 開 発 領 域 特 徴 JSF 2.1 Servlet 3.0 Webアプリケーション リッチなユーザインタフェースの 効 率 的 な 開 発 を 実 現 する Webアプリケーション フレームワーク 冗 長 な 設 定 コード 記 述 の 削 減 により 開 発 生 産 性 を 向 上 非 同 期 ServletによるAjax 対 応 EJB 3.1 ビジネスロジック 冗 長 な 設 定 コード 記 述 の 削 減 により 開 発 生 産 性 を 向 上 より 柔 軟 な 制 御 機 能 の 追 加 JAX-RS Webサービス 容 易 なサービス 公 開 を 実 現 するWebサービス 標 準 仕 様 CDI 全 領 域 レイヤ 間 の 疎 結 合 化 による 柔 軟 性 を 向 上 するDIフレーム ワーク 標 準 仕 様 最 新 のWebアプリケーションを 効 率 良 く 開 発 可 能 に 9
JavaServer Faces JSFはJava EE 6の 標 準 Webアプリケーション フレームワーク Webコンテナ HTTPリクエスト HTTPレスポンス コントローラー (Faces Servlet) 操 作 リダイレクト 生 成 管 理 モデル (Managed Bean) ビュー (XHTML) アクセス 10
JSFを 使 用 した 開 発 イメージ Webコンテナ 開 発 環 境 Webアプリケーション プレゼンテーション アプリケーションロ ジック 画 面 遷 移 ロジック 検 証 ロジック イベント 処 理 ビジネスロジック DBアクセス 開 発 デプロイ HTTPリクエスト Facelets (XHTML) Managed Bean / CDI POJO HTTPレスポンス JSF 11
Webアプリケーションを 作 ってみよう 12
サンプルプリケーション 数 当 てゲーム Webコンテナ Webアプリケーション 開 発 環 境 index.xhtml <h:form> <h:inputtext id="usernumber"/> <h:commandbutton id="subimt" value=" 送 信 " action="response" /> </h:form> response.xhtml 遷 移 <h:outputtext value="#{usernumberbean.responsemessage}" /> アクセス UserNumberBean Integer usernumber; String responsemessage; Integer getusernumber() { } void setusernumber(integer number) { } String getresponsemessage() { } アクセス 開 発 デプロイ JSF 13
プロジェクトを 作 成 する Webプロジェクトの 作 成 Webアプリケーション を 選 択 14
プロジェクトを 作 成 する Webプロジェクトの 設 定 [JavaServer Faces] を 選 択 [Java EE 6 Web] と [コンテキストと 依 存 性 の 注 入 を 有 効 にする]を 選 択 15
NetBeansの 編 集 画 面 プロジェ クト 作 成 One Point: NetBeansでは 作 成 するプログ ラムをプロジェクトという 単 位 で 管 理 しています プロジェクト ウィンドウ エディタ ウィンドウ 出 力 ウィンドウ プロジェクト ウィンドウには 作 成 したソースコード(.java ファイル)が 表 示 されます エディタ ウィンドウにはソー スコードを 編 集 することができ ます 出 力 ウィンドウにはプログラム の 実 行 結 果 などが 表 示 されます 16
index.xhtmlの 編 集 単 純 な 表 示 をするXHTMLの 記 述 <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>greeting</title> </h:head> <h:body> <h5>かんたん Java EE</h5> </h:body> </html> Java EE 6 用 にnamespace を 変 更 しましょう 17
フォームの 作 成 入 力 用 テキストフィールドは <h:inputtext> タグを 使 います <h:form> 入 力 した 値 は UserNumberBean オブジェクトの 変 数 usernumber に 格 納 されます <h:inputtext value="#{usernumberbean.usernumber}" /> <h:commandbutton id="subimt" value=" 送 信 " action="response" /> </h:form> 遷 移 先 のページを 指 定 18
JSF HTMLタグ その 他 のタグ HTMLタグ JSFタグ テキストフィールド <input type="text" value="" /> <h:inputtext value="" /> ラジオボタン コンボボックス <input type="radio" name="ans" value="y"> はい </input> <input type="radio" name="ans" value="n"> いいえ </input> <select size="1"> <option value="y">はい</option> <option value="n">いいえ</option> </select> <h:selectoneradio value=""> <f:selectitem itemvalue="y" itemlabel="はい" /> <f:selectitem itemvalue="n" itemlabel="いいえ" /> </h:selectoneradio> <h:selectonemenu value="" > <f:selectitem itemvalue="y" itemlabel="はい" /> <f:selectitem itemvalue="n" itemlabel="いいえ" /> </h:selectonemenu> ボタン <input type="submit" value=" 送 信 " /> <h:commnadbutton value=" 送 信 " /> 19
index.xhtmlを 完 成 させよう <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1- transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>greeting</title> </h:head> <h:body> <h4>かんたん Java EE </h4> <h5> Dukeの 数 字 を 当 ててね <br/> <p> 0 10 </p> </h5> <h5> 数 字 はいくつだと 思 う?</h5> <h:form> </h:body> </html> One Point: JSF 2.0からは ページ 遷 移 は 暗 黙 的 ナビゲー ションを 使 用 することができます フォーム 送 信 後 に 遷 移 するページは <h:commandbutton>タグなどのaction 要 素 で xhtmlファイル 名 を 記 述 するだけでページ 遷 移 を 行 うことができます <h:inputtext size="2" maxlength="2" value="#{usernumberbean.usernumber}" /> <h:commandbutton id="subimt" value=" 送 信 " action="response" /> </h:form> 遷 移 先 のページを 指 定 20
遷 移 先 の 指 定 暗 黙 的 ナビゲーション <h:commandbutton id="subimt" value=" 送 信 " action="response" /> index.xhtml <h:form> <h:inputtext id="usernumber"/> <h:commandbutton id="subimt" value=" 送 信 " action="response" /> </h:form> ManagedBeanのメソッドも 指 定 できます action = "#{usernumberbean.navigation}" JSFページを 指 定 すると 暗 黙 的 ナビゲーション UserNumberBean response.xhtml <h:outputtext value="#{usernumberbean.responsemessage}" /> String navigation() { } return "response"; 遷 移 先 のページを 戻 り 値 で 指 定 21
ManagedBean の 作 成 Javaクラスの 作 成 One Point: JSF ManagedBean は 通 常 のJavaクラス として 作 成 し @ManagedBean 注 釈 を 指 定 します (ManagedBeanの 生 成 および 破 棄 はコンテナに よって 管 理 されます) 22
ManagedBeanのスコープ オブジェクトの 生 存 期 間 スコープをあらわす 注 釈 有 効 期 間 ManagedBeanは 注 釈 で 指 定 された 期 間 で コンテナによって インスタンス 化 破 棄 されます @RequestScoped @ViewScoped @SessionScoped @ApplicationScoped @FlashScoped @NoneScoped HTTP リクエストを 受 けてからレスポンスを 返 すまでの 間 ページがロードされてから 他 のページに 遷 移 するまでの 間 HTTP セッションが 有 効 な 間 Web アプリケーションが 起 動 してから 終 了 するまでの 間 ページが 別 のページに 遷 移 する 間 スコープには 属 さない importするパッケージは javax.faces.bean パッケージ 23
UserNumberBeanの 実 装 @ManagedBean @ManagedBean 注 釈 とスコープの 注 釈 を 指 定 @SessionScoped public class UserNumberBean implements Serializable { private Integer randomint; // 当 たりの 数 字 (ランダムで 生 成 ) private Integer usernumber; // 入 力 値 private String responsemessage; // レスポンス( 判 定 結 果 ) public Integer getusernumber() { return usernumber; } public void setusernumber(integer usernumber) { this.usernumber = usernumber; } public String getresponsemessage() { if ((usernumber!= null) && (usernumber.compareto(randomint) == 0)) { return "<p class='highlight'> 大 当 たり!!</p>"; } else { return "<p class='highlight'> 残 念!!</p>"; } } One Point: randomint の 初 期 化 は @PostConstruct 注 釈 がつい たメソッドでも 行 うことができます @PostConstruct public void init() { Random generator = new Random(); randomint = generator.nextint(10); } } // randomintの 初 期 化 処 理 24
結 果 の 表 示 新 しいJSFページの 作 成 25
ManagedBeanの 値 を 表 示 する ManagedBeanにアクセスするにはEL 式 を 使 います <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>greeting</title> </h:head> <h:body> <h4>かんたん Java EE </h4> <h5> </h:body> </html> <h:outputtext escape="false" value="#{usernumberbean.responsemessage}" /> </h5> <h:link outcome="index" value=" 戻 る" /> リンクを 指 定 するJSFタグ outcome 属 性 で 遷 移 先 を 指 定 します ManagedBeanへのアクセス はEL 式 を 使 います 26
ManagedBeanへのアクセス EL 式 の 使 用 方 法 JSFのEL 式 の 構 文 は #{ ManagedBeanの 名 前.プロパティ 名 } <h:outputtext escape="false" value="#{usernumberbean.responsemessage}" /> ManagedBean 名 は クラス 名 ( 先 頭 小 文 字 )です @ManagedBean @SessionScoped public class UserNumberBean implements Serializable { // public String getresponsemessage() { if ((usernumber!= null) && (usernumber.compareto(randomint) == 0)) { return "<p class='highlight'> 大 当 たり!!</p>"; } else { return "<p class='highlight'> 残 念!!</p>"; } } ManagedBeanのプロパティの getterメソッドを 呼 び 出 します 27
まとめ JSFでのプレゼンテーションは Facelets を 使 用 できます <h:inputtext>など 豊 富 なJSFタグを 利 用 できます データはManaged Beanを 使 って 保 持 できます ManagedBeanはコンテナによってインスタンスのライフサイクルが 管 理 されます ( 適 切 なスコープを 指 定 しましょう) Faceletからは EL 式 を 使 ってアクセス 可 能 です JSFでのページ 遷 移 は 暗 黙 的 なナビゲーションが 使 用 できます action や outcome に 遷 移 先 を 文 字 列 で 指 定 できます (index.xhtml の 場 合 は index ) ManagedBeanでメソッドを 定 義 する 場 合 も 遷 移 先 の 文 字 列 を 戻 り 値 で 返 します 28
ステップ アップしよう 29
JSFでの 検 証 と 変 換 処 理 JSFでは 標 準 でバリデータやコンバータが 提 供 されています これらを 活 用 することで ビジネス ロジックの 開 発 に 注 力 することができます 必 要 に 応 じて Validator クラスを 開 発 したり Bean Validationを 使 うこともできます 30
入 力 値 を 検 証 するには? (1) 入 力 チェックを 行 うには? 入 力 必 須 のフィールドの 検 証 を 行 うには <h:inputtext> タグの required 属 性 を true にします 検 証 失 敗 時 のエラーメッセージは requiredmessage 属 性 で 指 定 できます エラーメッセージを 表 示 するには <h:message>タグを 使 用 します for 属 性 でどのタグに 対 するメッセージなのかを 指 定 できます 対 象 になる<h:inputText>タグにも id 属 性 を 追 加 します 31
入 力 値 を 検 証 するには? (1) required 属 性 とメッセージの 表 示 <h:form> <h:inputtext id="usernumber" size="2" maxlength="2 value="#{usernumberbean.usernumber}" required="true" requiredmessage=" 入 力 してね " /> <h:commandbutton id="subimt" value=" 送 信 " action="response" /> <br/> <h:message for="usernumber" id="usernumbereror styleclass="error" /> </h:form> 32
入 力 値 を 検 証 するには? (2) 有 効 な 値 の 範 囲 を 検 証 するには? 入 力 値 の 値 の 範 囲 を 検 証 するには 整 数 値 の 検 証 には<f:validateLongRange>タグを 使 用 できます JSFで 使 用 できるタグ JSFタグ <f:validatelongrange> <f:validatedoublerange> <f:validatelength> 整 数 値 の 最 大 値 (maximum)と 最 小 値 (minimum)を 検 証 浮 動 小 数 点 数 の 最 大 値 (maximum)と 最 小 値 (minimum)を 検 証 入 力 文 字 数 の 最 大 値 (maximum)と 最 小 値 (minimum)を 検 証 33
入 力 値 を 検 証 するには? (2) <f:validatelongrange>タグ <h:form> <h:inputtext id="usernumber" size="2" maxlength="2 value="#{usernumberbean.usernumber}" required="true" requiredmessage=" 入 力 してね " validatormessage="0から10の 数 字 を 入 力 してね " > <f:validatelongrange minimum="0" maximum="10" /> </h:inputtext> <h:commandbutton id="subimt" value=" 送 信 " action="response" /> <br/> <h:message for="usernumber" id="usernumbereror" styleclass="error" /> </h:form> 34
入 力 値 を 変 換 するには? JSF コンバータの 利 用 フォームに 入 力 された 値 は String 型 で 扱 われます ManagedBeanに 渡 されるときに JSFによってManagedBeanのプロパティのデー タ 型 に 変 換 されます 変 換 するデータ 型 は converter 属 性 で 指 定 することもできますconverter 属 性 に 指 定 された 型 に 変 換 できない 場 合 はエラー メッセージが 表 示 されます One Point: JSFでは 日 付 や 数 値 に 対 して 標 準 のコンバーターを 使 うことができます (<f:datetimeconverter>タグ, <f:convertnumber>タグ) 35
入 力 値 を 変 換 するには? JSF コンバータの 利 用 <h:form> <h:inputtext id="usernumber" size="2" maxlength="2" value="#{usernumberbean.usernumber}" converter="javax.faces.integer" convertermessage=" 数 字 を 入 力 してね " required="true" requiredmessage=" 入 力 してね " validatormessage="0から10の 数 字 を 入 力 してね " > <f:validatelongrange minimum="0" maximum="10" /> </h:inputtext> <h:commandbutton id="subimt" value=" 送 信 " action="response" /> <br/> <h:message for="usernumber" id="usernumbereror" styleclass="error" /> </h:form> 36
スタイルシートを 使 うには? <h:outputstylesheet>タグの 使 用 <h:head> <h:outputstylesheet library="css" name="stylesheet.css" /> <title>greeting</title> </h:head> <h:body>... <span class="highlight"> 0 </span> <span class="highlight"> 10 </span> One Point:.css ファイルは /resources/<library> 配 下 に 配 置 します.highlight { font-size: larger; color: #c00; } 37
スタイルシートの 適 用 例 <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <h:head> <h:outputstylesheet library="css" name="stylesheet.css" /> <title>greeting</title> </h:head> <h:body> <div id="maincontainer"> <div id="left" class="subcontainer greybox"> <h4>かんたん Java EE </h4> <h5> Dukeの 数 字 を 当 ててね <br/> <span class="highlight"> 0 </span> <span class="highlight"> 10 </span> </h5> <h5> 数 字 はいくつだと 思 う?</h5> <h:form> <h:inputtext id="usernumber" size="2" maxlength="2" value="#{usernumberbean.usernumber}" converter="javax.faces.integer" required="true" requiredmessage=" 入 力 してね " validatormessage="0から10の 数 字 を 入 力 してね " convertermessage=" 数 字 を 入 力 してね "> <f:validatelongrange minimum="0" maximum="10" /> </h:inputtext> <h:commandbutton id="subimt" value=" 送 信 " action="response" /> <br/> <h:message for="usernumber" id="usernumbereror" styleclass="error" /> </h:form> </div> <div id="right" class="subcontainer"> <h:graphicimage url="/img/duke.png" alt="duke" /> </div> </div> </h:body> </html> <h:graphicimage>タグはhtmlの <img>タグに 相 当 します 38
One Point: 日 本 語 の 入 力 を 処 理 するには? アプリケーションサーバ 固 有 のデプロイメント 記 述 で 設 定 GlassFishの 場 合 (WEB-INF/glassfish-web.xml) <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> <glassfish-web-app error-url=""> <parameter-encoding default-charset="utf-8" /> </glassfish-web-app> WebLogic Serverの 場 合 (WEB-INF/weblogic.xml) <?xml version="1.0" encoding="utf-8"?> <wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <wls:charset-params> <wls:input-charset> <wls:resource-path>/*</wls:resource-path> <wls:java-charset-name>utf-8</wls:java-charset-name> </wls:input-charset> </wls:charset-params> </wls:weblogic-web-app> 39
さらに 学 習 するには? 40
Java の 技 術 情 報 を 入 手 するには? Oralce Technology Network > Java テクノロジー チュートリアルやAPIドキュメントはこちらから 41
チュートリアルも 活 用 しよう Java EE 6 チュートリアル WebアプリケーションからEJB WebサービスまでJava EE 6 が カバーする 各 仕 様 について 理 解 することができます 42
チュートリアルも 活 用 しよう NetBeansチュートリアル ガイドおよび 記 事 NetBeansを 使 用 してJava EEア プリケーションを 開 発 するため の 手 順 をわかりやすく 説 明 して います 43
Java Developer NewsLetter 旬 のJavaトピックをお 届 けします Javaテクノロジーに 特 化 した 待 望 の 公 式 メールマガジンです こんな 情 報 をお 届 けしています 米 国 オラクル 発 刊 Java Magazine 日 本 版 の 最 新 号 のご 紹 介 Java 関 連 イベント セミナー 勉 強 会 のご 案 内 Javaコミュニティからの 情 報 Javaトレーニング 認 定 資 格 情 報 などなどお 役 立 ち 情 報 が 満 載 こんな 方 におススメです スキルアップを 目 指 すエンジニアの 皆 さま Javaの 最 新 動 向 をキャッチアップしたい エンジニアの 皆 さま 44
45