JP2007133893A - Webアプリケーション生成装置及び方法 - Google Patents

Webアプリケーション生成装置及び方法 Download PDF

Info

Publication number
JP2007133893A
JP2007133893A JP2006344426A JP2006344426A JP2007133893A JP 2007133893 A JP2007133893 A JP 2007133893A JP 2006344426 A JP2006344426 A JP 2006344426A JP 2006344426 A JP2006344426 A JP 2006344426A JP 2007133893 A JP2007133893 A JP 2007133893A
Authority
JP
Japan
Prior art keywords
data
html
processing
data object
sentence
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2006344426A
Other languages
English (en)
Inventor
Takahide Matsuzuka
貴英 松塚
Yoshihide Nomura
佳秀 野村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2006344426A priority Critical patent/JP2007133893A/ja
Publication of JP2007133893A publication Critical patent/JP2007133893A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

【課題】 Webアプリケーションを実行するアプリケーションサーバを開発する際に、データ、ロジック、画面の各モジュールに分けて記述するフレームワークを提供する。
【解決手段】 Webページの入力内容201をデータオブジェクト203に変換する入力内容変換手段206と、データオブジェクト203の種類とコマンドの組合せを各処理ルーチンにマッピングする第1の外部定義ファイル207と、処理ルーチンを複数備える処理ロジック205と、データオブジェクト203の種類とコマンドと第1の外部定義ファイル207に基づいて処理ロジック205から適当な処理ルーチンを決定する処理ルーチン決定手段206と、処理ロジック205の処理結果とデータオブジェクト204の種類の組合せを表示用コンポーネント202にマッピングする第2の外部定義ファイル207と、を備える。
【選択図】 図2

Description

