読者です 読者をやめる 読者になる 読者になる

オレオレ・アプリケーションサーバを作ってみる

なんとなく、JDKだけで、依存ライブラリなしでアプリケーションサーバを作ってみようと試みました。フレームワークでなく、アプリケーションサーバServlet APIは無視です。
ソース
以下、使い方。

app.properties

まずは、設定。
クラスパスが通っている所に、app.propertiesを配置します。

port=8080
appBasePackage=action

portは、ポート番号。appBasePackageは、アクションクラスを配置するベースパッケージ。

mimetype.properties

静的リソースとして扱う、拡張子、mimetypeを定義します。

html=text/html
css=text/css
js=text/javascript
jpg=image/jpeg
png=image/png
gif=image/gif

拡張子=mimeタイプの形式。

add.html

そして例によって足し算アプリ。add.htmlは、静的リソース扱いで、クラスパスの通っているところから、webapp/add.htmlと配置します。

<html>
<head>
</head>
<body>
<form action="/add">
<input type="text" name="arg1" />
+
<input type="text" name="arg2" /><br/>
<input type="submit" />
</form>
</body>
</html>

AddAction.java

package action;

import com.blogger.tcuri.appserver.Action;
import com.blogger.tcuri.appserver.Resolution;
import com.blogger.tcuri.appserver.StringResolution;

public class AddAction extends Action {

    @Override
    public Resolution execute() throws Exception {
        Integer result = Integer.parseInt(param("arg1")) + Integer.parseInt(param("arg1"));
        return new StringResolution("text/html", result.toString());
    }
}

Actionクラスを継承します。param("hoge") でGETのパラメータが取得可能。StringResolutionでテキストのレスポンスを返します。
URLとアクションクラスのマッピングは、デフォルトで、

/aaa/bbb/ccc

は、

action.aaa.bbb.CccAction

のクラスのexecuteメソッドが実行される感じ。
今のところ、GETのパラメータ読んでテキスト返すだけです。
あとは、ちゃんとURLデコードして、POSTのパラメータ読めるようにして、クッキー読み書きできるAPI作って、JSONリクエスト扱えるようにして、色んな形式のレスポンス返せるようにResolutionクラスの派生クラスをいっぱい作って、ファイルアップロードに対応して、、、、
って道のりは長いな。と思ったところで止めました。

以上。