Stripes Frameworkどうよ。その2 〜 かわいいURLあるよ。
JavaでURLをカスタマイズする場合、Url Rewrite Filter を使ったりすのですが、Stripesには、標準でその機能があります。しかーし、公式のサイトでもその詳細の説明が見つからない。。
まず、クラスと、URLのデフォルトの紐づけについて。
/hoge/Calc.action
というURLにアクセスすると
action.hoge.CalcActionBean
というクラスがコールされます。これは、名称の規約です。
で、URLのカスタマイズについて
package action; import net.sourceforge.stripes.action.ActionBean; import net.sourceforge.stripes.action.ActionBeanContext; import net.sourceforge.stripes.action.ForwardResolution; import net.sourceforge.stripes.action.HandlesEvent; import net.sourceforge.stripes.action.Resolution; import net.sourceforge.stripes.action.UrlBinding; @UrlBinding("/calc/{$event}/{arg1}/{arg2}") public class CalcActionBean implements ActionBean { private ActionBeanContext context; private Integer arg1; private Integer arg2; private Integer result; @HandlesEvent("add") public Resolution add() { result = arg1 + arg2; return new ForwardResolution("/calc.jsp"); } @HandlesEvent("subtract") public Resolution subtaract() { result = arg1 - arg2; return new ForwardResolution("/calc.jsp"); } // getter,setter 割愛 }
UrlBindingアノテーションを使って紐づけるURLを指定します。
{$event} の部分は、URLのパスでイベントを指定している感じです。実行したいメソッドに紐づけることができます。
{arg1}, {arg2} は、URLのパスをActionBeanのフィールドに紐づけています。
/calc/add/2/1
にアクセスすると、CalcActionBean#add メソッド実行され、2+1が計算されます。
で、後回しにしましたが、web.xmlにFilterの設定が必要です。
<filter> <filter-name>DynamicMappingFilter</filter-name> <filter-class>net.sourceforge.stripes.controller.DynamicMappingFilter</filter-class> </filter> <filter-mapping> <filter-name>DynamicMappingFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping>
以上