本発明は、企業の基幹業務などを処理するビジネスアプリケーションソフトウェアの開発効率と保守性を向上させる技術に関する。
企業業務におけるデータエントリシステム、ワークフローシステムなどのビジネスアプリケーションでは、図47に示すように、データベースサーバ5402の管理するデータを、クライアント5403からアプリケーションサーバ5401を介して操作する、という方式がとられてきた。近年、このようなビジネスアプリケーションはWebアプリケーションとして実現されるようになった。
そして、Webブラウザを制御する役割を果たすアプリケーションサーバ5401の開発には、従来より様々な試みがなされてきている。代表的なものとしてServlet(サーブレット)、JSP(Java(登録商標) Server Pages)を用いたアプリケーションサーバ5401がある。
Servletを用いたアプリケーションサーバ5401は、図48に示すように、画面表示を規定するHTML(Hyper Text Markup Language)5501、画面データ5502、ロジック5503(画面の入力のハンドリング、入力データのチェック、データの加工、データベースサーバ5402へのデータの伝達などを行う)を一つのモジュールとして記述して実現される。
また、JSPを用いたアプリケーションサーバ5401は、図49に示すように、Java Bean(Java、Java Beansは、サンマイクロシステムズ・インコーポレーテッドの登録商標)というオブジェクトに格納された画面データ5602とHTML5601とロジック5603から成るモジュールとして記述するか、あるいは、HTML5601’からなるモジュールと、画面データ5602’とロジック5603’をJava Beanオブジェクトに格納するように記述して実現される。
一般にビジネスアプリケーションでは扱うデータが多量となるため、アプリケーションサーバ5401は、データ(画面データ)、ロジック、画面(HTML等)を各モジュールに分けて記述して実現し、それぞれのモジュールを再利用したいという要求がある。しかしながら、図48や図49に示したように、ServletやJSP等の従来技術を用いたアプリケーションサーバ5401では、これらのモジュールの分離が困難であった。
そこで本発明の課題は、Webアプリケーションを実行するアプリケーションサーバを開発する際にデータ、ロジック、画面の各モジュールに分けて記述するフレームワークを提供することにより、Webアプリケーションの開発効率と保守性を向上することにある。
上述した課題を解決するために、本発明ではWebアプリケーションをカスタムタグ付きHTML、データオブジェクト、ロジックに分け、カスタムタグ付きHTMLとロジックの間をマッピングファイルによってマッピングし、両者間のデータのやり取りにデータオブジェクトを用いるようにした。
本発明の一態様によれば、Webページの入力内容をデータオブジェクトに変換する入力内容変換手段と、複数の処理ルーチンを備える処理ロジックと、前記データオブジェクトの種類とコマンドの組合せを前記各処理ルーチンにマッピングする第1の外部定義ファイルと、前記データオブジェクトの種類とコマンドと前記第1の外部定義ファイルに基づいて前記処理ロジックの備える処理ルーチンから適当な処理ルーチンを決定する処理ルーチン決定手段と、前記処理ロジックの処理結果とデータオブジェクトの種類の組み合わせを表示用コンポーネントにマッピングする第2の外部定義ファイルと、を備える。
また、本発明の別の一態様によれば、クライアントに提供するデータを有し、且つ該データのデータ構造を表すインタフェースを実装するデータオブジェクトを取得する手段と、前記データオブジェクトが有するデータについてのWebページ画面における表示方法をHTMLによる記述によって定義する定義文を取得する手段と、前記データオブジェクトに実装されている前記インタフェースに基づいて該データオブジェクトの有するデータと前記定義文とを関連付けることによって、該データが表示されるWebページ画面を表現するHTML文を生成する手段と、を備える。
また、本発明の更なる別の一態様によれば、処理の内容が定義されている処理ロジックであって、予め用意されている該処理ロジックの名称となる文字列を生成する手段と、前記文字列を用いて前記処理ロジックを呼び出すHTML文であって、前記処理ロジックについての実行条件であって予め用意されている該実行条件に合致するイベントがクライアントで発生したときに該処理ロジックを呼び出して実行する、という処理を該クライアントに行なわせる該HTML文を生成する手段と、を備える。
このような構成をとることにより、Webアプリケーションシステムにおいて画面表示を規定するHTML、データオブジェクト、及び処理の内容を規定するロジックの連携がそれぞれ疎となることになり、各モジュールの再利用性が向上し、開発効率と保守性を上げることができる。
本発明によれば、Webアプリケーションシステムにおいて画面表示を規定するHTML、データオブジェクト、処理の内容を規定するロジックの連携が疎となることになり、各モジュールの再利用性を向上させ、開発効率と保守性を上げることができる。また、サーバにおける処理を時間的スコープの大きなものから小さなものに分岐して処理を進めることにより、スレッドセーフを実現したり、各スコープにおける処理に前処理、後処理を追加し、処理の前判断やエラー処理を柔軟に行えるという効果を得ることができる。
以下、本発明の実施の形態を図面を参照しながら説明する。
図1は、本発明の概略を示す図である。本発明を実施するUJI(宇治)なるアプリケーションサーバは、図示するように、画面表示を規定するHTML101、画面データ102、ロジック103の3つのモジュールから構成される。尚、HTML101は画面表示を規定できるものなら何れのものでも良い。
図2は、本発明の原理構成を示す図である。図1のHTML101に対応するものが入力用JSP201及び表示用JSP202であり、図1の画面データ102に対応するものが入力用Java Bean203及び表示用Java Bean204、図1のロジック103に対応するのがユーザロジック205である。入力用JSP201は画面をデータにアサインする機能を備え、表示用JSP202はデータを画面に表示する機能を備
える。UJIエンジン206は、入力用JSP201の画面データを例えばJava Beanなどのデータオブジェクトに変換する((1)、(5)、(6))。すなわち、入力用JSP201の画面データは入力用Java Bean203に変換される。ユーザロジック205は複数の処理ルーチンから構成されており、UJIエンジン206がデータオブジェクト(入力用Java Bean203)の種類及びコマンドと外部のマッピングファイル207とに基づいて、適当な処理ルーチンを決定する((5)、(6)、(7))。ユーザロジック205では、決定された処理ルーチンを用いてデータオブジェクトである入力用Java Bean203を処理し(2)、表示用Java Bean204として出力する((3))。表示用Java Bean204はUJIエンジン206によって表示用JSP202の画面データに変換され((4)、(5)、(6))、また処理結果とデータオブジェクトである表示用Java Beanの種類の組み合わせを外部のマッピングファイル207から探し出し、表示すべき部品を決定する。このように、本発明はデータオブジェクトが画面を規定するHTMLとロジックとの間に介在するような構成をとるので、画面とロジックとを疎に連結することを可能とする。
図3は、本発明の第1の実施例のシステム構成を示す図である。クライアントからのリクエスト301はフロントコンポーネント302で受信される。そして、リクエスト301に含まれるリクエストデータはUJIエンジン304で自動解析され、データオブジェクトである入力用Java Bean303が自動生成される。UJIエンジン304では、更に、コマンドマッピング305を参照し、リクエストデータから生成されたデータオブジェクトの種類とコマンドとからユーザロジック307での処理を決定する。ユーザロジック307では、生成されたデータオブジェクトを読み込み、該決定に従って処理を行い、処理結果として表示用Java Bean309を設定する。ここで、UJIエンジン304はページマッピング306を参照し、表示用Java Bean309から表示用JSP310、すなわち画面表現が決定される。尚、表示用JSP310にはページレイアウトを規定するテンプレート308がインクルードされ、このテンプレート308に従って表示部品が配置されるようになっている。
図3では本発明の第1の実施例のシステム構成を示しその動作概要を述べたが、図4を用いて、本発明の第1の実施例のシステムの具体的な動作を説明する。図4は、ユーザが何処にいるかを示す「行き先掲示板」というWebアプリケーションの様子を示したものである。ユーザを一覧表示するユーザ一覧表示画面401、ユーザの状態を編集するユーザ状態編集画面402、ユーザの行き先候補を編集するプロファイル編集画面403、新規ユーザを登録するユーザ登録画面404はそれぞれ、クライアントでWebブラウザによって表示されるものである。ユーザ一覧表示画面401において、ログインボタン405が押し下げられる(クリックされる)とユーザ状態編集画面402に遷移する。ユーザ一覧表示画面401で、ユーザ登録ボタン406が押し下げられるとユーザ登録画面404に遷移する。同様に、各画面402〜404の各ボタンが押し下げられると、対応する図4に示した矢印のように画面が遷移する。このとき、ログイン405、ユーザ登録ボタン406、変更ボタン407、ログアウトボタン408等の画面の各ボタンはユーザがシステムに対して処理を要求するためのコマンドに相当する。
また、例えばユーザ「松塚」がユーザ状態として表示できる「自席」、「出張」、「年次」という3状態の他に「会議室」という状態を追加したい場合には、ユーザ状態編集画面402において、プロファイル編集ボタン409を押し下げる。すると画面表示はプロファイル編集画面403に遷移する。ここで、ユーザ「松塚」が「追加」の欄に例えば「会議室」と入力し、変更ボタン410を押し下げると新たな状態が加えられたプロファイル編集画面が表示される。
以下、図5及び図6で、図4のアプリケーションのシステム構成とその動作概要を説明
する。
図5は、クライアントからのリクエストが受信されてから、処理が完了するまでの動作概要を示すものである。Webブラウザに表示される、ユーザ一覧表示画面501、ユーザ状態編集画面502、プロファイル編集画面503、ユーザ登録画面504は、それぞれ図4の画面に対応している。それぞれの画面から、ログイン、ユーザ登録、プロファイル編集、ログアウト、変更、ユーザ追加、キャンセル等のコマンドがUJI506に伝達される(実線矢印)と、それぞれの画面データがデータオブジェクトであるJava Bean505に自動的に変換される(点線矢印)。また、UJI506は、コマンドマッピング507(後述)を参照し、伝達されたコマンドとデータオブジェクトの種類との組み合わせに基づいて分岐すべき処理を処理508〜512の中から選択する。そして選択された処理にデータオブジェクトを渡す。データオブジェクトが渡されると、選択された処理の内容に沿って、そのデータオブジェクトが処理される。
図6は、データオブジェクトの処理が終わり、クライアントへレスポンスが返されるまでの動作概要を示すものである。処理が終わり、処理結果としてのJava Bean601が作成される。そして、UJI506において、ページマッピング602(後述)が参照され、処理結果(成功、失敗、完了等)と作成されたJava Bean601との組み合わせから表示すべきページがページ501〜504の中から決定される。表示すべきページには作成されたJava Bean601が渡され、それをもとに新たなページが表示される。
図7(а)、(b)にコマンドマッピングの一部、図7(c)にページマッピングの一部を示す。コマンドマッピングは入力データオブジェクトの種類、コマンド、処理から成るテーブルで構成される。また、ページマッピングは出力データオブジェクトの種類、処理結果、画面から成るテーブルで構成される。
図7(а)、(b)に示すように、コマンドマッピングによって、入力データオブジェクトの種類とコマンドとの組み合わせから分岐すべき処理が決定される。図7(а)は入力データオブジェクトの種類が同一で、コマンドの種類が異なる場合のコマンドマッピングを示したものである。図7(а)より、入力データオブジェクトの種類が「ユーザ状態」で、コマンドが「プロファイル編集」の場合、プロファイル変更処理に処理を分岐させることが決定されることがわかる。また、図7(b)は、入力データオブジェクトの種類が異なり、コマンドが同一な場合のコマンドマッピングを示したものである。図4に示したように「変更」コマンドは様々な画面で用いられる。しかし、コマンドが同一であっても、コマンドが発生したときに分岐すべき処理はそれぞれ異なる。図4のユーザ状態編集画面402において「変更」コマンドが発生した場合は、ユーザ状態変更処理に処理を分岐させなければならず、プロファイル編集画面403において「変更」コマンドが発生した場合はプロファイル変更処理に処理を分岐させなければならない。図7(b)に示すコマンドマッピングでは、入力データオブジェクトの種類が「ユーザ状態」で「変更」コマンドが発生するとユーザ状態変更処理に処理を分岐させ、入力データオブジェクトの種類が「プロファイル編集」で「変更」コマンドが発生したときにはプロファイル編集処理に分岐させるように規定することができる。このように、本発明のコマンドマッピングは入力データオブジェクトの種類とコマンドの組み合わせから分岐すべき処理を決定するため、コマンドが同一であっても、入力データオブジェクトの種類から分岐すべき処理を適切に選択することができる。
また、図7(c)に示すページマッピングによって、出力データオブジェクトの種類と処理結果との組み合わせから、表示すべき画面が決定される。ページマッピングにおいてもコマンドマッピングと同様に、出力データオブジェクトの種類と処理結果との組み合わ
せで画面が決定されるため、処理結果が同一であっても、出力データオブジェクトの種類から表示すべき画面を適切に選択することが可能である。
尚、コマンドマッピング、ページマッピングは、外部定義ファイルで、開発者が自由に設定できるものである。これにより開発における柔軟性を高めることができる。
以上、本発明の第1の実施例のシステム全体の動作を説明したが、次に、各動作間についてより具体的に説明する。
図8は、クライアントからのリクエストデータを入力用Java Beanに変換させる(図3の301、303間)ためのプログラム記述を示す図である。この記述により、データ入力用HTMLページ801にデータが入力されると、データ入力用HTMLページ801の特定項目(LoginBean )に対応したクラス名(図8の(1))であって、各入力欄の名前(name)をプロパティ(図8の(2)、(2)’)として持つデータオブジェクト入力用Java Bean802が生成される。
図9は、実行すべきロジックの処理をコマンドマッピングを用いて決定する(図3の305、307間)部分のプログラム記述を示す図である。コマンドマッピング902には、データ入力用HTMLページ901の特定項目に対応したクラス名(LoginBean )と、押し下げられたボタン(submit)の名前(name)の組み合わせが、ユーザロジック903(ハンドラ)のメソッドにマッピングされている。これにより、例えばデータ入力用HTMLページ901でログインボタンが押し下げられると、ユーザロジック903のlogin メソッドが実行されることになる(図9の(1))。同様に、データ入力用HTMLページ901でパスワード変更ボタンが押し下げられると、ユーザロジック903のchangePasswordメソッドが実行されることになる(図9の(2))。
図10は、ユーザロジックが表示用データオブジェクトを設定する(図3の307、309間)部分のプログラム記述を示す図である。ユーザロジック(ハンドラ)1001は、データベース1002などを使用して処理を行い、処理の結果として表示が必要である値と処理結果とを表示用データオブジェクト(Java Bean)1003に設定する。
図11は、ページマッピングを介して表示すべきページを決定する(図3の309、310間)部分のプログラム記述を示す図である。ページマッピング1102では、クラス名(UserBean)とユーザロジック(ハンドラ)で設定される処理結果の組み合わせが表示すべきビュー(この場合JSP)にマッピングされている。これにより、表示用Java
Bean1101に設定された処理結果が例えばsucceeded の場合、login-succeeded.jsp 1103が選択され(図11の(1))、これと図3のテンプレート308とが合わされて表示画面が決定される。同様に、表示用Java Bean1101に設定された処理結果がfailedの場合、login-failed.jsp1104が選択され(図11の(2))、これと図3のテンプレート308とが合わされて表示画面が決定される。
図12は、JSPから表示画面を出力する(図3の310)部分のプログラム記述を示す図である。表示用JSP1201は、データ取得用のタグを使用して表示用Java Bean1202からデータを取得し、取得されたデータを出力HTML1203として出力する。
図13は、表示画面に複数の表示部品を配置する場合のテンプレート(図3の308、310間)について説明する図である。ユーザロジック(ハンドラ)1301は、同時に複数の表示用Java Beanを設定するようにすることができる。例えば、図13の
ようにバナー用のJava Bean1302、メニュー用のJava Bean1303、コンテンツ用のJava Bean1304がユーザロジック1301で設定されると、それぞれのJava Beanに対応するJSPがそれぞれのJava Beanからデータを取得してそれぞれの表示画面を作成する。テンプレート1305にはJSPごとに表示位置が規定されているため、作成された各表示画面がテンプレート1305に基づいて配置され、出力HTML1306が出力される。
上述のように、本発明第1の実施例のシステムではHTTP(Hyper Text Transfer Protocol)リクエストをデータオブジェクトに変換して処理し、処理結果のデータオブジェクトをレスポンスに変換してクライアントに返す仕組みについて詳細に述べた。次に、同一の仕組みを利用して、XML(eXtensible Markup Language)ファイルを処理する本発明の第2の実施例のシステムについて述べる。図14、15にそのシステム構成を示す。
図14は、アプリケーションサーバがXMLファイルを受信したときにそのXMLファイルがロジック(ハンドラ)で処理されるまでを示す図であり、図15はロジック(ハンドラ)でそのXMLファイルの処理が終わり、クライアントへレスポンスが返されるまでを示す図である。
まず、図14において、サーバがXMLインスタンス1401を受信すると、そのXMLをXML Data Bindingエンジン1404で処理を行ってデータオブジェクト(Beanインスタンス1405)を作成する。この際、受け取ったXMLインスタンス1401からオブジェクトの種類を特定することができるため、種類の異なるXMLを同一エンジンで受け取ることができる。ここでは、オブジェクトの種類は、XMLマッピングファイル(不図示、後述)を利用して特定される。また、UJIエンジン1403は、コマンドマッピング1402を参照することによって、XMLのタグからロジック(ハンドラ)で実行すべき処理(メソッド)を決定する。
図15において、ロジック(ハンドラ)1501では、HTTPリクエストのときと全く同様にして送信用のデータオブジェクト(Beanインスタンス1502)が作成される。これが再び、XML Data Bindingエンジン1404でXMLに変換されて送信用XML1503が出力される。
尚、データオブジェクトを生成するXML Data Bindingエンジン1404は、ファクトリクラスから呼び出される。そのため、ファクトリクラスをBindingエンジンの種類毎に用意することで、柔軟に複数のBindingエンジンに対応することができる。
図16及び図17は図14及び図15に示したシステムの動作概要を示すものである。図16は、図14に対応し、アプリケーションサーバがXMLファイルを受信してからロジック(ハンドラ)で処理されるまでを示した図であり、図17は図15に対応し、ロジックで処理が終了してから、クライアントへレスポンスを返すまでを示した図である。
図16において、注文伝票1601、出荷伝票1602等のXMLファイルがアプリケーションサーバに対して送信される(実線矢印)と、それぞれの画面データがデータオブジェクトであるJava Bean1605に自動的に変換される(点線矢印)。また、UJI1603において、XMLマップファイル1606を利用してXMLインスタンスのオブジェクトの種類が特定され、XML Data Bindingエンジン1604で受信したXMLに対応するデータオブジェクトが作成される。またUJI1603で、XMLのタグとコマンドマッピング1607から、分岐すべき処理を処理1608、16
09、1610等の中から選択する。そして、選択された処理にデータオブジェクトを渡す。データオブジェクトが渡されると、選択された処理の内容に沿ってそのデータオブジェクトが処理される。
処理が終わると、図17において、処理結果であるJava Bean1701がUJI1603に渡される。このJava Bean1701は、XML Data Bindingエンジン1604で送信用XMLインスタンス1702に変換される。
このように第2の実施例のシステムでは受信したXMLをXML Data Bindingエンジンでデータオブジェクトに変換してからロジック(ハンドラ)に渡すので、HTTPリクエストの時と同じ処理を実現する場合、第1の実施例のシステムのロジック(ハンドラ)と同一のロジック(ハンドラ)のメソッドをそのまま利用することができる。
以上、本発明の第1及び第2の実施例のシステム構成、システム動作について詳細に説明したが、次にこれらの実施例に共通するシステムの動作の仕組みについて説明する。
本発明のシステムを構成するオブジェクトは、各々が処理されるときの時間軸上における相対的な位置関係に基づいてシステム、アプリケーション、セッション、リクエストの4段階の時間的スコープに分類することができる。図18(а)に示すように、システム1801は、システム全体で一つ存在するもので、アプリケーションサーバの起動からサーバの終了までをそのスコープとする。また、アプリケーション1802は、システム内の各アプリケーション毎に1つ存在し、アプリケーションの開始から終了までをそのスコープとする。セッション1803は、クライアント毎に一つずつ存在するもので、クライアントの接続から切断(またはタイムアウトなど)までをそのスコープとする。そして、リクエスト1804は、あるクライアントからの一回のリクエストにつき一つ存在するもので、クライアントからのリクエストを処理してレスポンスを返すまでをスコープとする。図18(b)に、各オブジェクト間の相関関係を示す。システム1801内に複数のアプリケーション1802が存在し、各アプリケーション1802に接続する複数のクライアントからのセッション1803が存在する。そして、クライアントからのリクエストは、予め用意されるハンドラ1805で処理される。尚、図18 (a)に示すリクエスト1804は、図18(b)の各オブジェクトが実行される際の1スレッドに対応する。
このようにシステムを構成するオブジェクトが段階的な時間的スコープを持つことによって、クライアントからのリクエストを処理する場合に、より大きなスコープを持つオブジェクトから小さなオブジェクトに分岐(dispatch)して処理を進めていくことができる。すなわち図19に示すように、フロントコンポーネント1901にクライアントからリクエストが送信されてくると、システムに一つ存在するディスパッチャ1902が対応するアプリケーション1903に処理を分岐する。更にアプリケーション1903は、リクエストを送信してきたクライアントに対応するセッション1904に処理を分岐し、セッション1904は、リクエストに対応するハンドラ1905に処理を分岐する。
本発明のシステムでは、クライアントからのリクエストをより大きなスコープから小さなスコープに分岐して処理していくため、アプリケーション、セッション、ハンドラの各オブジェクトをユーザ拡張可能またはユーザ定義可能としておくと次のような効果が得られる。(尚、本実施例のシステムでは、アプリケーション1903とセッション1904をユーザ拡張可能、フロントコンポーネント1901、表示用ページ1906、ハンドラ1905、コマンドマップ1909、ページマップ1910、ResponseBean1908及びRequestBean1911をユーザ定義可能として実装した。)
ユーザ拡張可能またはユーザ定義可能なオブジェクトに対して、SingleThreadModel 1
912というインタフェースを実装させると(図19(b))、そのオブジェクトの動作が同時に最大1スレッドまで制限される。この機能を利用すれば、それぞれのスコープの動作がスレッドセーフとなり、すなわち、例えば同一データ編集などのデータ処理は、同時に複数行わせないようにすることができる。このようにすることを「シングルスレッド動作制限」という。前述の「行き先掲示板」アプリケーション(図4)において、ユーザ変更とプロファイル編集は同一データを対象とするので、スレッドセーフにしておく必要がある。この場合、図20(а)に示すように実装すればよい。すなわち、メソッド:ユーザ変更2007、メソッド:プロファイル編集2008を含むハンドラ2004にSingleThreadModel インタフェースを実装させる。ここで、メソッド:ログイン処理2005、メソッド:ログアウト処理2006、メソッド:ユーザ登録、は特にスレッドセーフにしなくてよいため、ハンドラ2004’、2004’’にはSingleThreadModel インタフェースは実装させない。同様に、セッション、アプリケーションにおいても、スレッドセーフにしたい場合、SingleThreadModel インタフェースを実装させればよい(2002’、2003’)。SingleThreadModel インタフェースを実装する場合の記述の仕方は、図20(b)のようにすればよく、同図には、セッション2003’にSingleThreadModel インタフェースが実装された場合が示されている。
また、ユーザ拡張可能またはユーザ定義可能なオブジェクトである、アプリケーション、セッション、ハンドラオブジェクトに前処理(preprocessor)、後処理(postprocessor )インタフェースを実装させることができる。これにより、各オブジェクトの本番処理の実行の前後に処理を付け加えることができる。すなわち、図21のシーケンス図に示すように、クライアントのリクエストの本番処理(ハンドラメソッド)(図21の(2))の前処理(図21の(1))、後処理(図21の(3))を加えることができ、同様に、セッション(図21の(5))に対する前処理(図21の(4))、後処理(図21の(6))、アプリケーション(図21の(8))に対する前処理(図21の(7))、後処理(図21の(9))を追加することができる。
この機能を利用して、例えば前処理(図21の(1))では、ロジックのハンドラメソッドの本番処理(図21の(2))の前に予め状態管理による判断を行ってハンドラメソッドの処理をスキップするチェックルーチンを設けるようにすることが可能である。また、後処理(図21の(3))では、前処理(図21の(1))または本番処理(図21の(2))でエラーが出たときにそのエラーを回復させるためのエラーハンドリングを設けておくことができる。これらは、エラーが出なかったときでも、共通の後処理を記述するために利用することもできる。同様に、各セッションについて、1クライアントに対する共通の前処理、後処理を記述することができ、アプリケーションでは複数クライアントに対する共通の前処理、後処理を記述することができる。各前処理、後処理はそれぞれのスコープのオブジェクトに別々に実装することができるため、きめ細かい制御ができる。
以上のように、本発明のシステムの動作の仕組みを用いれば、スレッドセーフを実現させたり、各スコープにおける処理に前処理、後処理を追加することで処理の前判断やエラー処理が柔軟に行なえるようになるという効果を得ることができる。
次に、本発明のアプリケーションサーバにおけるロジックのハンドラからブラウザにリクエストを行うための仕組みについて説明する。
Webアプリケーションでは、例えば、処理Aのリクエストがクライアントから送られてきたが、何らかのことが起こったために、処理Aを続行するか否かをユーザ(クライアント)に問い合わせ、その回答に基づいて処理Aを続行するか若しくは異なる処理を行うようにするという場合がある。このように、処理の途中でユーザ(クライアント)に問い合わせが行なわれ、この問い合わせの結果に基づいて処理を行っていく場合、一般のWe
bアプリケーションシステムでは、図22(а)に示すようなシーケンスで行っている。処理Aのリクエスト(図22(а)の(1))がサーバに送信されると、サーバではそれを受信し、ハンドラ1が処理を始める。すると、処理Aは全て終了していないが、ユーザに処理Aを続行するかどうか質問する(図22(а)の(2))。クライアントには、2701のような画面が表示され、ユーザが「はい」「いいえ」の何れかの回答を返す(図22(а)の(3))。それに基づき、ハンドラ2が処理を始める。
このように、一般のWebアプリケーションでは、処理Aが全て完了していなくてもハンドラの処理を中断しなくてはならない場合がある。また、ユーザの回答が「はい」、「いいえ」などの場合、何の質問に対する「はい」、「いいえ」なのかを規定した中間処理のためのマッピング定義が必要である。
そこで、本発明のシステムに、以下に述べるようなアプリケーションサーバにおけるロジックのハンドラからブラウザにリクエストを行う仕組みを導入し、一般のWebアプリケーションシステムを改善した。
図23(а)に示すように、本発明のシステムでは、サーバにおいて、ハンドラ呼び出し前にスレッド緩衝オブジェクト(シンクロナイザ)を設け、ハンドラの動作を監視するようにする。これにより、処理Aのリクエスト(図23(а)の(1))がサーバに送信されると、サーバではシンクロナイザが受信し、ハンドラ1に渡され(図23(а)の(2))、ハンドラ1が起動して処理が始まる。そこで、処理Aが全て終了していないが、ユーザに処理Aを続行するかどうか質問をする場合、ハンドラ1はクライアントにコールバックするメソッドを呼び出す(図23(а)の(3))。シンクロナイザでは、ハンドラのメソッドを、ブラウザ(クライアント)への返り値として返す(図23(а)の(4))。クライアントには、2201のような画面が表示され、ユーザが「はい」「いいえ」の何れかの回答を返す(図23(а)の(5))。それがシンクロナイザに受信され、ハンドラ1に渡される(図23(а)の(6))。この後、ハンドラ1は、処理を継続する。このように、スレッド緩衝オブジェクトが設けられることで、ハンドラの処理を中断させる必要がなくなる。また、サーバを実現するためのプログラムの記述においても、一般的なWebアプリケーションでは図22(b)に示すように、ハンドラ1、ハンドラ1の返り値に対するイベントを受けるハンドラ2などを記載しなくてはならないのに対し、本発明では図23(b)(c)に示すように、一つのハンドラ内に条件分岐文で記述することができるため、プログラム記述的に非常に容易である。
なお、以上までに説明した本発明の実施例では、クライアントからの入力としてHTTP、XML等を対象としたが、クライアントからリクエストであればどのようなものでもよく、また、これらの本発明の実施例では、クライアントのリクエストをJava Beanというデータオブジェクトに変換したが、他のデータオブジェクトでもよい。
以上までに説明した実施例に係る発明は、クライアントからの入力をデータオブジェクトに変換し、それを処理し、処理結果として得られるデータオブジェクトをクライアントへのレスポンスに変換して送信することを特徴とするものであり、また、サーバにおける処理を時間的スコープに分類し、スコープの大きなものから小さなものに分岐して処理を進めることを特徴とするものである。
次に、本発明の更なる実施例について説明する。
これより説明する実施例は、Webアプリケーションを実行するアプリケーションサーバを開発する際に、画面の見かけの定義(ビュー)とその画面中に埋め込まれるデータとを分離して実装するようにして、Webアプリケーションの開発効率と保守性とを共に向
上させるものである。
この実施例では、Webアプリケーションにおける表示部を、表示データオブジェクトと、画面の見かけ(ビュー)の定義とに分けて用意する。このとき、表示データオブジェクトは、表示データ自体を有し、テーブル(表)構造や木構造などのデータ構造(本実施例ではこのデータ構造を「モデル」と称することとする)を表すインタフェースであってその表示データについてのものを実装した構造体クラスとして作成する。また、ビューの定義は、この実施例においてはJSP(Java Server Pages )を用いて記述する(ビューの定義は、単にHTMLで記述するようにしてもよい)。
この表示データオブジェクトとビューの定義とがサーバにおいて実行されると、上述したインタフェースに対応する実行エンジンによって表示データを画面の所定位置に割り当てる(アサインする)HTML文が生成される。その後、このHTML文がクライアントに送付されると、クライアントの備えるWebブラウザによって対応する画面表示が行なわれる。
なお、これより説明する上述した実施例を、既に説明した他の実施例と区別するために、「第3の実施例」と称することとする。
まず図24について説明する。同図は、本発明の第3の実施例のシステム構成を示している。
モデルオブジェクト3001は、サーバ側に設けられているデータベースなどのバックエンドから取得されるクライアントに表示すべきデータを保持し、また、クライアントから送付されたデータをバックエンドに渡すために保持するオブジェクトであり、後述するモデルインタフェース3002を実装する。なお、モデルオブジェクト3001は、表示用モデルオブジェクト3001aと入力用モデルオブジェクト3001bとして別々に設けることも可能であり、また、表示用と入力用とを共用する単一のモデルオブジェクト3001として設けることも可能である。
モデルインタフェース3002は、特定のモデルの構造を表すインタフェースであり、例えば、テーブル構造についてはテーブルモデル用、木構造についてはツリーモデル用などというように、対象とするデータ構造に応じたインタフェースが用意される。
フレームワークエンジン3003は、表示用モデルオブジェクト3001aに実装されているモデルインタフェース3002に基づいて、表示用モデルオブジェクト3001aに保持されているデータを取り出し、表示用JSP3004の定義に従ってHTML文を生成する。また、ブラウザ3005に対して入力されたデータを解析して入力用モデルオブジェクト3001bに渡す。
表示用JSP3004は表示データをHTMLで表現するときの画面の見かけ(ビュー)が定義されているものであり、独自のタグを導入したJSPで記述される。
ブラウザ3005はクライアントに装備され、表示用JSP3004の定義に基づいてフレームワークエンジン3003で生成されたHTMLに従った画面表示をで行なうものである。
フロントコンポーネント3006は、ブラウザ3005から発せられるリクエストを受け付けてフレームワークエンジン3003に渡すものであり、例えばJSPコンポーネントあるいはサーブレットなどを利用するが、HTTPリクエストを受信し、その受信内容
に応じたフレームワークエンジン3003を呼び出すことができるものであればどのようなものでもよい。
次に、図24のモデルインタフェース3002について、テーブル構造のモデルを表すテーブルモデルインタフェースを例に挙げて更に詳細に説明する。
図25は、テーブルモデルインタフェースの宣言例を示す図である。この例では、大きく分けてデータ取得のためのメソッド、データクラスの取得のためのメソッド、及びデータの(バックエンドへの)代入のためのメソッドでテーブルモデルインタフェースが定義されている。
これらのメソッドについて更に説明すると、データ取得のためのメソッドとしてはテーブルの列数を取得するメソッド(getColumnCount)、テーブルの行数を取得するメソッド(getRowCount )、及びテーブルの各セルのデータを取得するメソッド(getValueAt)が図25の定義に用いられている。
データクラスの取得のためのメソッドとしては、列及び行の各々について定義される「クラス」を特定する文字列を各々取得するメソッド(getColumnClass及びgetRowClass )が図25の定義に用いられている。この「クラス」とは、各列若しくは各行に属するデータについての表示方法(例えば表示位置やフォントの大きさといった書式等)の様式をそれぞれ定義するために使用されるものであり、これは後述するレンダラタグの”cls” 属性を示すものである。
データの代入のためのメソッド(setValueAt)は、このテーブルモデルに対応するモデルアップデートの処理(後述)により呼び出されることによって、このテーブルモデルで示されるデータ構造に依存したデータ形式でクライアントからのリクエストの内容(セルの値及びそのセルのテーブル上の位置)がバックエンドに渡される。
次に、本発明の第3の実施例においてHTML文が生成される様子を、図26を用いて説明する。同図は、図24に示すテーブルモデル用のフレームワークエンジン3003に図25に示す宣言がなされているテーブルモデルインターフェースを実現する表示用のモデルオブジェクト3001a(A)を与えると、フレームワークエンジン3003が、表示用JSP3004に相当するJSPソース(B)に基づいて生成HTML文(C)を生成することを示している。なお、説明の便宜のため、図26(B)及び図26(C)の各行頭には行番号を付している。
図26の(B)JSPソースについて説明する。
図26(B)において、第1行はこのJSPソースとモデルオブジェクト(A)との対応関係を指定するものである。
第1行を更に説明すると、“id=...”には対応するモデルオブジェクトがこのJSPソース内において参照されるときの名称が指定され、“cls=... ”はこのJSPソースと対応するモデルオブジェクトのクラス名が指定される。
また、第1行において、“request=... ”にはモデルオブジェクト(A)のフレームワークエンジン3003内での生存期間が指定される。これは、生成HTML文(C)をクライアントに送付してブラウザ3005に画面表示を行なわせた後に、このモデルオブジェクトに応じたリクエストがクライアントから返信される場合を考慮したものである。すなわち、trueが指定されているときには、このようなリクエストの内容を直ちにモデルオ
ブジェクトに代入できるようにするために、HTML文の生成後もモデルオブジェクト(A)がフレームワークエンジン3003内の記憶領域に保持される。一方、false が指定されているときには、HTML文の生成後はモデルオブジェクト(A)のフレームワークエンジン3003内の記憶領域で保持されない。
図26(B)の第2行目以降は、テーブルモデルを表示するための画面の見かけの定義がタグを用いてなされている部分であり、この部分は「ビュー」と総称されている。
ビューの記述はビュータグを用いて行なわれる。第2行目にはテーブルモデルのためのビュータグの開始タグが示されており(<uomf:table >)、この第2行目と第18行目のテーブルモデル用ビュータグの終了タグ(</uomf:table>)との間に幾つかのテーブル用のレンダラが記述される。
レンダラとは、指定の表示場所でのデータの表示にどのような表示方法を用いるかを定義するものである。図26(B)の第3行目から第17行目にかけての記述では、テーブルモデルのためのレンダラの定義が(a)から(e)の計5つなされている。これらのテーブルレンダラの定義を簡単に説明すると、(a)はテーブルタグ(<table> 及び</table>)を生成させるためのもの、(b)はテーブルの行の表示方式を定義するもの、(c)はテーブルにおける通常の列の表示方式を定義するもの、(d)はテーブルにおける各列の見出しが示されるセル(ヘッダセル)の表示方式を定義するもの、(e)はテーブルにおけるデータ入力(データ更新)の可能なセルについての表示方式を定義するものである。
各レンダラには、テーブルモデル用レンダラタグの開始タグ(<uomf:tableRenderer>)がその最初の行に記述され、これに対応する終了タグ(</uomf:tableRenderer> )がその最後の行に記述される。そして、このレンダラタグの開始タグと終了タグとに挟まれた行の記述によってデータの表示方法が定義される。このデータの表示方法についての定義を構成する個々の要素をレンダラエレメントと称している。
レンダラタグでは“type”と“cls ”とについての指定がなされる。これらは、レンダラに定義された表示方法で表示を行なう画面上の場所を特定するためのものである。これらの指定内容は扱うモデルの種類によって予め指定される。
“type”には、本実施の形態におけるテーブルモデルでは、table (表全体)、row (行)、column(列)のいずれかが指定され、これらによりレンダラに定義された表示方法で表示を行なうテーブルの場所が特定される。
“cls ”は、本実施の形態におけるテーブルモデルでは、上述した“type”がrow 又はcolumnに指定されているときに指定が可能である(指定のないこともある)。これは、前述したテーブルモデルインタフェースの宣言例(図25)におけるgetRowClass 及びgetColumnClassの両メソッドと連動しているものであり、例えば列の表示を行なう際にはテーブルモデルインタフェースのgetColumnClassメソッドが呼び出される。そして、ビューのレンダラの定義が参照され、“type”がcolumnであって、“cls ”が呼び出されたメソッドについての戻り値に対応しているレンダラでの表示方法の定義が、その列の表示のための表示方法としてHTML文の生成に使用される。なお、呼び出されたメソッドについての戻り値が無い(ヌルである)ときには“cls ”の指定のないレンダラについての表示方法の定義が使用される。
“cls ”は、本実施の形態におけるテーブルモデルでは、具体的にはheader若しくはeditableが指定される。
レンダラにおける表示方法の定義は周知のHTMLのタグを用いて記述されるが、ここにレンダラエレメントタグという特殊なタグを導入する。図26(B)においては、<uomf:children> 及び<uomf:value>がレンダラエレメントタグである。<uomf:children> は、このタグの位置に他のレンダラでの表示方法の定義を展開する動作をフレームワークエンジンに行なわせ、<uomf:value>は、このタグの位置にモデルインタフェースから取得した値(表示データ)を表示させるようにする動作をフレームワークエンジンに行なわせる。
これらのタグのより詳細な動作は扱うモデルの種類によって予め規定される。本実施の形態におけるテーブルモデルでは、<uomf:children> は、前述したレンダラタグにおける“type”の指定がtable (表全体)であるときにこのタグが出現したときには行についてのレンダラ(“type”の指定がrow であるレンダラ)で定義されている表示方式をこの位置に展開して挿入し、“type”の指定がrow (行)であるレンダラでこのタグが出現したときには列についてのレンダラ(“type”の指定がcolumnであるレンダラ)で定義されている表示方式をこの位置に展開して挿入することが規定されている。また、<uomf:value>は、“type”の指定がcolumnであるレンダラにおいてのみ使用可能であり、テーブルモデルインタフェースの宣言例(図25)で使用されているgetValueAtメソッドによって取得される値をこの位置に挿入することが規定されている。
以下、図26を参照しながら、フレームワークエンジンによって(C)の生成HTML文が生成される様子を説明する。
まず、フレームワークエンジンは(A)のモデルオブジェクトがテーブルモデルインタフェースを実装していることを認識し、テーブルモデル用のフレームワークエンジンを起動する。そして、このテーブルモデルインタフェースのgetColumnCount及びgetRowCount の両メソッドが呼び出され、表示するテーブルの列数及び行数が認識される。この結果、ここでは3行3列のテーブルを表示されることが認識される。
次に、(B)のJSPソースにおいて、“type”がtable に指定されている(a)のテーブルレンダラの定義がまず参照され、(C)の生成HTML文の第1行目が生成される。
ここで、(a)のテーブルレンダラの定義((B)の第4行目)にはレンダラエレメントタグ<uomf:children> が記述されており、(a)のレンダラタグにおける“type”はtable に指定されているので、行についてのテーブルレンダラ、すなわち(B)のJSPソースにおける(b)のテーブルレンダラの定義の展開が行なわれ、(C)の生成HTML文の第2行目が生成される。
ここで、(b)のテーブルレンダラの定義((B)の第7行目)にもレンダラエレメントタグ<uomf:children> が記述されており、(b)のレンダラタグにおける“type”はrow に指定されているので、列についてのテーブルレンダラの定義の展開が行なわれる。但し、(B)のJSPソースには、(c)、(d)、(e)という列についてのテーブルレンダラ(“type”の指定がcolumnであるレンダラ)が3つ記述されているので、これらのうちのどのテーブルレンダラの定義の展開を行なうかが問題となる。
このとき、フレームワークエンジンでは、(A)のモデルオブジェクトから、表示させるテーブルの1行目の各列のセルの値の取得、及びテーブルモデルインタフェースのgetColumnClassメソッドの呼び出しも行なわれている。これらの処理により、ここで取得されたセルの値は、“品名”、“単価”、“個数”という3つの文字列データであり、呼び出されたメソッドについての戻り値はこれら3つのいずれの値についてもheaderであった。
そこで、フレームワークエンジンは、このメソッドについての戻り値に基づき、(B)のJSPソースにおける(d)のテーブルレンダラの定義が選択され、その定義の展開を実行する。その結果、表示させるテーブルの1行目の表示方式を示すHTML文((C)の生成HTML文の第3、第4、第5行目)が、(d)のテーブルレンダラの定義内容((B)の第13行目)に基づいて生成される。ここで、(d)のテーブルレンダラの定義にはレンダラエレメントタグ<uomf:value>が含まれているので、この部分にはモデルオブジェクトから取得された各セルの値が挿入される。
ここまでで、先に行なった(b)のテーブルレンダラの定義((B)の第7行目)におけるレンダラエレメントタグ<uomf:children> についての展開が完了し、そのタグに続く次の定義の記述に基づいて(C)の生成HTML文の第6行目が生成され、テーブルの1行目の表示のためのHTML文の生成が完了する。
次に、テーブルの2行目の表示のためのHTML文の生成が開始され、行についてのテーブルレンダラ、すなわち(B)のJSPソースにおける(b)のテーブルレンダラの定義の再度の展開が行なわれ、(C)の生成HTML文の第7行目が生成される。
ここで、前回と同様に(b)のテーブルレンダラの定義にレンダラエレメントタグ<uomf:children> の列についてのテーブルレンダラの定義への展開が行なわれる。
このとき、フレームワークエンジンでは、(A)のモデルオブジェクトから、表示させるテーブルの2行目の各列のセルの値の取得、及びテーブルモデルインタフェースのgetColumnClassメソッドの呼び出しも行なわれ、これらの処理により、ここで取得されたセルの値は、“XV−5080”、“198,000”、“”(ヌル)という3つのデータであり、呼び出されたメソッドについての戻り値は、最初の2つのセルについての値はヌルデータであり、最後のセルについての値はeditableであった。
そこで、フレームワークエンジンは、最初の2つのセルについてのこのメソッドの戻り値に基づき、(B)のJSPソースにおける(c)のテーブルレンダラの定義の展開を実行する。その結果、表示させるテーブルの2行1列目及び2行2列目の表示方式を示すHTML文((C)の生成HTML文の第8及び第9行目)が、(c)のテーブルレンダラの定義内容((B)の第10行目)に基づいて生成される。ここで、(c)のテーブルレンダラの定義にもレンダラエレメントタグ<uomf:value>が含まれているので、この部分にはモデルオブジェクトから取得された各セルの値が挿入される。
更に、フレームワークエンジンは、上述した最後のセルについてのこのメソッドの戻り値に基づき、(B)のJSPソースにおける(e)のテーブルレンダラの定義の展開を実行する。その結果、表示させるテーブルの2行3列目の表示方式を示すHTML文((C)の生成HTML文の第10行目)が、(e)のテーブルレンダラの定義内容((B)の第16行目)に基づいて生成される。
ここまでで、先に行なった(b)のテーブルレンダラの定義((B)の第7行目)におけるレンダラエレメントタグ<uomf:children> についての展開が完了し、そのタグに続く次の定義の記述に基づいて(C)の生成HTML文の第11行目が生成され、テーブルの2行目の表示のためのHTML文の生成が完了する。
(C)の生成HTML文の第12行目から第16行目まで(テーブルの3行目の表示のためのHTML文)が生成される流れは、上述したテーブルの2行目の表示のためのHTML文((C)の生成HTML文の第7行目から第11行目まで)と同様である。
ここまでで、先に行なった(a)のテーブルレンダラの定義((B)の第4行目)におけるレンダラエレメントタグ<uomf:children> についての展開が完了し、そのタグに続く次の定義の記述に基づいて(C)の生成HTML文の第17行目が生成される。こうして、(C)に示すテーブルの表示のためのHTML文の生成が完了する。
なお、前述したように、生成されたHTML文はクライアントに宛てて送出される。この後、このHTML文に対応するリクエストがクライアントから送付されてきたときにそのリクエストがどのモデルオブジェクトについてのものであるかを容易に特定できるようにするために、ブラウザによって入力フィールドがクライアントで表示されない、いわゆるhidden属性のinputタグ(<input type=hidden>)がこの生成されたHTML文に追加されて送出される。このinputタグには、モデルの種類を示す文字列とHTML文の生成に用いられたビュー毎に一意なID(識別子)とが記述されるようにして、これらのデータがそのリクエストに自動的に含まれるようにする。
図24に示すテーブルモデル用のフレームワークエンジン3003が、ブラウザ3005によってクライアントにテーブルを表示させるためのHTML文を生成する、以上までに説明した処理を、図27、図28、及び図29に示すフローチャートに沿って更に説明する。なお、この処理を「表示時の処理」と称することとする。
フレームワークエンジン3003は、まず、表示用JSP3004を読み込み、表示用JSP3004に含まれているビュータグを検出する。続いてそのビュータグによって示されているビューに含まれている各レンダラを、レンダラタグで指定されている“type”及び“cls ”に基づいて分類してバッファの所定の場所に登録する。更に、この登録を終えた後に、フレームワークエンジン3003は、ビュータグに指定されているモデルオブジェクト3001からデータを取得しながら図27、図28、及び図29に示すフローチャートに沿った処理を開始する。なお、ここまでの処理を「ビュータグの解析処理」と総称することとする。
図27には、テーブルモデル用のフレームワークエンジン3003によって行なわれる表示時の制御処理の全体フローが示されている。
図27に示す処理が開始されると、まず、ビューの一意IDが生成される(S3101)。ビューの一意IDは、前述したように、HTML文の生成に用いられる表示用JSP3004のビュー毎に一意なIDであり、例えば“uji.model.00001”などのように、共通のプレフィックス(接頭辞)(“uji.model.”の部分)とHTML文生成の度に異なる連番の数字(“00001”の部分)とを組み合わせたものを生成するようにすればよい。このビュー毎に異なる一意なIDは、複数のモデルオブジェクトについての表示がクライアントで行なわれ、それらの各々についてのリクエストをサーバが受け取ったときに、受け取ったリクエストがそれぞれどのモデルオブジェクトについてのものであるかを識別できるようにするために用いられるものであり、クライアントではモデルオブジェクトに対応するIDを含んだリクエストが生成される。
続いて、前述した処理によってフレームワークエンジン3003の有するバッファに登録されている各レンダラから、“type”がtable に指定されているものが取得される(S3102)。
その後、レベルをtable とし、子レベルをrow としたときのレンダラ表示処理が実行される(S3103)。レンダラ表示処理は図28にフローチャートで示した処理であり、その詳細は後述する。
上述したS3103の処理によってテーブルを表示させるためのHTML文が生成される。そこで、フレームワークエンジン3003は、前述したhidden属性のinputタグを生成してこのHTML文に追加する(S3104)。ここで生成されるinputタグは例えば下記のようなものとする。
<input type=hidden name=”uji.model” value=”uji.model.00001”>
<input type=hidden name=”uji.model.00001” value=”table”>
ここで、“uji.model.00001”は先に生成されたビューの一意IDの例である。これらのinputタグがHTML文に追加されることによって、このHTML文に対応するリクエストにこれらの情報が含まれるようになり、リクエストとモデルオブジェクト3001との対応関係が明らかになる。
次に、図27のS3103において実行される、図28にフローチャートで示すレンダラ表示処理について説明する。
なお、以降の説明及び図面においては、今までに用いていたレンダラエレメントタグの表記(例えば<umof:children> )に加え、uomf: の接頭辞を略した表記(例えば<children>)も併用することとする。
まず、このレンダラ表示処理が呼び出されたときのレベルが何であったかが調べられ、このレベルが“type”に指定されているレンダラにおける表示方式を定義している要素が未だ残されているか否かが判定され(S3201)、判定結果がYesならば、次の要素(レンダラエレメント)がひとつ取得され(S3202)、S3203に処理が進む。一方、S3201の判定結果がNoならばこのレンダラ表示処理が終了し、元の処理へ戻る。
続いて、S3202の処理によって取得された要素がどのようなものであるかが判定される(S3203、S3206、S3208、S3210)。
この結果、取得された要素がビュータグであるならば(S3203の判定結果がYes)、前述したビュータグの解析処理がこのビュータグに対して行なわれ(S3204)、その後、前述した図27の処理をこのビュータグについて実行し(S3205)、この処理の終了後はS3201へ処理が戻る。
このS3204及びS3205の処理は、あるビューの記述中に別のビューの記述がなされている(ビューがネストしている)ときに行なわれるものであり、例えば、テーブルモデルのあるセル中に更に別のモデルが存在するような場合に対応させるためのものである。
S3202の処理によって取得された要素が<children>のレンダラエレメントタグであるならば(S3206の判定結果がYes)、このレンダラ表示処理が呼び出されたときの子レベルが何であったかが調べられ、この子レベルについての表示処理が実行され(S3207)、この処理の終了後はS3201へ処理が戻る。子レベルがrow であるときの表示処理は図29(A)にフローチャートで示されており、子レベルがcolumnであるときの表示処理は図29(B)にフローチャートで示されている。これらの表示処理は後で説明する。
また、S3202の処理によって取得された要素が<name>のレンダラエレメントタグであるならば(S3208の判定結果がYes)、後にリクエストにおいて使用される要素に名前付けを行なう処理が実行され(S3209)、この処理の終了後はS3201へ処
理が戻る。
ここで、<name>のレンダラエレメントタグについて説明する。このタグは、所定の規則に従った名前をフレームワークエンジンに生成させるものである。
本実施例においては、この名前は図30の(A)に示す規則に従って生成される。ここで、モデル固有位置とは、あるモデルでの自己の位置を一意に表すための文字列であり、例えば、テーブルモデルにおいて2行3列目を表すのであれば、“2_3”などというように文字列を生成すればよい。このとき、前述したビューの一意IDの生成例(“uji.model.00001”)をそのまま流用すれば、このときに<name>のレンダラエレメントタグに応じて生成される名前は図30の(B)のようになる。
このような規則による名前付けを行うことにより、この名前からモデルオブジェクト及びそのモデルにおける位置を特定することができる。
<name>のレンダラエレメントタグを使用したレンダラの定義例を図31に示す。同図に示す定義の記述を説明すると、<uomf:value/> によってモデルオブジェクトから取得された値が更新前の値としてテーブル中の更新可能なセルに挿入されてクライアントで表示される。ここで、このセルの値がクライアントにおいて更新されるとリクエストが送信される。このリクエストでは、<uomf:name/>で生成される名前が更新後のセルの値を参照するための参照名として用いられる。こうすることによって、テーブルモデルエンジンでは、前述した名前付けの規則により、モデルオブジェクト及びそのモデルにおける位置をこの参照名から特定することができるので、クライアントで生成するひとつのリクエスト中に複数の更新データを含ませるようにすることもでき、更に、異なるモデルオブジェクトについての複数の更新データをひとつのリクエストに含ませることもできる。
また、前述したような、ネストしているビューの中に<uomf:name> のレンダラエレメントタグが記述されている場合には、図30の(C)に示す例のように、ネストの外側で生成される名前(例えば図30の(B)に示される名前)をプレフィックスとしたものに連番の数字等を組み合わせて前述のビュー一意IDを生成し、そのビュー一意IDにそのネストしているビューにおけるモデル固有位置を組み合わせたものをレンダラエレメントタグについての名前として生成するようにする。この名前付けの規則により、生成された名前から、ネストの存在及びビューの継承関係を認識すること、及びそのネストに係るモデルを特定することができる。
図28の説明に戻る。
S3202の判定処理によって取得された要素が<value> のレンダラエレメントタグであるならば(S3210の判定結果がYes)、このテーブルモデルにおける現在の位置に対応する値がモデルオブジェクトから取得され(S3211)、この後にS3201へ処理が戻る。
一方、S3202の判定処理によって取得された要素が上述したいずれのタグともことなるものであるならば(S3203、S3206、S3208、S3210の判定結果が全てNo)、この取得された要素が生成HTML文にそのまま表示され(S3212)、この後にS3201へ処理が戻る。
以上までの処理がレンダラ表示処理である。
次に、上述したレンダラ表示処理のS3207において実行される、子レベルについて
の表示処理を説明する。前述したように子レベルがrow であるときの表示処理は図29(A)にフローチャートで示されており、子レベルがcolumnであるときの表示処理は図29(B)にフローチャートで示されている。
まず、図29(A)のフローチャートを説明する。
まず、変数rowの値が0とされ、この変数rowの値がgetRowCount()メソッドの戻り値(すなわちテーブルの行数)を超えるまでS3302からS3304までの処理が繰り返される(S3301)。
続いて、モデルオブジェクト3001から、変数rowの値で示される行についての行クラス(getRowClass())が取得される(S3302)。
次に、フレームワークエンジン3003の有するバッファに登録されている各レンダラより、取得された行クラスが“cls ”に指定されており、且つ、“type”がrow に指定されているレンダラが取得される(S3303)。
ここで、レベルをrow とし、子レベルをcolumnとしたときのレンダラ表示処理が実行される(S3304)。ここで実行されるレンダラ処理は、既に説明した、図28に示されているものである。
その後、変数rowの値に1を加算した結果の値が改めて変数rowに代入され、S3301へ処理が戻る(S3305)。変数rowの値が前述した条件に達したならばこの処理が終了し、元の処理へ戻る。
次に、図29(B)のフローチャートを説明する。この処理は、基本的には上述した図29(A)と同様の処理が実行される。
まず、変数columnの値が0とされ、この変数columnの値がgetcolumnCount()メソッドの戻り値(すなわちテーブルの列数)を超えるまでS3402からS3404までの処理が繰り返される(S3401)。
続いて、モデルオブジェクト3001から、変数rowの値で示される行についての列クラス(getColumnClass())が取得される(S3402)。
次に、フレームワークエンジン3003の有するバッファに登録されている各レンダラより、取得された列クラスが“cls ”に指定されており、且つ、“type”がcolumnに指定されているレンダラが取得される(S3403)。
ここで、レベルをcolumnとし、子レベルを無し(ヌル)としたときのレンダラ表示処理が実行される(S3404)。ここで実行されるレンダラ処理も、既に説明した、図28に示されているものである。
その後、変数columnの値に1を加算した結果の値が改めて変数columnに代入され、S3401へ処理が戻る(S3405)。変数columnの値が前述した条件に達したならばこの処理が終了し、元の処理へ戻る。
以上までの処理が表示処理である。
なお、この表示処理が終了した後に、フレームワークエンジン3003は、表示用JS
P3004のJSPソースとモデルオブジェクト3001との対応関係が示されている記述(図26(B)の例では第1行目)を参照し、図32に示す記憶領域管理処理を実行する。すなわち、この記述でrequest がtrueに設定されているか否かが判定され(S3501)、この判定結果がYesならば、フレームワークエンジン3003の有する記憶部に保持されているモデルオブジェクト3001の内容をその後も継続し(S3502)、この判定結果がNoならば、フレームワークエンジン3003の有する記憶部におけるモデルオブジェクト3001の記憶領域を解放する(S3503)。
次に、図24に示すシステムにおいて、ブラウザ3005から発せられるリクエストをフレームワークエンジン3003が受け取ってモデルオブジェクト3001を更新する動作について説明する。なお、この動作を「リクエスト時の動作」と称することとする。
図33は、図24に示すシステムにおけるリクエスト時の動作の概要を説明する図である。
まず、フレームワークエンジン3003により生成された、通常の(hidden属性でない)<input> タグを含むHTML文をクライアントが受け取り、クライアントに装備されているブラウザ3005がそのHTML文に基づいてテーブルを表示させている。ここで、この<input> タグに対応するデータがクライアントに入力されると、ブラウザ3005はこのデータを含むHTTPによるリクエストをサーバ側に送信する。
サーバのフロントコンポーネント3006は、このHTTPリクエストを受信すると、フレームワークエンジン3003を起動させるための指示を与え、リクエストをフレームワークエンジン3003に渡す。
フレームワークエンジン3003では、まず、受け取ったリクエストがどのモデルについてのものかを判断する。この判断は、前述したhidden属性の<input> タグの作用によってリクエストに含まれるモデルの種類についての情報を利用する。ここで、例えば、このリクエストがテーブルモデルについてのものであると判断されれば、テーブルモデル用のエンジンが選択されて起動される。
続いて、フレームワークエンジン3003は、同じくhidden属性の<input> タグの作用によってリクエストに含まれることとなる、ビューの一意IDから、このリクエストに含まれるデータを代入すべきモデルオブジェクト3001を特定する。
そして、特定されたモデルオブジェクト3001がフレームワークエンジン3003内の記憶領域に保持されていればその保持されているものに対してリクエストに含まれていたデータを代入し、保持されていなければ、モデルオブジェクト3001を改めて生成してそのデータの代入を行なう。
なお、モデルオブジェクト3001へデータを代入するには、その代入すべきデータをモデルに応じた更新メソッドに変換し、モデルオブジェクトを更新させるインタフェースメソッド(例えば図25に示したテーブルモデルインタフェース3002を更新するのであれば、setValueAtメソッド)を呼び出すことにより、モデルオブジェクト3001の更新を行うようにすればよい。
フレームワークエンジン3003で行なわれる、上述したリクエスト時の制御処理の処理内容を図34にフローチャートで示す。
図34では、この制御処理の全体フローを(A)として示し、この制御処理の途中で実
行されるテーブルモデル用のモデルアップデート処理を(B)として示している。
クライアントのブラウザ3005で生成された、前述した表示処理によって生成されたHTML文に基づく表示に応じて入力されたデータを含むリクエストには、前述した名前付けの規則に基づくそのデータの参照名が示されていることは既に説明した。そこで、フレームワークエンジン3003は、リクエストを受け取ると、まず、そのリクエストに含まれているその参照名を全て取り出す。そして、取り出された参照名のうちのひとつが変数keyに代入される(S3601)。
ここで、この変数keyの値が、フレームワークエンジン3003で扱えるモデルを表すものであるか否かが判定され(S3602)、この判定結果がYesならば、続いてその変数keyに対応するモデルオブジェクト3001がフレームワークエンジン3003の有する記憶部に保持されているか否かが判定される(S3603)。
このS3603の判定結果がYesならば、その記憶部に保持されているモデルオブジェクト3001が取得され(S3604)、このS3603の判定結果がNoならば、改めてモデルオブジェクト3001が作成される(S3605)。そして、このモデルオブジェクト3001に対してモデルアップデート処理が施される(S3606)。
モデルアップデート処理を完了した後、若しくはS3602の判定結果がNoであったときには、リクエストから取り出されている別の参照名が変数keyに設定され、その後、上述したS3602からS3606までの処理が取り出された全ての参照名について行なわれるまで、処理が繰り返される(S3607)。
次に、上述したS3606の処理において実行される、図34(B)に示すテーブルモデル用のモデルアップデート処理について説明する。
まず、変数keyの値(すなわち、リクエストに含まれる更新データの参照名)が分解され、その名前を構成している前述したモデル固有位置から、テーブルモデル上の行(row )及び列(column)の位置が取得される(S3701)。
そして、モデルオブジェクト3001のsetValueAt()メソッドが呼び出され、取得されたテーブルモデルの行と列との位置、及びこの参照名により参照される更新データの値がそのメソッドに渡されることにより、モデルオブジェクト3001が更新され(S3702)、その後は図34(A)に処理が戻る。
以上までの処理をフレームワークエンジン3003が実行することによって、ブラウザ3005から発せられるリクエストに基づいたモデルオブジェクト3001の更新が行なわれる。
以上までに説明した本発明の第3の実施例を実施するクライアントサーバシステムの例を図35に示す。
サーバ3010は、モデルフレームワーク処理部3011、Webサーバ部3012、バックエンド3013を備える。
モデルフレームワーク処理部3011は、図24におけるフレームワークエンジン3003に相当する機能を実行する。
Webサーバ部3012は、モデルフレームワーク処理部3011で生成されたHTM
L文をクライアント(3020a、3020b、3020c、…)に送る機能と、クライアント(3020a、3020b、3020c、…)からの陸エンストを受け付けてモデルフレームワーク処理部3011に渡すフロントコンポーネント3006に相当する機能とを実行する。
バックエンド3013は、データベース3014に蓄積されているデータの操作を行ない、モデルオブジェクト3001を使用してモデルフレームワーク処理部3011とデータの授受を行なう。
クライアント(3020a、3020b、3020c、…)はブラウザ3005を装備し、サーバ3010から送られてくるHTML文に基づいた画面の表示、及び、その表示画面に含まれている入力フォームへの入力に対応するリクエストの生成及びサーバ3010へ宛てての送信を行なうものである。
次に、本発明の更なる実施例について説明する。
これより説明する実施例は、Webアプリケーションを開発する際に、ロジックである処理スクリプトの定義を呼び出す記述を画面の見かけを定義するモジュールには直接記述せずに利用可能とするものであり、処理スクリプトの定義によって表現されるロジックの部品化が可能となり、ロジックと画面定義との分離が進むことによって、ロジックの再利用性を高めてWebアプリケーションの開発効率を向上させるというものである。
なお、これより説明する上述した実施例を、既に説明した他の実施例と区別するために、「第4の実施例」と称することとする。
まず、図36について説明する。同図は本発明の第4の実施例によってスクリプトが生成される様子を示しており、(A)に示す記述文に対して後述するコンテンツ変換処理が施されることによって(B)に示すスクリプトを含むHTML文が生成されることを示している。
図36(A)及び(B)の記述内容は、ブラウザによる表示において、ある入力用のフォーム部品に対してなされるクリック操作に応じて、クリック操作がなされたことを通知する警告画面を表示させる処理を行なう処理スクリプトを実行させるというものである。なお、説明の便宜のため、図36の(A)及び(B)の各行頭には行番号を付している。
従来のWebアプリケーションの開発手法によれば、上述した処理をブラウザに行なわせるためには、図36(B)に示すようなHTML文、すなわち、スクリプト部分の呼び出しを行なう条件となるプロパティの記述(図36(B)第8行目の記述)と、処理スクリプト自体の動作の定義(図36(B)第1行目から第6行目の記述)とを直接記述し、更にこの両者の関連を示すためにその双方に処理スクリプトの名前(図36(B)の例ではaction123() )を記述する必要があった。そのため、何らかの理由によってこれらのどちらかに修正が必要となっても、結局両者を参照してその一方に対する修正が他方に影響を与えていないかを確認する必要が生じてしまうため、保守性に問題があった。また、このために、結局は処理スクリプトの動作定義とその処理スクリプトの呼び出しを行なう部分とを同一のコンポーネントに記述することとなり、処理スクリプトの動作定義の再利用性も低かった。
一方、この第4実施例では、同図(A)に示すような各種のタグを用いた記述文を作成し、この記述文に対してコンテンツ変換処理を施すことで(B)に示すスクリプトを含むHTML文を自動的に生成させるようにするものである。同図(A)には、処理スクリプ
トに名称が指定されておらず、更に、処理スクリプトを起動させる条件を示すプロパティ(同図(B)の第8行目の“onclick=”で始まり、処理スクリプト名を指定する記述)も記述されていない。
まず、同図(A)を説明する上で必要な概念を説明する。
図37は、本発明の第4の実施例で使用されるオブジェクトの構成を示している。
コンポーネント(ScriptComponent )オブジェクト4001は、ブラウザによって画面中に表示されているオブジェクトに対するイベントの発生元となるオブジェクトであり、図36(A)の例における<input> タグ(ValidInputTag オブジェクト4011)はコンポーネントタグと呼ばれる。コンポーネントタグはアクションタグをその内部に有しており、そのアクションタグに記述されるプロパティの内容である、処理スクリプトの呼び出しを行うためのイベントの指定が行なわれる。
コンテナ(ScriptContainer )オブジェクト4002は、コンポーネントオブジェクト4001の管理やアクションオブジェクト4003の有する処理スクリプトの出力を行なうオブジェクトであり、図36(A)の例における<form>タグ(ValidFormTagオブジェクト4012)はコンテナタグと呼ばれる。なお、コンテナオブジェクト4002はコンポーネントオブジェクト4001を継承しており、自らがイベントの発生元となることもある。
アクション(ScriptAction)オブジェクト4003は、ロジックである処理の定義がスクリプトによりなされるオブジェクトであり、図36(A)の例における<action >タグはアクションタグと呼ばれる。なお、アクションタグはカスタムアクションタグ(CustomActiontag オブジェクト4013a)とマイアクションタグ(MyActiontag オブジェクト4014b)とがあるが、この詳細は後述する。
スクリプト呼び出し部(ScriptCaller)オブジェクト4004は、イベントの発生に応じて個別に処理スクリプトの呼び出しを行なうときの各処理スクリプトの呼び出し法や戻り値の解釈法を決定するオブジェクトである。
次に、図38について説明する。同図はコンテンツ変換処理の概要を説明する図である。以下、図36(A)に示した記述文が変換される様子を図38を参照しながら説明する。
まず、(A)の第1行目に記述されているコンテナオブジェクト4102である<form>タグの記述内容がコンテンツ変換装置を実行する処理装置の有する記憶部に記憶され、第2行目に記述されているコンポーネントオブジェクト4101である<input>タグの記述内容が同様に記憶される。
次に、第3行目にアクションオブジェクト4103である<action>タグが記述されている。
<action>タグではevent プロパティの指定が必ずなされている。このプロパティの指定によって、この<action>タグとこれに対応する終了タグとの間に記述されているスクリプトがどのコンポーネントで発生するどのようなイベントに対して実行されるものなのかが示される。(A)の例では、この<action>タグを直接内包している第2行目の<input> タグで発生する“クリック操作”のイベントを対象としていることが示されている。
そこで、コンポーネントオブジェクト4101である第2行目の<input> タグに、この<input> が有するアクションオブジェクト4103として第3行目の<action>タグが登録される(図38(a))。
次に、第3行目の<action>タグから第5行目の<action>タグの終了タグとの間(すなわち第4行目のみ)に記述されているスクリプト(“alert(“clicked!”) ”)がアクションオブジェクト4103である<action>タグにおいて実行されるスクリプトとして記憶される。
続いて、第6行目に第2行目の<input> タグに対応する終了タグが記述されている。ここで、<input> タグの生成(すなわち、図36(B)の第8行目)が開始され(図38(b))、<input> タグについての記憶内容(すなわち、図36(A)の第1行目の記述内容である“input name=”field1” ”)が出力される。
続いて、この<input> タグに先に登録されていたアクションオブジェクト4103である<action>タグに対し出力指示の通知が行なわれる(図38(b))。
この出力通知が<action>タグによって受け取られると、この<action>タグについての前述したプロパティについての指定内容がコンポーネントオブジェクト4101に送られて生成中の<input> タグに追加される(図38(d))。図36(A)の例では、event プロパティが“click”に指定されているので、<input> タグには“onclick=”が出力されるようにしておく。ここまでで、コンポーネントオブジェクト4101による<input> タグの大枠の生成が完了する。
更に、ここで、前述したスクリプトが保持されているアクションオブジェクト4103である<action>タグがコンテナオブジェクト4102である<form>タグに登録される(図38(e))。
最後に、図36(A)の第7行目に第1行目の<form>タグに対応する終了タグが記述されている。ここで、コンテナオブジェクト4102である<form>タグの生成(図38(f))が開始され、まず、図36(B)の第1行目の出力が行なわれる。
続いて、スクリプトの呼び出し部分の生成がスクリプト呼び出し部オブジェクト4104に指示される(図38(g))。ここでは、まず、処理スクリプトの名前(action123(target))が自動生成されて図36(B)の第2行目及び第5行目が出力され、続いてこの処理スクリプトの戻り値が定義される第4行目が出力される。更に、この処理スクリプトの呼び出し元であるコンポーネントオブジェクト4101である第8行目の<input> タグに、処理スクリプトの名前を出力する。
そして最後に、<form>タグに先に登録されていたアクションオブジェクト4103である<action>タグに指示され(図38(h))、前述したスクリプトが図36(B)の第3行目として出力される。この後に、コンテナオブジェクト4102である<form>タグによって、図36(B)の第6行目、第7行目、及び第9行目が出力され、図36(B)のHTML文の生成が完了する。
以上までに説明した、コンテンツ変換処理をフローチャートで示したものが図39及び図40である。次に、このフローチャートについて説明する。
まず、図39において、処理が開始されると、図36(A)に示すような記述文が先頭行から読み出される。
この読み出された行にアクションタグが記述されているか否かが判定され(S4201)、アクションタグでないならば(S4201の判定結果がNo)、この行に記述されているタグの内容が記憶部に記憶され(S4202)、その後はS4201へ処理が戻ってこの行の次の行についての判定処理が繰り返される。
一方、読み出された行にアクションタグが記述されているならば(S4201の判定結果がYes)、このアクションタグを含んでいるコンポーネントタグにこのアクションタグが登録され(S4203)、続いてこのアクションタグの開始タグと終了タグとの間に記述されている処理スクリプトが記憶部に記憶される(S4204)。
次に、アクションタグの終了タグが記述されている行の次の行が読み出され、この行にコンポーネントタグの終了タグが記述されているか否かが判定される(S4205)。この結果、コンポーネントタグの終了タグがこの行に記述されていなければ(S4205の判定結果がNo)、S4201へ処理が戻ってこの行についての判定処理が繰り返される。
一方、この行にコンポーネントタグの終了タグがこの行に記述されていれば(S4205の判定結果かYes)、このコンポーネントタグについての生成が開始されて記憶部に記憶されているこのコンポーネントタグについての記述内容が出力され(S4206)、更に、このコンポーネントタグに登録されているアクションタグのプロパティが追加される(S4207)。
次に、図40に処理が進み、ここで、追加されたアクションタグのプロパティの内容が調べられ、このプロパティで指定されているイベントが、このコンポーネントでサポートされているものであるか否かが判定される(S4208)。この結果、指定されているイベントがこのコンポーネントでサポートされていないものであるならば(S4208の判定結果がNo)、このコンテンツ変換処理の処理結果として元の記述文に誤りが存在することを示すエラー通知が出力され(S4209)、処理が終了する。
一方、指定されているイベントがこのコンポーネントでサポートされているものであったならば(S4208の判定結果がYes)、コンポーネントタグの生成が完了し(S4210)、生成されたコンポーネントタグが記憶部に一時的に保管される。更に、このコンポーネントタグに登録されていたアクションタグがコンテナタグに登録される。
次に、コンポーネントタグの終了タグが記述されていた行の次の行が読み出され、この行にコンテナタグの終了タグが記述されているか否かが判定される(S4212)。この結果、コンテナタグの終了タグがこの行に記述されていなければ(S4212の判定結果がNo)、S4201(図39)へ処理が戻ってこの行についての判定処理が繰り返される。
一方、この行にコンテナタグの終了タグがこの行に記述されていれば(S4212の判定結果かYes)、このコンテナタグについての出力が開始されて記憶部に記憶されているこのコンテナタグについての記述内容が出力される(S4213)。
続いて、スクリプト呼び出し部オブジェクトによって処理スクリプトの名前が自動生成されて出力され(S4214)、更に一時的に保管されているコンポーネントタグにその名前が記述されることによってコンポーネントタグと処理スクリプトとが関連付けられる。
その後、このコンテナタグに登録されているアクションタグに関連付けて記述されていて先に記憶部に記憶させていた処理スクリプトが出力され(S4215)、そして最後に<script>タグの出力やコンテナタグの終了タグの出力などが行なわれてコンテナタグの生成が完了する(S4216)。
以上の処理が実行されることによって、図36(A)に示すような記述文から図36(B)に示すようなHTML文が生成される。
なお、このコンテンツ変換処理は、サーバに単独で設けられる処理エンジンによって処理させるようにしてもよいが、前述した本発明の第3の実施例で説明したフレームワークエンジンによって、前述した表示処理に併せて処理させるようにしてもよい。このとき、コンテンツ変換処理での変換対象であるJSPソースは、モデルを表示するための画面の見かけの定義が行なわれるビューにおけるレンダラの要素として記述される。
次にこの第4の実施例の応用について説明する。
図36では処理を定義するスクリプトを記述文(A)に記述(第4行目)に記述していたが、この処理スクリプトを記述文(A)中では記述せずに、部品化されている処理スクリプトを利用する手法についてまず説明する。
図41は、処理スクリプトを別に用意する場合のスクリプト記述例を示す図である。
図36(A)に示した記述文では、全てのタグにsf: なる接頭辞を付していたが、図41(A)に示す記述文では、アクションタグ<action>にmy: なる接頭辞が付されている。このタグ<my:action> はマイアクションタグと称されており、コンテンツ変換処理においてこのタグが検出されたときには、予め用意されている処理スクリプトがS4215(図40)の処理で出力されるようにする。なお、これに対して、今まで説明したsf: なる接頭辞を付したアクションタグは特にカスタムアクションタグと称されている。
図41(A)に記述されたマイアクションタグに対応するスクリプトである、文字列の最小文字数をチェックする処理スクリプトの定義例を図42に示す。図42に示す定義例では、マイアクションタグに指定されるMinLength プロパティを受け取るためのsetMinLength()が定義され、更に、outputFunctionBodyメソッドにおいて、出力オブジェクトWriterに対して、上述したプロパティの内容を埋め込んだ処理スクリプトを出力させることが指示されている。
図39及び図40に示されているコンテンツ変換処理を実行させると、図39のS4204の処理において図42に示されているような処理スクリプトが記憶部に記憶され、その後の図40のS4215の処理において、その処理スクリプトが出力されるときに、変数min への値の代入がなされた出力が行なわれる。その結果、図41(A)の記述文から図41(B)に示すHTML文が生成される。
次に図43について説明する。同図は、同一のイベントに対して複数のアクションが対応する場合のスクリプト記述例を示す図である。
図43(A)の記述文では、第2行目に示されている<input> タグが、第3行目及び第6行目の2つのアクションタグを有している。このような場合には、図39及び図40に示されているコンテンツ変換処理において、図39のS4205の判定処理の作用により、S4201からS4205にかけての処理が2度行なわれ、その結果、<input> タグにこれら2つのアクションタグが登録され、更にそれぞれのアクションタグについての処理
スクリプトが記憶される。
その後、図39のS4207の処理において2つのアクションタグから<input> タグにプロパティが追加されると、コンテンツ変換処理では、これら2つのアクションタグに指定されている”event” の内容が同一であることが認識される。
この認識結果に基づいて、コンテンツ変換処理では、図40のS4214の処理において、処理スクリプトの名前の自動生成に加え、図43(b)の第2行目から第8行目((a)の部分)に示す、2つの処理スクリプトを順に実行させるための処理スクリプトの自動生成がスクリプト呼び出し部オブジェクトで行なわれる。このスクリプト呼び出し部オブジェクトによる処理スクリプトの自動生成によって、同一イベントと複数の処理スクリプトとの対応関係が確立される。
その後、S4215において、図43(B)の第9行目から第12行目((b)の部分)及び第13行目から第19行目((c)の部分)の出力が行なわれる。
次に図44について説明する。同図は、コンテナタグでイベントが発生する場合のスクリプト記述例を示している。
図44(A)において、第6行目のアクションタグの記述において、event プロパティが“”form.submit” ”に指定されている。この記述は、nameプロパティが”form”に指定されているコンテナタグについてのアクションタグであることを示している。
このようなプロパティの指定がなされているコンテナタグについては、図39及び図40に示されているコンテンツ変換処理において、図39のS4203の処理であるアクションタグの登録が、コンポーネントタグの代わりにコンテナタグに対して行なわれるようにする。更に、図40のS4213の処理におけるコンテナタグについての記述内容の出力の際に、S4207からS4210にかけてのコンポーネントタグに対して行なわれる処理がコンテナタグに対して施されるようにする。こうすることにより、図44(B)の第14行目((a)の行)が生成されるようになり、コンテナタグで発生するイベントに対してスクリプトを実行させることが可能となる。
以上まで説明した本発明の各実施例を実施するシステムで使用される、サーバの各処理エンジン及びクライアントの構成を図45に示す。これらはいずれも、CPU5001、記憶部5002、入力部5003、出力部5004、I/F部5005を有し、各構成要素がバス5006を介して相互に接続されている。
各構成要素の機能を説明すると、CPU(中央処理装置)5001は制御プログラムを実行することで各構成要素を制御する。
記憶部5002はROM(リードオンリメモリ)やRAM(ランダムアクセスメモリ)、磁気記憶装置等を備えており、CPU5001に各構成要素を制御させる制御プログラムの記憶、CPU5001が制御プログラムを実行する際のワークエリア、あるいは各種データの記憶領域として使用される。
入力部5003はマウスやキーボード等を有しており、ユーザによる操作に対応する各種のデータが取得される。
出力部5004はディスプレイなどを有しており、各種のデータを提示してユーザに通知するものである。
I/F部5005はネットワークに接続するためのインタフェース機能を提供するものであり、ネットワークを介して他の機器とのデータ授受を可能とするものである。
なお、この図45に示されている構成は、標準的なコンピュータが有しているものと同様の構成であり、従って、本発明を標準的なコンピュータで実施することも勿論可能である。
図46は、本発明に係わるコンピュータ等の情報処理装置で実行される各種のソフトウェアプログラム等の提供方法を説明する図である。プログラム等は例えば以下の(a)〜(c)の3つの方法の中の任意の方法により提供される。
( a) コンピュータ等の情報処理装置5301にインストールされて提供される。この場合、プログラム等は例えば出荷前にプレインストールされる。
( b) 可搬型記録媒体5302に格納されて提供される。この場合、可搬型記憶媒体5302に格納されているプログラム等は、コンピュータ等の情報処理装置2301の外部記憶装置にインストールされる。可搬型記憶媒体5302の例としては、フロッピー(登録商標)ディスク、CD−ROM、光磁気ディスク、DVD−ROMなどがある。
( c) ネットワーク5303上のプログラム提供サーバ5304から提供される。この場合、基本的には、コンピュータなどの情報処理装置5301がプログラム提供サーバ5304に格納されているプログラム等をダウンロードすることによって、そのプログラム等を取得する。この場合には、ソフトウェアプログラムを表現するデータ信号で搬送波を変調して得られる伝送信号を、プログラム提供サーバ5304から伝送媒体であるネットワーク5303を通じて伝送し、情報処理装置5301では受信した伝送信号を復調してソフトウェアプログラムを再生することで当該ソフトウェアプログラムの実行が可能となる。
(付記1) クライアントからのリクエストをサーバで処理し、クライアントにレスポンスを返すWebシステムであって、
前記サーバで、前記リクエストをデータオブジェクトに変換して処理し、処理結果であるデータオブジェクトを前記クライアントへのレスポンスに変換して返すことを特徴とするWebシステム。
(付記2) Webアプリケーションを開発・実行するためのシステムであって、
入力内容をデータオブジェクトに変換する入力内容変換手段と、
複数の処理ルーチンを備える処理ロジックと、
前記データオブジェクトの種類とコマンドの組合せを前記各処理ルーチンにマッピングする第1の外部定義ファイルと、
前記データオブジェクトの種類と前記コマンドと前記第1の外部定義ファイルに基づいて前記処理ロジックの備える処理ルーチンから適当な処理ルーチンを決定する処理ルーチン決定手段と、
を備えることを特徴とするWebアプリケーション開発・実行システム。
(付記3) 付記2記載のWebアプリケーション開発・実行システムであって、
前記入力内容変換手段は、HTMLで記述されたデータ入力ページの特定項目を前記データオブジェクトのクラス名とし、該データ入力用ページに設けられている各入力欄の名前を前記データオブジェクトの属性に対応させて、データオブジェクト用プログラムを自動生成することを特徴とするWebアプリケーション開発・実行システム。
(付記4) Webアプリケーションを開発・実行するためのシステムであって、
複数の処理ルーチンを備える処理ロジックと、
前記処理ロジックの処理結果とデータオブジェクトの種類の組み合わせを表示用コンポーネントにマッピングする第2の外部定義ファイルと、
を備えることを特徴とするWebアプリケーション開発・実行システム。
(付記5) 付記4記載のWebアプリケーション開発・実行システムであって、
更に、
表示するページに配置する複数の表示用コンポーネントの配置の仕方を規定したテンプレートファイルを備え、
前記テンプレートファイルに基づいて複数の前記処理ロジックの処理結果を出力することを特徴とするWebアプリケーション開発・実行システム。
(付記6) 付記2記載のWebアプリケーション開発・実行システムであって、
更に、
XMLのタグとデータオブジェクトをマッピングするXMLマッピングファイルと、
XMLのタグとデータオブジェクトとの相互変換を行うXML Data Bindingエンジンを備え、
前記入力内容としてXMLで記述されたタグを受信した場合に、
前記XML Data Bindingエンジンは、前記受信したXMLのタグと前記XMLマッピングファイルに基づいて、前記受信したXMLを前記データオブジェクトに変換し、
前記処理ルーチン決定手段は、前記データオブジェクトと前記受信したXMLのタグと前記第1の外部定義ファイルに基づいて前記処理ロジック内の処理ルーチンから適当な処理ルーチンを決定し、
前記XML Data Bindingエンジンは、前記処理ロジックの処理結果として得られるデータオブジェクトをXMLのタグに変換して出力する、
ことを特徴とするWebアプリケーション開発・実行システム。
(付記7) 付記6記載のWebアプリケーション開発・実行システムであって、
前記XMLマッピングファイルは、或るHTTPによるデータと同一の処理を施すXMLのタグを、前記或るHTTPによるデータと同一種類のデータオブジェクトにマッピングすることを特徴とするWebアプリケーション開発・実行システム。
(付記8) 付記2記載のWebアプリケーション開発・実行システムであって、
前記処理ロジックにおける各処理ルーチンは、時間的スコープの大きな順にシステム、アプリケーション、セッション、リクエストの4段階のうちのいずれかの前記スコープに属性定義されており、
前記処理ロジックが処理を行う場合には、より大きなスコープからより小さなスコープに分岐して処理を進めていくことを特徴とするWebアプリケーション開発・実行システム。
(付記9) 付記8記載のWebアプリケーション開発・実行システムであって、
いずれかのの前記スコープが属性定義されている前記処理ルーチンに前処理または後処理のインタフェースを設けることを特徴とするWebアプリケーション開発・実行システム。
(付記10) 付記9記載のWebアプリケーション開発・実行システムであって、
前記前処理のインタフェースに状態の制御を行うためのチェックルーチンを設けること
を特徴とするWebアプリケーション開発・実行システム。
(付記11) 付記9記載のWebアプリケーション開発・実行システムであって、
前記後処理のインタフェースに前記スコープが属性定義されている前記処理ルーチンごとのエラーを回復させるためのエラーハンドリング処理を設けることを特徴とするWebアプリケーション開発・実行システム。
(付記12) 付記8記載のWebアプリケーション開発・実行システムであって、
前記スコープが属性定義されている前記処理ルーチンのいずれかにシングルスレッド動作制限を設けることを特徴とするWebアプリケーション開発・実行システム。
(付記13) コンピュータにより使用されたときにそれによって読み出されるプログラムを記録した記録媒体であって、
入力内容をデータオブジェクトに変換するステップと、
前記データオブジェクトの種類と、コマンドと、前記データオブジェクトの種類とコマンドの組合せを各処理ルーチンにマッピングする外部定義ファイルと、に基づいて処理ロジック内の処理ルーチンから適当な処理ルーチンを決定するステップと、
を前記コンピュータに行わせるためのプログラムを記録したコンピュータ読み出し可能記録媒体。
(付記14) クライアントからのリクエストをサーバで処理し、クライアントにレスポンスを返すWebシステムであって、
前記サーバで前記リクエストに応じて処理される各オブジェクトは、各々が処理されるときの時間軸上における相対的な位置関係に基づいた時間的スコープについての属性定義がされており、
前記サーバは、より大きな時間的スコープが定義されているオブジェクトから小さな時間的スコープが定義されているオブジェクトに分岐して前記リクエストに応じたオブジェクトの処理を進めていくことを特徴とするWebシステム。
(付記15) 付記14記載のWebシステムであって、
各オブジェクトには、時間的スコープの大きな順に、システム、アプリケーション、セッション、リクエストのうちのいずれかのスコープの属性定義がなされることを特徴とするWebシステム。
(付記16) クライアントからのリクエストをサーバで処理し、クライアントにレスポンスを返すWebシステムであって、
サーバでの処理ルーチン呼び出し時に該処理ルーチンによる処理の動作を監視し、該処理の進行を継続させるオブジェクトを該サーバで実行することを特徴とするWebシステム。
(付記17) クライアントとの間で各種のデータを授受するサーバ側に設けられ、該クライアントに提供するデータが表示されるWebページ画面を表現するHTML文を生成するWebアプリケーション生成装置であって、
前記クライアントに提供するデータを有し、且つ該データのデータ構造を表すインタフェースを実装するデータオブジェクトが格納されるデータオブジェクト格納手段と、
前記データオブジェクトが有するデータについての前記Webページ画面における表示方法をHTMLによる記述によって定義する定義文が格納される定義文格納手段と、
前記データオブジェクトに実装されている前記インタフェースに基づいて該データオブジェクトの有するデータと前記定義文とを関連付けることによって、該データが表示されるWebページ画面を表現するHTML文を生成するHTML文生成手段と、
を有することを特徴とするWebアプリケーション生成装置。
(付記18) 付記17記載のWebアプリケーション生成装置であって、
前記定義文はJavaServer Pages(JSP)によって定義され、
前記HTML文生成手段は、JSPによって定義された定義文から前記HTML文を生成する、
ことを特徴とするWebアプリケーション生成装置。
(付記19) 付記17記載のWebアプリケーション生成装置であって、
前記データ構造に対応して定義される属性であるデータクラスを取得するデータクラス取得手段を更に有し、
前記HTML文生成手段は、前記データクラスに基づいて前記データオブジェクトの有するデータに関連付ける前記定義文を選択する、
ことを特徴とするWebアプリケーション生成装置。
(付記20) 付記17記載のWebアプリケーション生成装置であって、
前記HTML文生成手段により生成されたHTML文によって表現されるWebページ画面に示されている入力フォームへの入力データを含むリクエストであって前記クライアントから送付される該リクエストを取得するリクエスト取得手段と、
前記リクエストに前記データと共に含まれている、前記HTML文生成手段により生成されたHTML文に含まれていた文字列であって、該HTML文の生成の基礎とされたインタフェースを特定する文字列と該インタフェースにより表されるデータ構造における特定の位置を示す文字列とからなる該文字列に基づいて、該文字列で特定されるインタフェースにより表されるデータ構造における特定の位置のデータを該リクエストに含まれていたデータに更新するデータ更新手段と、
を更に有することを特徴とするWebアプリケーション生成装置。
(付記21) 付記20記載のWebアプリケーション生成装置であって、
前記リクエストに前記データと共に含まれている文字列は、該入力フォームに対して入力されるデータを参照するパラメータ名を示すことを特徴とするWebアプリケーション生成装置。
(付記22) 付記20記載のWebアプリケーション生成装置であって、
前記リクエストには、異なるインタフェースに基づいて生成されたHTML文についての前記データ及び前記文字列が含まれることを特徴とするWebアプリケーション生成装置。
(付記23) 付記20記載のWebアプリケーション生成装置であって、
前記データ更新手段は、前記データオブジェクト格納手段に格納されているデータオブジェクトの有する前記データを前記リクエストに含まれていたデータに更新することを特徴とするWebアプリケーション生成装置。
(付記24) 付記20記載のWebアプリケーション生成装置であって、
前記リクエストに前記データと共に含まれている文字列は、前記HTML文の生成の基礎とされたインタフェースを特定する文字列と該インタフェースにより表されるデータ構造における特定の位置を示す文字列とからなる文字列に、更に該位置のデータ群が有するデータ構造を表すインタフェースを特定する文字列と該インタフェースにより表されるデータ構造における特定の位置を示す文字列とからなる文字列を組み合わせて成り、
前記データ更新手段は、前記文字列で特定されるデータ構造における特定の位置に更に有しているデータ構造における特定の位置のデータを前記リクエストに含まれていたデー
タに更新する、
ことを特徴とするWebアプリケーション生成装置。
(付記25) クライアントとの間で各種のデータを授受するサーバ側で、該クライアントに提供するデータが表示されるWebページ画面を表現するHTML文を生成する方法であって、
前記クライアントに提供するデータを有し、且つ該データのデータ構造を表すインタフェースを実装するデータオブジェクトを取得し、
前記データオブジェクトが有するデータについての前記Webページ画面における表示方法をHTMLによる記述によって定義する定義文を取得し、
前記データオブジェクトに実装されている前記インタフェースに基づいて該データオブジェクトの有するデータと前記定義文とを関連付けることによって、該データが表示されるWebページ画面を表現するHTML文を生成する、
を有することを特徴とするWebアプリケーション生成方法。
(付記26) クライアントとの間で各種のデータを授受するサーバ側で、コンピュータに実行させることによって、該クライアントに提供するデータが表示されるWebページ画面を表現するHTML文を生成する制御を該コンピュータに行なわせる制御プログラムを記録した記録媒体であって、
前記クライアントに提供するデータを有し、且つ該データのデータ構造を表すインタフェースを実装するデータオブジェクトを取得する制御と、
前記データオブジェクトが有するデータについての前記Webページ画面における表示方法をHTMLによる記述によって定義する定義文を取得する制御と、
前記データオブジェクトに実装されている前記インタフェースに基づいて該データオブジェクトの有するデータと前記定義文とを関連付けることによって、該データが表示されるWebページ画面を表現するHTML文を生成する制御と、
をコンピュータに行なわせる制御プログラムを記憶した記憶媒体。
(付記27) クライアントとの間で各種のデータを授受するサーバ側で、コンピュータに実行させることによって、該クライアントに提供するデータが表示されるWebページ画面を表現するHTML文を生成する制御を該コンピュータに行なわせる制御プログラムを含む搬送波に具現化されたコンピュータ・データ・シグナルであって、該制御プログラムは、
前記クライアントに提供するデータを有し、且つ該データのデータ構造を表すインタフェースを実装するデータオブジェクトを取得する制御と、
前記データオブジェクトが有するデータについての前記Webページ画面における表示方法をHTMLによる記述によって定義する定義文を取得する制御と、
前記データオブジェクトに実装されている前記インタフェースに基づいて該データオブジェクトの有するデータと前記定義文とを関連付けることによって、該データが表示されるWebページ画面を表現するHTML文を生成する制御と、
をコンピュータに行なわせる。
(付記28) クライアントとの間で各種のデータを授受するサーバ側に設けられ、該クライアントに提供するデータが表示されるWebページ画面を表現するHTML文を生成するWebアプリケーション生成装置であって、
処理の内容が定義されている処理ロジックが格納される処理ロジック格納手段と、
前記処理ロジックの実行条件が格納される実行条件格納手段と、
前記処理ロジックの名称となる文字列を生成する処理ロジック名生成手段と、
前記文字列を用いて前記処理ロジックを呼び出すHTML文であって、前記実行条件に合致するイベントが前記クライアントで発生したときに該処理ロジックを呼び出して実行
する、という処理を該クライアントに行なわせる該HTML文を生成するHTML文生成手段と、
を有することを特徴とするWebアプリケーション生成装置。
(付記29) 付記28記載のWebアプリケーション生成装置であって、
前記処理ロジックはスクリプトによって定義されていることを特徴とするWebアプリケーション生成装置。
(付記30) 付記28記載のWebアプリケーション生成装置であって、
前記処理ロジック格納手段及び前記実行条件格納手段には、前記処理ロジック及び前記実行条件が共に定義されている同一のコンポーネントにおける該処理ロジック及び該実行条件がそれぞれ格納されることを特徴とするWebアプリケーション生成装置。
(付記31) 付記28記載のWebアプリケーション生成装置であって、
前記処理ロジック格納手段には複数の前記処理ロジックが格納され、
複数の前記処理ロジックのそれぞれの前記実行条件のうちのいずれかが同一であるときに、該実行条件が同一である該処理ロジックを順に実行する処理ロジックを生成する処理ロジック生成手段を更に有し、
前記文字列生成手段は、複数の前記処理ロジック、及び前記処理ロジック生成手段により生成された処理ロジックに対して各々異なる名称となる文字列を生成し、
前記HTML文生成手段は、前記文字列を用いて前記処理ロジック生成手段により生成された処理ロジックを呼び出すHTML文であって、同一であった前記実行条件に合致するイベントが前記クライアントで発生したときに該処理ロジックを呼び出して実行する、という処理を該クライアントに行なわせる該HTML文を生成する、
ことを特徴とするWebアプリケーション生成装置。
(付記32) 付記28記載のWebアプリケーション生成装置であって、
前記処理ロジックと該処理ロジックの実行条件との対応関係の妥当性を確認する確認手段を更に有することを特徴とするWebアプリケーション生成装置。
(付記33) クライアントとの間で各種のデータを授受するサーバ側で、該クライアントに提供するデータが表示されるWebページ画面を表現するHTML文を生成するWebアプリケーション生成方法であって、
処理の内容が定義されている処理ロジックであって、予め用意されている該処理ロジックの名称となる文字列を生成し、
前記文字列を用いて前記処理ロジックを呼び出すHTML文であって、前記処理ロジックについての実行条件であって予め用意されている該実行条件に合致するイベントが前記クライアントで発生したときに該処理ロジックを呼び出して実行する、という処理を該クライアントに行なわせる該HTML文を生成する、
ことを特徴とするWebアプリケーション生成方法。
(付記34) クライアントとの間で各種のデータを授受するサーバ側で、コンピュータに実行させることによって、該クライアントに提供するデータが表示されるWebページ画面を表現するHTML文を生成する制御を該コンピュータに行なわせる制御プログラムを記録した記録媒体であって、
処理の内容が定義されている処理ロジックであって、予め用意されている該処理ロジックの名称となる文字列を生成する制御と、
前記文字列を用いて前記処理ロジックを呼び出すHTML文であって、前記処理ロジックについての実行条件であって予め用意されている該実行条件に合致するイベントが前記クライアントで発生したときに該処理ロジックを呼び出して実行する、という処理を該ク
ライアントに行なわせる該HTML文を生成する制御と、
をコンピュータに行なわせる制御プログラムを記憶した記憶媒体。
(付記35) クライアントとの間で各種のデータを授受するサーバ側で、コンピュータに実行させることによって、該クライアントに提供するデータが表示されるWebページ画面を表現するHTML文を生成する制御を該コンピュータに行なわせる制御プログラムを含む搬送波に具現化されたコンピュータ・データ・シグナルであって、該制御プログラムは、
処理の内容が定義されている処理ロジックであって、予め用意されている該処理ロジックの名称となる文字列を生成する制御と、
前記文字列を用いて前記処理ロジックを呼び出すHTML文であって、前記処理ロジックについての実行条件であって予め用意されている該実行条件に合致するイベントが前記クライアントで発生したときに該処理ロジックを呼び出して実行する、という処理を該クライアントに行なわせる該HTML文を生成する制御と、
をコンピュータに行なわせる。
(付記36) コンピュータに、
入力内容をデータオブジェクトに変換するステップと、
前記データオブジェクトの種類と、コマンドと、前記データオブジェクトの種類とコマンドの組合せを各処理ルーチンにマッピングする外部定義ファイルと、に基づいて処理ロジック内の処理ルーチンから適当な処理ルーチンを決定するステップと、
を実行させるためのプログラム。
(付記37) クライアントとの間で各種のデータを授受するサーバ側で、コンピュータに実行させることによって、該クライアントに提供するデータが表示されるWebページ画面を表現するHTML文を生成する制御を該コンピュータに行なわせる制御プログラムであって、
前記クライアントに提供するデータを有し、且つ該データのデータ構造を表すインタフェースを実装するデータオブジェクトを取得する制御と、
前記データオブジェクトが有するデータについての前記Webページ画面における表示方法をHTMLによる記述によって定義する定義文を取得する制御と、
前記データオブジェクトに実装されている前記インタフェースに基づいて該データオブジェクトの有するデータと前記定義文とを関連付けることによって、該データが表示されるWebページ画面を表現するHTML文を生成する制御と、
をコンピュータに行なわせるための制御プログラム。
(付記38) クライアントとの間で各種のデータを授受するサーバ側で、コンピュータに実行させることによって、該クライアントに提供するデータが表示されるWebページ画面を表現するHTML文を生成する制御を該コンピュータに行なわせる制御プログラムであって、
処理の内容が定義されている処理ロジックであって、予め用意されている該処理ロジックの名称となる文字列を生成する制御と、
前記文字列を用いて前記処理ロジックを呼び出すHTML文であって、前記処理ロジックについての実行条件であって予め用意されている該実行条件に合致するイベントが前記クライアントで発生したときに該処理ロジックを呼び出して実行する、という処理を該クライアントに行なわせる該HTML文を生成する制御と、
をコンピュータに行なわせるための制御プログラム。
本発明の概略を示す図である。 本発明の原理構成を示す図である。 本発明の第1の実施例のシステム構成を示す図である。 本発明の第1の実施例のシステムの具体的な動作の様子を示す図である。 図4に示すアプリケーションのシステム構成とその動作(クライアントからのリクエストを受信し、処理するまで)概要を説明する図である。 図4に示すアプリケーションのシステム構成とその動作(クライアントへレスポンスを返すまで)概要を説明する図である。 (а)、(b)はコマンドマッピングの一部、(c)はページマッピングの一部を示す図である。 クライアントからのリクエストデータを入力用Java Beanに変換するプログラム記述を示す図である。 コマンドマッピングを介して実行すべきロジックの処理を決定するプログラム記述を示す図である。 ユーザロジックが表示用データオブジェクトを設定するプログラム記述を示す図である。 ページマッピングを介して表示すべきページを決定するプログラム記述を示す図である。 JSPから表示画面を出力するプログラム記述を示す図である。 表示画面に複数の表示部品を配置する場合のテンプレートについて説明する図である。 本発明の第2の実施例のシステム構成を示す図(その1)である。 本発明の第2の実施例のシステム構成を示す図(その2)である。 XMLファイルを処理するシステムの動作(XMLファイルを受信して、処理するまで)概要を示す図である。 XMLファイルを処理するシステムの動作(XMLファイルを受信した時に、処理結果を返すまで)概要を示す図である。 (а)は、本発明のシステムを構成するオブジェクトのスコープを説明する図であり、(b)はオブジェクト間の相関関係を示す図である。 (а)は、クライアントからのリクエスト処理を説明する図であり、(b)はSingleThreadModel の実装を説明する図である。 (а)は、SingleThreadModel の具体的な実装を示す図であり、(b)はSingleThreadModel の実装のプログラム記述例を示す図である。 クライアントのリクエストを処理する場合のシーケンス図である。 (а)は、一般のアプリケーションサーバにおいてロジックのハンドラからブラウザにコールバックする仕組みを説明する図であり、(b)はそのプログラム記述例を示す図である。 (а)は、本発明のアプリケーションサーバにおいてロジックのハンドラからブラウザにリクエストを行う仕組みを説明する図であり、(b)、(c)はそのプログラム記述例を示す図である。 本発明の第3の実施例のシステム構成を示す図である。 テーブルモデルインタフェースの宣言例を示す図である。 本発明の第3の実施例において、HTML文が生成される様子を説明する図である。 表示時の制御処理の処理内容を示すフローチャート(その1)である。 表示時の制御処理の処理内容を示すフローチャート(その2)である。 表示時の制御処理の処理内容を示すフローチャート(その3)である。 <name>のレンダラエレメントタグを説明する図である。 <name>のレンダラエレメントタグを使用したレンダラの定義例を示す図である。 記憶領域管理処理の処理内容を示すフローチャートである。 図24に示すシステムにおけるリクエスト時の動作の概要を説明する図である。 リクエスト時の制御処理の処理内容を示すフローチャートである。 本発明の第3の実施例を実施するクライアントサーバシステムの例を示す図である。 本発明の第4の実施例によってHTML文が生成される様子を示す図である。 本発明の第4の実施例で使用されるオブジェクトの構成を示す図である。 コンテンツ変換処理の概要を説明する図である。 コンテンツ変換処理の処理内容を示すフローチャート(その1)である。 コンテンツ変換処理の処理内容を示すフローチャート(その2)である。 処理スクリプトを別に用意する場合のスクリプト記述例を示す図である。 文字列の最小文字数をチェックする処理スクリプトの定義例を示す図である。 同一のイベントに対して複数のアクションが対応する場合のスクリプト記述例を示す図である。 コンテナタグでイベントが発生する場合のスクリプト記述例を示す図である。 本発明の各実施例を実施するシステムに使用される、サーバの各処理エンジン及びクライアントの構成を示す図である。 本発明に係わるソフトウェアプログラム等の提供方法を説明する図である。 ビジネスアプリケーションの実施形態を示す図である。 Servletを用いたアプリケーションサーバのシステム構成を示す図である。 JSPを用いたアプリケーションサーバのシステム構成を示す図である。
符号の説明
101 HTML
102 画面データ
103 ロジック
201 入力用JSP
202 表示用JSP
203 入力用Java Bean
204 表示用Java Bean
205 ユーザロジック
206 UJIエンジン
207 マッピングファイル
301 HTTPリクエスト
302 フロントコンポーネント
303 入力用Java Bean
304 UJIエンジン
305 コマンドマッピング
306 ページマッピング
307 ユーザロジック
308 テンプレート
309 表示用Java Bean
310 表示用JSP
401 ユーザ一覧表示画面
402 ユーザ状態編集画面
403 プロファイル編集画面
404 ユーザ登録画面
405 ログインボタン
406 ユーザ登録ボタン
407 変更ボタン
408 ログアウトボタン
409 プロファイル編集ボタン
410 変更ボタン
411 戻るボタン
412 変更ボタン
413 戻るボタン
501 ユーザ一覧表示画面
502 ユーザ状態編集画面
503 プロファイル編集画面
504 ユーザ登録画面
505 Java Bean(自動生成)
506 UJI
507 コマンドマッピング
508 ログイン処理
509 ログアウト処理
510 ユーザ状態変更処理
511 プロファイル変更処理
512 ユーザ登録処理
601 Java Bean(処理内で作成)
602 ページマッピング
801 データ入力用HTMLページ
802 入力用Java Bean
901 データ入力用HTMLページ
902 コマンドマッピング
903 ユーザロジック(ハンドラ)
1001 ユーザロジック(ハンドラ)
1002 データベース
1003 表示用Java Bean
1101 表示用Java Bean
1102 ページマッピング
1103 login-succeded.jsp
1104 login-failed.jsp
1201 表示用JSP
1202 表示用Java Bean
1203 出力HTML
1301 ユーザロジック(ハンドラ)
1302 表示用Java Bean(バナー用)
1303 表示用Java Bean(メニュー用)
1304 表示用Java Bean(コンテンツ用)
1305 テンプレート
1306 出力用HTML
1401 XMLインスタンス
1402 コマンドマッピング
1403 UJIエンジン
1404 XML Data Bindingエンジン
1405 Beanインスタンス
1501 ロジック(ハンドラ)
1502 送信用のデータオブジェクト
1503 送信XMLインスタンス
1601 注文伝票XML
1602 出荷伝票XML
1603 UJI
1604 XML Data Bindingエンジン
1605 Java Bean
1606 XMLマップファイル
1607 コマンドマッピング
1608 注文処理
1609 出荷処理
1610 処理
1701 Java Bean
1702 送信XML
1801 システム
1802 アプリケーション
1803 セッション
1804 リクエスト
1805 ハンドラ
1901 フロントコンポーネント
1902 ディスパッチャ
1903 アプリケーション
1904 セッション
1905 ハンドラ
1906 表示用ページ
1907 Dispatch Context
1908 ResponseBean
1909 コマンドマップ
1910 ページマップ
1911 RequestBean
1912 SingleThreadModel
2001 システム
2002 アプリケーション
2003 セッション
2004 ハンドラ
2005 ログイン処理メソッド
2006 ログアウト処理メソッド
2007 ユーザ変更メソッド
2008 プロファイル編集メソッド
2009 ユーザ登録メソッド
3001 モデルオブジェクト
3001a 表示用モデルオブジェクト
3001b 入力用モデルオブジェクト
3002 モデルインタフェース
3003 フレームワークエンジン
3004 表示用JSP
3005 ブラウザ
3006 フロントコンポーネント
3010 サーバ
3011 モデルフレームワーク処理部
3012 Webサーバ部
3013 バックエンド
3014 データベース
3020a、3020b、3020c クライアント
4001、4101 コンポーネントオブジェクト
4002、4102 コンテナオブジェクト
4003、4103 アクションオブジェクト
4004、4104 スクリプト呼び出し部
4011 ValidInputTag オブジェクト
4012 ValidFormTagオブジェクト
4013a CustomActionTag オブジェクト
4013b MyActionTag オブジェクト
5001 CPU
5002 記憶部
5003 入力部
5004 出力部
5005 I/F部
5006 バス
5301 情報処理装置(コンピュータ)
5302 可搬型記録媒体
5303 ネットワーク
5304 プログラム提供サーバ
5401 アプリケーションサーバ
5402 データベースサーバ
5403 クライアント
5501 HTML
5502 画面データ
5503 ロジック
5601 HTML
5602 画面データ
5603 データ

