オレオレ・アプリケーションサーバを作ってみる
なんとなく、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クラスの派生クラスをいっぱい作って、ファイルアップロードに対応して、、、、
って道のりは長いな。と思ったところで止めました。
以上。