連載
» 2008年11月11日 00時00分 公開

Hello World!で理解する、Webアプリ開発の分業化オープンソースTERASOLUNAで作るWebアプリ(2)(3/3 ページ)

[師芳卓,株式会社NTTデータ]
前のページへ 1|2|3       

手順【4】JSPの作成

 まず、画面のJSPを実装します。入力画面(input.jsp)では、テキストボックスとサブミットボタンを配置し、出力画面(result.jsp)では、値を表示するタグを配置します。アクションフォームのフィールド名と、JSPのタグのname属性、値表示タグの参照名が一致していることを確認してください。

リスト5 入力画面(input.jsp)
<%@ page contentType="text/html; charset=Windows-31J"%>
<%@ taglib uri="/struts-html" prefix="html" %>
<%@ taglib uri="/struts-bean" prefix="bean" %>
<%@ taglib uri="/struts-logic" prefix="logic" %>
<%@ taglib uri="/terasoluna-struts" prefix="ts" %>
<%@ taglib uri="/terasoluna" prefix="t" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html>
<head>
  <meta http-equiv="Content-Type"
    content="text/html; charset=shift_jis">
  <title>入力画面</title>
</head>
<body>
  <p>
    <!-- 【I】 -->
    <ts:form action="/concatBL">
      <!-- 【II】 -->
      項1:<html:text property="firstTerm" /> <br/>
      項2:<html:text property="secondTerm" /> <br/>
      <ts:submit value="送信" />
    </ts:form>
  </p>
</body>
</html:html>

【I】実行するBLogicActionのアクションパスを指定
【II】送信した入力情報を格納するアクションフォームのフィールド名を指定

リスト6 結果表示画面(result.jsp)
<%@ page contentType="text/html; charset=Windows-31J"%>
<%@ taglib uri="/struts-html" prefix="html" %>
<%@ taglib uri="/struts-bean" prefix="bean" %>
<%@ taglib uri="/struts-logic" prefix="logic" %>
<%@ taglib uri="/terasoluna-struts" prefix="ts" %>
<%@ taglib uri="/terasoluna" prefix="t" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html>
<head>
  <meta http-equiv="Content-Type" content="text/html;
    charset=shift_jis">
  <title>出力画面</title>
</head>
<body>
  <p>
    <!-- 【I】 -->
    <bean:write name="_form" property="resultTerm" /> <br/>
    <ts:link action="/inputSCR">戻る</ts:link>
  </p>
</body>
</html:html>

【I】結果情報の格納されたアクションフォームのフィールド名を設定

手順【5】入出力DTOの定義

 業務入出力DTOのクラスを定義します。業務ロジッククラスConcatBLogicに対応する業務入力クラスConcatInput、業務出力クラスConcatOutputを定義しましょう。DTOのフィールド名は、blogic-io.xmlで設定したblogic-propertyの名前と一致していることを確認してください。

リスト7 業務入力DTOクラス(ConcatInput.java)
package sample;

public class ConcatInput {
    // 【I】
    private String firstTerm;
    private String secondTerm;

    // getter/setterのJavaDocは省略
    public String getFirstTerm() {
        return firstTerm;
    }
    public void setFirstTerm(String firstTerm) {
        this.firstTerm = firstTerm;
    }
    public String getSecondTerm() {
        return secondTerm;
    }
    public void setSecondTerm(String secondTerm) {
        this.secondTerm = secondTerm;
    }
}

【I】手順【1】の入力項目をフィールドとして定義し、setter/getterを生成

リスト8 業務出力DTOクラス(ConcatOutput.java)
package sample;

public class ConcatOutput {
    // 【I】
    private String resultTerm;

    // getter/setterのJavaDocは省略
    public String getResultTerm() {
        return resultTerm;
    }
    public void setResultTerm(String resultTerm) {
        this.resultTerm = resultTerm;
    }
}

【I】手順【1】の出力項目をフィールドとして定義し、setter/getterを生成