Claims (7)

  1. ネットワークを介して接続されているクライアント装置との間で各種のデータを授受するサーバ装置側に設けられ、該クライアント装置に提供するデータが表示されるWebページ画面を表現しているHTML文を生成するWebアプリケーション生成装置であって、
    前記クライアント装置に提供するデータを有しているデータオブジェクトであって、且つ該データのデータ構造を表すインタフェースを実装している該データオブジェクトが格納されるデータオブジェクト格納手段と、
    前記データオブジェクトが有するデータについての前記Webページ画面における表示方法をHTMLによる記述によって前記データ構造毎に定義している定義文が格納される定義文格納手段と、
    前記データオブジェクト格納手段に前記データオブジェクトが格納されたときに、該データオブジェクトに実装されている前記インタフェースで表されているデータ構造に基づいて該データオブジェクトの有するデータと前記定義文格納手段に格納されている定義文とを関連付けることによって、該データが表示されるWebページ画面を表現するHTML文を生成するHTML文生成手段と、
    を有することを特徴とするWebアプリケーション生成装置。
  2. 請求項1記載のWebアプリケーション生成装置であって、
    前記データ構造に対応して定義される属性であるデータクラスを取得するデータクラス取得手段を更に有し、
    前記HTML文生成手段は、前記データクラスに基づいて前記データオブジェクトの有するデータと前記定義文格納手段に格納されている定義文とを関連付ける、
    ことを特徴とするWebアプリケーション生成装置。
  3. 請求項1記載のWebアプリケーション生成装置であって、
    前記HTML文生成手段により生成されたHTML文を前記クライアント装置へ送付した後に前記クライアント装置から送付されてくるリクエストであって該HTML文によって表現されているWebページ画面に示されている入力フォームへの入力データを含むリクエストを取得するリクエスト取得手段と、
    前記リクエストに前記入力データと共に含まれている、前記HTML文生成手段により生成されたHTML文に含まれていた文字列であって、該HTML文の生成の基礎とされたインタフェースを特定する文字列と該インタフェースにより表されるデータ構造における特定の位置を示す文字列とからなる該文字列に基づいて、該文字列で特定されるインタフェースにより表されるデータ構造における特定の位置のデータを該リクエストに含まれていたデータに更新するデータ更新手段と、
    を更に有することを特徴とするWebアプリケーション生成装置。
  4. 請求項3記載のWebアプリケーション生成装置であって、
    前記リクエストに前記入力データと共に含まれている文字列は、前記HTML文の生成の基礎とされたインタフェースを特定する文字列と該インタフェースにより表されるデータ構造における特定の位置を示す文字列とからなる文字列に、更に該位置のデータ群が有するデータ構造を表すインタフェースを特定する文字列と該インタフェースにより表されるデータ構造における特定の位置を示す文字列とからなる文字列を組み合わせて成り、
    前記データ更新手段は、前記文字列で特定されるデータ構造における特定の位置に更に有しているデータ構造における特定の位置のデータを前記リクエストに含まれていたデータに更新する、
    ことを特徴とするWebアプリケーション生成装置。
  5. ネットワークを介して接続されているクライアント装置との間で各種のデータを授受するサーバ装置側に設けられるWebアプリケーション生成装置において行われる、該クライアント装置に提供するデータが表示されるWebページ画面を表現しているHTML文を生成する方法であって、
    前記クライアント装置に提供するデータを有しているデータオブジェクトであって、且
    つ該データのデータ構造を表すインタフェースを実装するデータオブジェクトを前記Webアプリケーション生成装置が取得して該Webアプリケーション生成装置の有する記憶部に記憶し、
    前記データオブジェクトが有するデータについての前記Webページ画面における表示方法をHTMLによる記述によって前記データ構造毎に定義している定義文を前記Webアプリケーション生成装置が取得して該Webアプリケーション生成装置の有する記憶部に記憶し、
    前記Webアプリケーション生成装置の有する記憶部から前記データオブジェクトを読み出して該データオブジェクトに実装されている前記インタフェースで表されているデータ構造に基づいて該データオブジェクトの有するデータと該Webアプリケーション生成装置の有する記憶部に格納されている定義文とを関連付けることによって、該データが表示されるWebページ画面を表現するHTML文を生成する、
    ことを特徴とするWebアプリケーション生成方法。
  6. ネットワークを介して接続されているクライアント装置との間で各種のデータを授受するサーバ装置側に設けられるコンピュータに、該クライアント装置に提供するデータが表示されるWebページ画面を表現しているHTML文を生成する制御を行わせるための制御プログラムを記録した記録媒体であって、
    前記クライアント装置に提供するデータを有しているデータオブジェクトであって、且つ該データのデータ構造を表すインタフェースを実装するデータオブジェクトを取得して前記コンピュータの有する記憶部に記憶させる制御と、
    前記データオブジェクトが有するデータについての前記Webページ画面における表示方法をHTMLによる記述によって前記データ構造毎に定義している定義文を取得して前記コンピュータの有する記憶部に記憶させる制御と、
    前記コンピュータの有する記憶部から前記データオブジェクトを読み出して該データオブジェクトに実装されている前記インタフェースで表されているデータ構造に基づいて該データオブジェクトの有するデータと該コンピュータの有する記憶部に格納されている定義文とを関連付けることによって、該データが表示されるWebページ画面を表現するHTML文を生成する制御と、
    を前記コンピュータに行わせるための制御プログラムを記録した記録媒体。
  7. ネットワークを介して接続されているクライアント装置との間で各種のデータを授受するサーバ装置側に設けられるコンピュータに、該クライアント装置に提供するデータが表示されるWebページ画面を表現しているHTML文を生成する制御を行わせるための制御プログラムであって、
    前記クライアント装置に提供するデータを有しているデータオブジェクトであって、且つ該データのデータ構造を表すインタフェースを実装するデータオブジェクトを取得して前記コンピュータの有する記憶部に記憶させる制御と、
    前記データオブジェクトが有するデータについての前記Webページ画面における表示方法をHTMLによる記述によって前記データ構造毎に定義している定義文を取得して前記コンピュータの有する記憶部に記憶させる制御と、
    前記コンピュータの有する記憶部から前記データオブジェクトを読み出して該データオブジェクトに実装されている前記インタフェースで表されているデータ構造に基づいて該データオブジェクトの有するデータと該コンピュータの有する記憶部に格納されている定義文とを関連付けることによって、該データが表示されるWebページ画面を表現するHTML文を生成する制御と、
    を前記コンピュータに行わせるための制御プログラム。
