easyaction web application framework 2007.1.24更新
easyactionは,簡単,やさしいを目標にしたWebアプリケーションフレームワークです。Webアプリケーションを ガンガン作るためのフレームワークとなることを目指しています。
strutsと同じようにMVCモデル2 アーキテクチャを採用しています。基本的にstrutsと似たような構造ですが,リクエストプロセッサ,アクション フォームBean,アクションフォワードなどはありません。また,struts-config.xmlのような設定ファイルもありません。 とにかくシンプルです。もちろん,サニタイズ,文字エンコーディング,フロー制御機能,ログ機能,エラー制御機能 は備えています。
基本構成は以下のとおりです。赤枠がeasyactionになります。
WebブラウザからのリクエストをActionServletが受け付け,そのリクエストに対応するActionクラスを生成し実行します。 このとき他のJavaクラスやJavaBeansなどを利用したりもします。次にJSPを呼び出します。JSPでは,表示に必要な情報を リクエストスコープやセッションスコープのJavaBeansなどから取り出し,JSPに埋め込んでWebブラウザ側へ返します。
詳細なクラス図は以下のとおりです。
個人的にWebアプリケーションフレームワークはstrutsで決まりと考えていました。しかし,独自のしくみを 学ぶこと,バージョンアップごとの変更についていくこと,将来が不安なこと,ページを追加するごとにstruts-config.xml を書かなければならないことに嫌気がさして,このフレームワークを作成しました。
私自身,このフレームワークを利用してWebアプリケーションをガンガン作っています。正確に言うと, 私が利用していたしくみをフレームワークとして取り出したものがeasyactionということになります。 ただし,小規模アプリケーション向けといえるでしょう。
特徴は,
struts-config.xmlのような設定ファイルが不要なのは,リクエストされたアドレスから対応するActonクラスの呼び 出しを簡単な規則で実現しているからです。具体的には,「先頭文字を大文字に変換し,.doを削除し,Actionを接続する」 という規則です。例えば,login.doがリクエストされたとき,LoginActionが対応するActionクラスになります。そして, そのActionクラスをクラスパスから自動的に探し出し呼び出しています。よって設定ファイル不要で,ただLoginActionを 実装すればよいということになります。
easyactionはオープンソースソフトウェアです。自由に利用してください。
ファイル一覧
ここでは,次の環境で実行していきます。
JDKやTomcatのインストールは他のサイトを 参考にしてください。ちなみにこのサイトは素晴らしいです。
EclipseやWTPのインストールも 他のサイトを参考にしてください。ここは少し古いですが・・・
そして,easyactionをダウンロードし,解凍してください。
解凍してできたeasyaction-0.9.1のフォルダの中のwebappsフォルダの中に入っているeasyaction-blank.warファイルを Tomcatのフォルダ\webappsにコピーします。
Tomcatを起動します。しばらくすると上でコピーしたファイルが解凍されます。
ブラウザを起動して次のURLを指定します。http://localhost:8080/easyaction-blank/
解凍してできたeasyaction-0.9.1のフォルダの中のwebappsフォルダの中に入っているeasyaction-helloworld.war ファイルをTomcatのフォルダ\webappsにコピーします。
Tomcatを起動します。しばらくすると上でコピーしたファイルが解凍されます。
ブラウザを起動して次のURLを指定します。http://localhost:8080/easyaction-helloworld/
サンプルを開始します。をクリックすると
名前入力欄に山口秀昭と入力し送信ボタンをクリックすると
input.jspで<form method="post" action="hello.do">とhello.doを呼び出しているので,easyactionの規則 (先頭文字を大文字に変換し,.doを削除し,Actionを接続する)によりHelloActionクラスのインスタンスが生成されて実行されます。
<?xml version="1.0" encoding="UTF-8"?> <!-- ★のところは必要に応じて変更してください。その他は,基本的に変更や削除はしないでください。 動作しなくなる場合があります。もちろん,追加は自由です。 当たり前のことですが,このweb.xmlを変更したら,このコンテキストを再ロードする必要があります ので注意してください。変更が反映されません。再ロードの方法がわからない場合はwebコンテナを 再起動してください。 --> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <!-- ★あなたのプロジェクト名などに変更してください。 --> <display-name>easyaction-helloworld</display-name> <!-- ========== フィルタの設定 =================== --> <filter> <filter-name>CharacterEncoding</filter-name> <filter-class> easyaction.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <!-- ★クライアントの文字コードを選択してください。 --> <param-value>Windows-31J</param-value> <!-- <param-value>EUC-JP</param-value> <param-value>UTF-8</param-value> <param-value>JISAutoDetect</param-value> --> </init-param> </filter> <!-- フィルタの追加はここから下 --> <!-- ========== フィルタマッピングの設定 =================== --> <filter-mapping> <filter-name>CharacterEncoding</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <!-- <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> --> </filter-mapping> <!-- フィルタマッピングの追加はここから下 --> <!-- ========== サーブレットの設定 =================== --> <!-- 起動時に一度だけ実行される初期化サーブレット --> <servlet> <servlet-name>EasyActionInit</servlet-name> <servlet-class> easyaction.EasyActionInit </servlet-class> <init-param> <param-name>log4jInitFile</param-name> <param-value>WEB-INF/conf/log4j.xml</param-value> </init-param> <init-param> <param-name>logLocation</param-name> <!-- ★ログの記録場所(ディレクトリ)を指定してください。 --> <param-value>WEB-INF/log</param-value> </init-param> <load-on-startup>1</load-on-startup> <!-- 起動時に実行されます --> </servlet> <!-- リクエスト受付窓口サーブレット --> <servlet> <servlet-name>ActionServlet</servlet-name> <servlet-class> easyaction.ActionServlet </servlet-class> <!-- ★必要に応じて初期化パラメータを記述してください。 --> <!-- 初期化パラメータを利用する場合は,ActionServletInitインタフェースをimplementsしたクラスを 書かなければなりません。そして,下記のコメントをはずし,そのクラス名を完全修飾名で設定してください。 下記はクラス名がactionweblog.init.AppInitの場合の例です。 --> <!-- <init-param> <param-name>actionServletInitClassName</param-name> <param-value>actionweblog.init.AppInit</param-value> </init-param> --> <!-- 初期化パラメータの追加はここから下 --> </servlet> <!-- ========== サーブレットマッピングの設定 =================== --> <servlet-mapping> <servlet-name>ActionServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- ========== ウェルカムページの設定 =================== --> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>easyaction-helloworld</title> </head> <body> <h1>easyaction-helloworldサンプル</h1> <p>テキストボックスへ入力された文字が次のページでそのまま表示されます。</p> <a href="input.jsp">サンプルを開始します。</a> </body> </html>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en"> <%@ page language="java" pageEncoding="SHIFT_JIS" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>名前の入力</title> </head> <body> <h1>easyaction-helloworldサンプル</h1> <jsp:include page="errormessage.jsp" flush="true" /> <p>テキストボックスにあなたの名前を入力し,送信ボタンを押してください。 次のページで,あいさつ文が表示されます。何も入力せずに送信ボタンを押すとエラーメッセージが表示されます。</p> <p>日本語も正しく表示され,サニタイズもされています。</p> <form method="post" action="hello.do"> 名前を入力してください:<input type="text" name="yourName" value="${requestScope.yourName}"><br /> <input type="submit" name="go" value="送信"> </form> </body> </html>
package helloworld.action; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import easyaction.Action; public class HelloAction extends Action { public String execute(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String nextPage = "/hello.jsp"; ///(1)入力 String yourName = getParameter(request, "yourName"); if(yourName == null || yourName.equals("")){ setErrorMessage("名前を入力してください。"); } ///(2)処理 if(existErrorMessage()){ request.setAttribute("errorMessage", getErrorMessage()); nextPage = "/input.jsp"; return nextPage; } request.setAttribute("yourName", yourName); ///(3)出力 return nextPage; } }
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en"> <%@ page language="java" pageEncoding="SHIFT_JIS" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>あいさつ</title> </head> <body> <h1>easyaction-helloworldサンプル</h1> <h2>ようこそ,${requestScope.yourName}さん</h2> <p>${requestScope.yourName}さん,easyactionのシンプルさをご堪能ください。</p> <p><a href="input.jsp">もう一度実行します。</a></p> </body> </html>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en"> <%@ page language="java" pageEncoding="SHIFT_JIS" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <c:if test="${requestScope.errorMessage != null && requestScope.errorMessage != ''}"> <p><strong style="color:red;">エラー発生</strong></p> <p><strong style="color:red;">${requestScope.errorMessage}</strong></p> </c:if>
easyactionのAPIのjavadocです。ダウンロードした easyactionのdocディレクトリにも含まれています。