(注:記事は執筆時の情報に基づいており,現在では異なる場合があります)

ライブラリのバージョンなどに注意

図3●Strutsの注意点
図4●メンテナンス性を高める
業務ロジックは,StrutsのActionとは別にEJBやJavaクラスとして実装する。また,DBアクセス・クラスはEJB(Entity Bean)やJakartaのTorqueを使うことで自動生成できる

 Strutsは優れた特徴を備えているが,注意すべき点もある(図3[拡大表示])。

 拡張性に富み自由度も高いため,Strutsの特徴や適応範囲を考慮せずに設計しても,なんとか動作はする。しかし,間違った設計を行うと,メンテナンス性や再利用性が損なわれてしまう。

 特に適用範囲には十分な注意が必要である。StrutsはJ2EE設計ガイドラインにおけるプレゼンテーション層を担うものであり,決してEJB層(業務ロジック層)をカバーするものではない。

 業務ロジックは,JavaクラスやEJBなどでStrutsのアクションとは別に実装し,それを呼び出す処理だけをActionで実装する方がよい(図4[拡大表示])。プレゼンテーション層と業務ロジック層が明確に分離されるため,業務ロジックの再利用性とメンテナンス性が向上する。

 また,StrutsはJakartaのcommonsプロジェクトのソフトウエアを多く利用している*5。Struts以外にも多くのソフトウエアがcommonsのソフトウエアを利用しているため,他のソフトウエアを組み合わせて利用する場合などに,commonsソフトウエアのバージョンに不整合が起きる可能性がある。注意されたい。

 Webアプリケーションでは,セキュリティに注意を払う必要がある。特に,インターネットに接続し,不特定多数を対象とするようなアプリケーションの場合はなおさらである。

 Strutsが提供しているJSPカスタムタグは,すべてクロスサイト・スクリプティング*6対策が施されており,悪意のある利用者によるスクリプトの実行を防ぐようになっている。

 アクセス制御はJAAS*7を利用したロール(権限)ベースのアクセス制御を,Action単位に定義することができる。サーブレット・コンテナにて認証されたユーザーに,特定のアクションを実行するロールがある場合にのみ,実行を許すよう制御することが可能である。

 Webアプリケーションでは,ページやActionが正しい順序で実行されないと,トラブルにつながる。例えば,ユーザーがブラウザ上でボタンを連続して2度クリックしたため,2重に発注や決済を行ってしまう。ブックマークなどによりページ遷移の途中から入ってきてしまったため,ウィザード形式の処理が破綻する。「戻る」ボタンを使って前のページに戻ったため,キャッシュされた古い情報が表示されたり同じ処理を2度実行してしまったりしてしまう,といったトラブルだ。

 Strutsでは,Transaction Tokenという機能により,これらの現象を検出できる。ただし,検出後の処理は開発者が作りこむ必要がある*8

 また,Struts自体は,ユーザー認証管理機能は持たない。Webアプリケーションでは,ユーザーがログイン済みかどうかチェックして,未ログインであればログイン・ページに誘導するといった機能が必要とされることがあるが,Strutsにはこのような機能はない。シンプルにするため,実装しない方針のようだ。独自に実装するか,サーブレット・コンテナのユーザー認証機能またはフィルタなどを利用する必要がある。

 また,オープンソースということで,サポート体制や日本語による技術情報に不安があると思う。有償サポートを行っている会社は日本には少ないようだ。しかし,日本語による書籍やセミナーもいくつか存在するので,情報の入手には不安はないだろう。日本人によるユーザー・コミュニティも形成されており,筆者が管理しているStrutsユーザ・メーリングリスト*9でも,有意義な情報交換が日々行われている。興味のある方は参加していただきたい。

*            *            *

 Strutsの次バージョン2.0では,Servlet2.3/JSP2.0への対応(現在はServlet2.2/JSP1.1対応)やJSTL(JavaServer Pages Standard Tag Library),JSF(Java Server Faces)タグ・ライブラリのサポートが行われる。今後もJ2EEとの親和性を考慮し開発される予定である。Webアプリケーション・フレームワークを検討されている場合には,ぜひStrutsを検討されたい。

黒住幸光(くろずみ・ゆきみつ)氏

株式会社アークシステム シニアコンサルタント。
1989年よりスーパーコンピュータ向け言語処理環境の研究に従事。1995年,生まれて間もないJavaと出会い,Javaに専念するため転職。現在,株式会社アークシステムにてオープンソース・ソフトウエアを用いたWebシステムの構築,コンサルティングを行うかたわら,雑誌への執筆,StrutsユーザML(http://www.freeml.com/info/struts-user@freeml.com)の管理,Ja-JakartaプロジェクトTurbine翻訳の取りまとめなど幅広く活動中。