JP2006344426A 2000-08-15 2006-12-21 Webアプリケーション生成装置及び方法 Pending JP2007133893A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006344426A JP2007133893A (ja) 2000-08-15 2006-12-21 Webアプリケーション生成装置及び方法

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2000246139 2000-08-15
JP2000347977 2000-11-15
JP2006344426A JP2007133893A (ja) 2000-08-15 2006-12-21 Webアプリケーション生成装置及び方法

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2001241749A Division JP2002215394A (ja) 2000-08-15 2001-08-09 Webアプリケーション開発・実行システム及びWebアプリケーション生成装置

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2007310860A Division JP4231087B2 (ja) 2000-08-15 2007-11-30 Webページ画面表示システム及びWebページ画面表示方法

Publications (1)

Publication Number Publication Date
JP2007133893A true JP2007133893A (ja) 2007-05-31

Family

ID=38155441

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006344426A Pending JP2007133893A (ja) 2000-08-15 2006-12-21 Webアプリケーション生成装置及び方法

Country Status (1)

Country Link
JP (1) JP2007133893A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111208982A (zh) * 2020-01-08 2020-05-29 杭州雷钧数字智云科技有限公司 基于可视化配置方式的erp系统快速定制平台

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111208982A (zh) * 2020-01-08 2020-05-29 杭州雷钧数字智云科技有限公司 基于可视化配置方式的erp系统快速定制平台