手順【6】業務処理(BLogic)の実装

 最後に、業務処理の実装に入ります。BLogicインターフェイスで定義されているexecuteメソッドを実装しましょう。業務ロジックの処理の流れは、大きく3つに分けられます。

【I】業務処理の実行
通常、データベースアクセスなどを含む業務処理を記述。今回は、文字連結処理を記述

【II】業務出力オブジェクトの生成
手順【5】で作成した業務出力クラスのインスタンスを生成し、【I】の業務処理の結果をセット

【III】結果オブジェクトの生成
BLogicResultオブジェクトを生成し、setResultStringメソッドで遷移情報の文字列(ここでは、「success」)を、setResultObjectメソッドで【II】で作成したオブジェクトにセット

リスト9 業務ロジッククラス(ConcatBLogic.java)
package sample;

import jp.terasoluna.fw.service.thin.BLogic;
import jp.terasoluna.fw.service.thin.BLogicResult;

public class ConcatBLogic implements BLogic<ConcatInput> {
    /**
    * 文字列連結処理を実行
    *
    * @param input 業務入力オブジェクト
    * @result 遷移文字列と業務出力オブジェクトを
    *         格納した結果オブジェクト
    */
    public BLogicResult execute(ConcatInput input) {
        // 【I】業務処理(文字列連結)の実行
       String resultTerm = input.getFirstTerm() + " "
                + input.getSecondTerm();
       
// 【II】業務出力オブジェクトの生成
       ConcatOutput output = new ConcatOutput();
       output.setResultTerm(resultTerm);
       
// 【III】結果オブジェクトの生成
       BLogicResult result = new BLogicResult();
       result.setResultString("success");
       result.setResultObject(output);
       return result;

    }
}

 以上で、Webアプリケーションの作成は完了です。

作成したWebアプリをTomcatで動かすと……

 それでは、早速Webアプリケーションを動かしてみましょう。

 [ウィンドウ]→[ビューの表示]→[その他]で現れるダイアログの中から、[サーバ]を選択します。サーバのビューのところで右クリックから[新規]→[サーバ]を選択し、[Apache]→[Tomcat v5.5サーバ]を選択します。追加された「Tomcat v5.5サーバ」の右クリックメニューから[プロジェクトの追加および除去]を選択し、今回作成したプロジェクト(terasoluna-sample)を追加してください。その後、サーバを起動します。Eclipseには、以下のようなビューが表示されているはずです。

図6 Eclipse上でのTomcatの設定画面 図6 Eclipse上でのTomcatの設定画面

 Webアプリケーションのログは、コンソールのビューに出力されます。例外などのERRORログが発生していなければ、起動成功です。

リスト10 Webアプリ起動ログの例
……【省略】……

情報: Coyote HTTP/1.1を http-8080 で初期化します
2008/10/31 15:28:37 org.apache.catalina.startup.Catalina load
情報: Initialization processed in 1750 ms
2008/10/31 15:28:37 org.apache.catalina.core.StandardService start
情報: サービス Catalina を起動します
2008/10/31 15:28:37 org.apache.catalina.core.StandardEngine start
情報: Starting Servlet Engine: Apache Tomcat/5.5.26
2008/10/31 15:28:37 org.apache.catalina.core.StandardHost start
情報: XML検証は無効です
[2008/10/31 15:28:39][INFO][ApplicationContext] Initializing Spring root WebApplicationContext
[2008/10/31 15:28:39][INFO][ContextLoader] Root WebApplicationContext: initialization started

……【省略】……

