胡祥春開發專欄

          基于Java EE & WebService的日文軟件開發
          隨筆 - 1, 文章 - 24, 評論 - 7, 引用 - 0

           

          3.Strutsの処理の流れ

           では、Strutsを使ったアプリケーションの処理の流れを見ていきたいと思います。Strutsを用いたWebアプリケーションは主にActionServlet、フォームBean、アクションクラスの3つで構成されます。また、処理の制御を行う設定ファイルがあり、それがstruts-config.xmlです。以下はこれらの関係を図にしたものです。

          數據加載中……

          第1回:Struts入門編

           
          最近ではStrutsフレームワークを用いたWebアプリケーション開発が非常に注目されています。この記事ではWebアプリケーションを作成したことがある方を対象に、Strutsフレームワークの基本的な仕組みからStrutsを用いたWebアプリケーションの開発の流れまでを紹介します。

          流郷俊彥
          株式會社アイティーブースト
          2004/6/14
           

          【 目次 】
          1.はじめに
          2.フレームワークとは
          3.Strutsの処理の流れ
          4.Strutsアプリケーションの作成
          5.入力用JSPの準備
          6.フォームBeanの定義
          7.アクションクラスの定義
          8.struts-config.xmlの設定
          9.出力用JSPの定義
          10.まとめ
          【実行環境】
          OS WindowsXP
          JDK JDK1.4.2
          WebコンテナTomcat5.0.24
          Struts Struts1.1

          1.はじめに

           Strutsを用いたWebアプリケーション開発というのは現在では至るところで行われています。Java関連の書籍を見るといたるところで「Struts」という言葉を目にすることからStrutsが今世の中で非常に注目されていることがわかります。StrutsはJakartaプロジェクトで開発されたMVCアーキテクチャのController部分を提供してくれるフレームワークです。Strutsを使用して開発を行うことにより、開発効率が向上することや用意されたアクションタグを用いることにより、JSP內でスクリプトを使わずに動的なページを生成することもできます。また、アプリケーションの作成の手順が統一化されるので、機能変更や機能追加なども容易に行えるようになります。これらの理由からもStrutsが注目されているということがわかります。本記事では「Strutsって何?」という方を対象にフレームワークという言葉からStrutsの概要について紹介いたします。


          會員登録のメリット! ▼Java や Linux を體系的に學びましょう!▼
          Stack*のアイティーブーストが、
          新學習方式のカリキュラムを開発しました!
          9500円から(*1)、Java や Linux を體系的に學べます!!
          (*1 テキスト代のみの稅別料金です)



          2.フレームワークとは

           StrutsMVCアーキテクチャのController部分を提供してくれるフレームワークです。そもそもフレームワークとは何なのでしょうか?フレームワークは同種類のアプリケーションにおいて共通している部分を抜き出し、その共通部分を提供してくれるものです。つまり、フレームワークを使ってアプリケーションを開発するということは、アプリケーションの土臺となる部分にフレームワークが提供する機能を利用し、アプリケーション固有のプログラム(部品)のみを作成するということです。


          図中の番號は以下のようなことを行っています。
          (1) ~.doという形式のリクエストがActionServletに対して送られます。
          (2) ActionServletはstruts-config.xmlを參照し、~.doの「~」の部分に対応するフォームBean、アクションクラスを決定します。
          (3) リクエストパラメータを対応するフォームBeanにセットします。また必要であれば入力値のチェックも行います。
          (4) アクションクラスのexecute( )メソッドが呼び出されます。この中でリクエスト毎に固有の処理が実行されます。
          (5) 再度struts-config.xmlを參照し、適切な出力用Viewへ移動します。

           Webアプリケーションで処理の流れとしてよくある、単一のコントローラでリクエストを受け取り、専用のコントローラに処理を振り分ける、パラメータの値をModelにセットする、処理した結果に応じた適切なViewにフォワードするといったWebアプリケーションとしての基本的な処理を行ってくれるのがStrutsです。つまり、Strutsでは要所要所で具體的な処理の內容を定義するだけでWebアプリケーションが作成できます。
           以降では簡単なアプリケーションを作成しこれらの流れを抑えていきましょう。


          會員登録のメリット! ▼Java や Linux を體系的に學びましょう!▼
          Stack*のアイティーブーストが、
          新學習方式のカリキュラムを開発しました!
          9500円から(*1)、Java や Linux を體系的に學べます!!
          (*1 テキスト代のみの稅別料金です)



          4.Strutsアプリケーションの作成

           http://jakarta.apache.org/からStruts1.1をダウンロードします。ダウンロードしたファイルを展開すると中にjakarta-struts-1.1\webapps\struts-blank.warというファイルがあります。このファイルはzip形式で圧縮されたファイルなので拡張子を.zipに変更することで解凍することができます(JARコマンドを使用すれば拡張子を変更する必要はありません)。
           このwarファイルはStrutsを用いたWebアプリケーションのテンプレートになっています。解凍すると、Strutsアプリケーションを作成するために必要なJARファイルや設定ファイルなどが既に適切な位置に配置されています。あとは、この中にクラスやJSPを配置していけばStrutsアプリケーションが作成できます。
           今回はこの中に簡単なユーザ認証を行うアプリケーションを作成していきます。
           なお、今回作成するサンプルプログラムの階層は以下のようになります。


           

          5.入力用JSPの準備

           まず、入力用のJSPから見ていきます。これは以下のようなJSPになります。

          【loginForm.jsp】
           1:  <%@ page contentType="text/html; charset=Windows-31J" %>
           2:  <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
           3:  <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
           4:  <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
           5: 
           6:  <html:html>
           7:    <head><title>ログイン畫面</title>
           8:    <body>
           9:      <html:form action="/login">
          10:      <table border="0">
          11:        <tr>
          12:          <td>名前</td><td><html:text property="name" /></td>
          13:        </tr>
          14:        <tr>
          15:          <td>パスワード</td><td><html:password property="password" /></td>
          16:        </tr>
          17:        <tr>
          18:          <td colspan="2"><html:submit value="ログイン" /></td>
          19:        </tr>
          20:      </table>
          21:      </html:form>
          22:    </body>
          23:  </html:html>

           2行目から4行目がStrutsのタグライブラリを使用するためのtaglibディレクティブです。StrutsではHTMLの出力や條件分岐?繰り返し処理などのロジック処理の多くをアクションタグを用いて実行することができます。
           今回出てきたStrutsの主なアクションタグをまとめると、簡単にまとめると以下のようになります。

          タグ
          意味
          <html:html>
          HTMLの<html>タグに対応します。
          <html:form>
          HTMLの<form>タグになります。method屬性は省略しても自動的にPOSTで送られます。
          <html:text>
          HTMLの<input type="text">に対応します。property屬性が<input>タグのname屬性に対応します。
          <html:password>
          HTMLの<input type="password">に対応します。property屬性が<input>タグのname屬性に対応します。
          <html:submit>
          HTMLの<input type="submit">に対応します。

           これらは、後述のフォームBeanにセットされている値をデフォルト値としてくれたり、自動的にフォーカスを移動したりといった機能があります。


          會員登録のメリット! ▼Java や Linux を體系的に學びましょう!▼
          Stack*のアイティーブーストが、
          新學習方式のカリキュラムを開発しました!
          9500円から(*1)、Java や Linux を體系的に學べます!!
          (*1 テキスト代のみの稅別料金です)



          6.フォームBeanの定義

           フォームBeanはリクエストパラメータの値を格納するためのクラスになります。フォームBeanはActionFormクラスを継承したクラスでなければならず、フォームから送られてくる値を受け取るために同名のプロパティを定義しなければなりません。今回であれば、loginForm.jspから nameとpasswordという2つのパラメータが送られてくるので、それをプロパティとして定義します。具體的には以下のようになります。

          【LoginForm.java】
           1:  package jp.co.itboost.struts;
           2: 
           3:  import org.apache.struts.action.ActionForm;
           4:  import org.apache.struts.action.ActionMapping;
           5: 
           6:  public class LoginForm extends ActionForm {
           7:    private String name;
           8:    private String password;
           9: 
          //nameプロパティ 開始
          10:    public String getName() {
          11:      return name;
          12:    }
          13: 
          14:    public void setName(String name) {
          15:      this.name = name;
          16:    }
          17: 
          18:    public String getPassword() {
          19:      return password;
          20:    }
          //nameプロパティ 終了
          //passwordプロパティ 開始

          21: 
          22:    public void setPassword(String password) {
          23:      this.password = password;
          24:    }
          //passwordプロパティ 終了
          25:  }

           6行目でクラス定義の際、ActionFormを継承しています。
           10行目から16行目がnameプロパティの定義です。
           18行目から24行目がpasswordプロパティの定義です。
           このようなクラスを定義すると、リクエストパラメータとして送られてきたnameとpasswordの値がそれぞれnameプロパティ、passwordプロパティにセットされます。

          7.アクションクラスの定義

           アクションクラスはリクエストパラメータがフォームBeanにセットされたあと実行されるクラスです。アクションクラスの定義はActionクラスを継承し、execute( )メソッドを定義することにより行えます。execute( )メソッドは戻り値にActionForwardオブジェクトを返しますが、これはstruts-config.xmlで定義した移動先にフォワードすることを意味します。
           今回のログイン処理を行うアクションクラスであれば、以下のようになります。

          【LoginAction.java】
           1:  package jp.co.itboost.struts;
           2: 
           3:  import org.apache.struts.action.Action;
           4:  import org.apache.struts.action.ActionForm;
           5:  import org.apache.struts.action.ActionForward;
           6:  import org.apache.struts.action.ActionMapping;
           7:  import javax.servlet.http.*;
           8: 
           9:  public class LoginAction extends Action {
          10:    public ActionForward execute(ActionMapping mapping, ActionForm form,
          11:                                HttpServletRequest request, HttpServletResponse response) {
          12:      LoginForm loginForm = (LoginForm)form;
          13: 
          14:      // ログイン認証
          15:      if ("user".equals( loginForm.getName() ) && "itboost".equals( loginForm.getPassword() )) {
          16:        // ログイン成功
          17:        return mapping.findForward("success");
          18:      } else {
          19:        // ログイン失敗
          20:        return mapping.findForward("error");
          21:      }
          22:    }
          23:  }

           9行目でActionクラスを継承しています。
           12行目は引數のActionFormオブジェクトをLoginForm型にキャストしています。今回はフォームBeanにLoginFormクラスが使われるように設定されているため、LoginForm型にキャストします。
           17行目は15行目のif文の條件式がtrueになる場合、つまり、ログインが成功した場合に戻り値としてActionForwardオブジェクトを返している部分です。引數のActionMappingオブジェクトのfindForward( )メソッドを呼び出すことで、ActionForwardオブジェクトを作成することができます。引數に文字列を指定していますが、これはフォワード先を識別するための情報です。実際の移動先はstruts-config.xml(後述)で指定します。
           20行目も同様にログインに失敗した場合は「error」という名前の移動先にフォワードします。 

          8.struts-config.xmlの設定

           ここまでで、フォームBeanとアクションクラスの定義を見てきました。struts-config.xmlはあるリクエストに対して、どのフォームBeanとどのアクションクラスを使うのか、また、最終的にどこにフォワードするのかという処理の流れを定義する設定ファイルです。WEB-INFの中にstruts-config.xmlがあります。大きく分けると以下のような定義になります。

          【struts-config.xml】
           1:  <struts-config>
           2:          :
          <!-- フォームBeanの登録 開始 -->
           3:    <form-beans>
           4:      <form-bean name="loginForm" type="jp.co.itboost.struts.LoginForm" />
           5:    </form-beans>
          <!-- フォームBeanの登録 終了 -->
           6:          :
          <!-- アクションクラスの登録 開始 -->
           7:    <action-mappings>
           8:      <action path="/login" type="jp.co.itboost.struts.LoginAction" name="loginForm">
           9:        <forward name="success" path="/jsp/loginSuccess.jsp" />
          10:        <forward name="error" path="/jsp/loginForm.jsp" />
          11:      </action>
          12:    </action-mappings>
          <!-- アクションクラスの登録 終了 -->
          13:          :
          14:  </struts-config>

           struts-config.xmlには他にもいろいろと定義しますが、ここでは特に重要な<form-beans>タグと<action-mappings>タグの內容について紹介します。
           まず、4行目ではloginFormという名前でjp.co.itboost.struts.LoginFormクラスを登録しています。
           <form-beans>タグの中で<form-bean>タグを使いStrutsで使用するフォームBeanを登録します。<form-bean>タグの屬性の意味は以下のようになります。

          屬性
          意味
          name
          フォームBeanの名前(自由に指定してよい)
          type
          登録するフォームBeanのクラス(FQCNで指定)

           次に<action-mappings>タグの中で<action>タグを使いパスとフォームBean?アクションクラスの対応付けを行います。
           8行目から11行目の<action>タグで/loginというパスに対してjp.co.itboost.struts.LoginActionクラスをアクションクラスとして利用し、4行目で登録したloginFormという名前のフォームBeanにパラメータの値をセットします。
           また、ここでは使用していませんが、scope屬性でフォームBeanをどのスコープに保存するかを指定することもできます。scope屬性を指定しない場合、デフォルトでsessionスコープが指定されます。
           <action>タグで使用する屬性の意味は以下のようになります。

          屬性
          意味
          path
          リクエスト時のパスの名前(「~.do」の「~」の部分)
          type
          実行するアクションクラスのクラス名(FQCNで指定)
          name
          使用するフォームBeanの名前
          scope
          フォームBeanを保存するスコープ(application,session,request,pageのいずれか)

           9行目で<forward>タグを使用して「success」という名前に対して「/loginSuccess.jsp」というJSPへのパスを登録しています。これは、アクションクラスの戻り値を返している部分のfindForward( )メソッドの引數に対応します。
           つまり、

                return mapping.findForward("success");

          のようにした場合、/jsp/loginSuccess.jspへ、

                return mapping.findForward("error");

          のようにした場合は/jsp/loginForm.jspへフォワードされます。
          <forward>タグで使用する屬性は以下のような意味になります。

          屬性
          意味
          name
          フォワード先の名前(findForward( )メソッドの引數で指定する値)
          path
          実際のフォワード先へのパス


          會員登録のメリット! ▼Java や Linux を體系的に學びましょう!▼
          Stack*のアイティーブーストが、
          新學習方式のカリキュラムを開発しました!
          9500円から(*1)、Java や Linux を體系的に學べます!!
          (*1 テキスト代のみの稅別料金です)



          9.出力用JSPの定義

           では、最後に出力用のJSPを作成してみます。入力用JSPと同様にStrutsのアクションタグを使用しますが、ここでは、新たに<bean:write>というタグが出てきます。これは、<jsp: getProperty>と似た動きをします。<bean:write>タグはスコープ內のオブジェクトもしくはオブジェクトのプロパティを出力します。スコープ內のオブジェクトのプロパティを出力するアクションタグに<jsp:getProperty>タグがありますが、 <jsp:getProperty>タグとの違いは「<」や「>」といったHTMLにおける特殊な記號を自動的にエスケープ (「&lt;」や「&gt;」など)してくれるところです。ログイン成功時の畫面を出力するJSPは以下のようになります。

          【loginSuccess.jsp】
          1:  <%@ page contentType="text/html; charset=Windows-31J" %>
          2:  <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
          3:  <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
          4:  <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
          5: 
          6:  <html:html>
          7:    <head><title>ログイン成功畫面</title>
          8:    <body>
          9:      <bean:write name="loginForm" property="name" />さん、ようこそ
          10:    </body>
          11:  </html:html>

           9行目が<bean:write>タグを使用し、loginFormのnameプロパティを出力している部分です。loginFormは今回使用したフォームBeanですが、struts-config.xmlの部分でも説明したとおり、フォームBeanは何らかのスコープに保存されます。今回はstruts-config.xml ではどのスコープも指定していないので、sessionスコープに保存されているloginFormという名前のフォームBeanが対象となります。 property屬性でnameという値を指定しているので、loginFormのnameプロパティが出力されます。

          10.まとめ

           今回はStrutsを用いたWebアプリケーションの簡単な作り方を見てきました。
           今回見てきましたフォームBeanの定義、アクションクラスの定義、struts-config.xmlの編集、Viewの作成の組み合わせで最低限の開発は行うことができます。しかし、Strutsには他にもフォームBeanでの入力値の検証やさらに便利なアクションタグなどさまざまな便利な機能があります。これらを次回以降の記事で紹介していきたいと思います。

          posted on 2005-11-07 16:35 上海灘拾貝 閱讀(1806) 評論(0)  編輯  收藏 所屬分類: Struts相關

          主站蜘蛛池模板: 易门县| 大厂| 宁晋县| 资中县| 博白县| 江油市| 海门市| 神池县| 毕节市| 旌德县| 稷山县| 将乐县| 华亭县| 斗六市| 南召县| 思南县| 神木县| 曲阜市| 武冈市| 皋兰县| 铁岭市| 牙克石市| 城口县| 潮州市| 雷波县| 县级市| 习水县| 德安县| 绥化市| 宁武县| 大厂| 贵港市| 呼和浩特市| 宜春市| 盘锦市| 北碚区| 镶黄旗| 始兴县| 专栏| 天台县| 金门县|