Similar Documents

Publication Publication Date Title
US8738735B2 (en) System for designing and performing web application
US20030115572A1 (en) System, method and computer program product for application development using a visual paradigm to combine existing data and applications
US6268852B1 (en) System and method for facilitating generation and editing of event handlers
US7546576B2 (en) Software framework for web-based applications
US7814157B2 (en) Hypermedia browser API simulation to enable use of browser plug-ins and applets as embedded widgets in script-language-based interactive programs
US7992127B2 (en) Method and system of encapsulating web site transactions for computer-aided generation of web services
US7774697B2 (en) System and method for structuring distributed applications
US20120331044A1 (en) Information Messaging and Collaboration System
US20020138617A1 (en) Providing content from multiple services
KR20050119645A (ko) 그래픽 사용자 인터페이스 제어를 이용하여 웹 서비스들을조합함에 의한 프로그램의 생성
CN109240670A (zh) 模块化的软件开发方法、系统、设备及介质
CN104484353A (zh) 数据图形化方法、装置及数据库服务器
CN101185303A (zh) 创建用于绑定应用程序与关联后端服务器之间的消息的映射文档的系统及方法
JP2002215394A (ja) Webアプリケーション開発・実行システム及びWebアプリケーション生成装置
US20030018627A1 (en) Apparatus and method for workflow
JP4231087B2 (ja) Webページ画面表示システム及びWebページ画面表示方法
JP4358268B2 (ja) Webアプリケーション実行システム
KR101552914B1 (ko) 웹 서버 어플리케이션 프레임워크 장치와 프레임워크를 이용한 웹 어플리케이션 처리 방법 및 이를 구현할 수 있는 컴퓨터로 읽을 수 있는 기록 매체
JP2007122746A (ja) Webアプリケーション生成装置及び方法
JP2007133893A (ja) Webアプリケーション生成装置及び方法
JP2007109258A (ja) Webシステム
JP2007188526A (ja) Webアプリケーション実行システム
CN112732254B (zh) 网页开发方法、装置、计算机设备和存储介质
JP4686117B2 (ja) ソースコード変換装置、ソースコード変換方法、およびプログラム
CN101676905A (zh) 基于用户定制的规则修改资源内容的布局

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070710

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070904

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20071009

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071108