[2008/10/31 15:28:43][INFO][ContextLoaderPlugIn] Using context class 'org.springframework.web.context.support.XmlWebApplicationContext' for servlet 'action'
[2008/10/31 15:28:43][INFO][ContextLoaderPlugIn] ContextLoaderPlugIn for Struts ActionServlet 'action', module '': initialization completed in 282 ms
[2008/10/31 15:28:43][DEBUG][ResetterPlugIn] init() called.
[2008/10/31 15:28:43][DEBUG][ResetterPlugIn] reset file=/WEB-INF/reset.xml
[2008/10/31 15:28:43][INFO][ValidatorPlugIn] Loading validation rules file from '/WEB-INF/validator-rules.xml'
[2008/10/31 15:28:43][INFO][ValidatorPlugIn] Loading validation rules file from '/WEB-INF/validator-rules-ex.xml'
[2008/10/31 15:28:43][INFO][ValidatorPlugIn] Loading validation rules file from '/WEB-INF/validation.xml'
[2008/10/31 15:28:43][DEBUG][BLogicIOPlugIn] blogic io file=/WEB-INF/blogic-io.xml
2008/10/31 15:28:44 org.apache.coyote.http11.Http11BaseProtocol start
情報: Coyote HTTP/1.1を http-8080 で起動します
2008/10/31 15:28:44 org.apache.jk.common.ChannelSocket init
情報: JK: ajp13 listening on /0.0.0.0:8009
2008/10/31 15:28:45 org.apache.jk.server.JkMain start
情報: Jk running ID=0 time=0/140 config=null
2008/10/31 15:28:45 org.apache.catalina.storeconfig.StoreLoader load
情報: Find registry server-registry.xml at classpath resource
2008/10/31 15:28:45 org.apache.catalina.startup.Catalina start
情報: Server startup in 7828 ms

 動作確認は、Webブラウザで行います。アドレスに、「http://localhost:8080/terasoluna-sample/inputSCR.do」を入力してください。表示されるフォームに「Hello」と「World」を入力し、下記の画面が出力されれば成功です。

図7 入力画面の例 図7 入力画面の例
図8 結果画面の例 図8 結果画面の例

1人よりも複数人開発に有利なフレームワーク

 今回は、サンプルWebアプリケーションの作成を通して、TERASOLUNAフレームワークの使い方について学びました。Webアプリケーション完成までの流れを振り返ると、共通部分の作業として、手順【1】業務入出力情報(blogic-io.xml)の設定、手順【2】画面遷移情報(struts-config.xml)の設定があり、個別部分の作業として、手順【4】画面の作成(JSP)、手順【6】業務処理の実装(BLogic)がありました。

 今回では、一連の作業を1人で行いましたが、画面遷移が複雑になった際に、個別部分を複数人で作業することにより、開発の生産性をさらに上げられます。今回は説明を省略しましたが、共通部分の作業である手順【1】【3】に関しても、業務単位で設定ファイルを分割できるため、複数業務の開発を並行して進めることができます。

 次回は、データベースを利用したサンプルWebアプリケーションを作成します。トランザクション処理、DBとのデータの授受など、機械的な割に記述量が多い処理をTERASOLUNAフレームワークがいかに簡素化したかについて解説していきたいと思います。

@IT関連記事

Webアプリの常識をJSPとStrutsで身につける
JSP/サーブレット+StrutsのWebアプリケーション開発を通じて、Java言語以外の開発にも通用するWebアプリケーション全般の広い知識・常識を身に付けるための連載です。初心者・中堅・ベテランも大歓迎!

Strutsを使うWebアプリケーション構築術
ステップ・バイ・ステップの解説で誰にも分かるStruts講座。効率の高いWebアプリケーション開発をマスターしよう

開発の標準化とフレームワークの普及
21世紀はじめのWeb技術史(2) 今回は、ソフトウェア品質を高めるために進化を遂げてきたアプリケーション開発環境の最近の道筋を概観する。キーワードはフレームワーク
情報マネジメント > アーキテクチャ 2007/3/19

Javaバッチ処理は本当に業務で“使える”の?
オープンソースフレームワークを使ってバッチ処理の開発手法やノウハウを学んでいく本連載。バッチ処理を知っている人も知らない人も、業務システムに欠かせないバッチ処理について理解を深めましょう

.NET開発でもオープンソース・フレームワークを使おう
TERASOLUNA for .NETフレームワーク概説 .NET Frameworkだけの業務システム開発で起こる問題とは? それを解消するのに役立つフレームワークの条件とは?
Insider.NET」フォーラム 2003/9/30


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。