先日より取り組んでいた、Servletベースのフレームワークの β版 が完成しました。
DIコンテナに思いっきり依存しているので、現状ではSeasar2を使う必要があります。
ただし、SpringFramework上で動作させるのもそんなに難しくなさそう。
作成するServletはPOJOで作成できて、かつ、充分な記述力のなかった url-pattern を、正規表現で指定できるようになりました。
このあたりは S2Struts や S2JSF の実装を参考にしているので、S2プロダクト群に慣れている人にはとっつきやすいと思います。
ビューへのフォワードなどの設定は Tigerアノテーションを使うようにしたので、ソース書きながらサクサク設定も組み込んでいけます。
このアノテーション作法はS2Strutsのほぼパクりになってますが。。。w
HogeServlet.java
@Servlet( urlPattern = "/hoge\\.html", parameter = "Command" )
public interface HogeServlet {
@ServletForward( path = "/WEB-INF/jsp/hoge.jsp" )
public String HOGE = "hoge";
@ServletForward( path = "hoge.html", redirect = true )
public String POSTED = "posted";
public String doGet();
public String doPostMessage();
}
HogeServletImpl.java
public class HogeServletImpl implements HogeServlet {
private HogeService hogeService;
public int getHogeService() {
return hogeService;
}
public void setHogeService(HogeService hogeService) {
this.hogeService = hogeService;
}
private HogeDto hogeDto;
public int getHogeDto() {
return hogeDto;
}
public void setHogeDto(HogeDto hogeDto) {
this.hogeDto = hogeDto;
}
private List<Message> messages;
public String getMessages() {
return messages;
}
public String doGet() {
messages = hogeService.getMessages();
return HogeServlet.HOGE;
}
public String doPostMessage() {
hogeService.doSomething();
return HogeServlet.POSTED;
}
}
こんな感じですね。
ServiceはDIコンテナからのインジェクション、Dtoはフォームデータをセット、messagesはこのサーブレットでの処理が終わったら自動的にrequestの属性として抽出される(JSFちっく)という仕様です。
また、@Servletアノテーションで指定してある parameter値 の名前を持つフォームを見て、実行するメソッドが変わります。
上記の例では、doPostMessageを実行するには、Command=messageをPOSTする、といった感じです。
指定がなければ、doGet()かdoPost()が実行されることになります。
また、ご覧の通り完全なPOJOなので、テストも容易に実行できることになります。
まだβ版なのでこれからリファクタリングして、もう少し盛り込みたい機能があるのでそちらも実装、納得がいくレベルになったらリリースしようと思います。


コメントする