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ディレクトリにも含まれています。