S2再入門以前の仕様確認

S2に再入門の宿題の続き。次は、いろいろな仕様の確認。

疑問に思ったことが、どの仕様書で、あるいはソースコードのどこで定義されているかを見てみる。

(p.33)WEB-INF以下に直接アクセスできないのはなぜか

初めて感じた疑問ではないけれど、この機会に解決。

WEB-INF以下のファイルやフォルダに直接アクセスできないのは、JavaServletがそういう作り、つまり仕様だから。

A special directory exists within the application hierarchy named "WEB-INF". This directory contains all things related to the application that arent in the document root of the application. The WEB-INF node is not part of the public document tree of the application. No file contained in the WEB-INF directory may be served directly to a client by the container.

Java Servlet Specification Version 2.5 MR6

「WEB-INF」という名の特別なディレクトリがある。(中略)WEB-INFは、アプリケーションのパブリックなドキュメントツリーではない。

そのため、直接アクセスしても見えない。

(p.46)「redirect要素のデフォルトはfalse」それはどこで設定しているのか


redirect要素のデフォルトはfalseで、自分自身のサイトに対してフォワードで遷移します。

デフォルト値はどこで設定してるの?という素朴な疑問。

答えは、org.seasar.struts.annotationパッケージのExecuteインタフェースに書かれている。

    /**
     * 正常終了時に遷移先にリダイレクトするかどうかです。
     * 
     */
    boolean redirect() default false;

このredirectメソッドが、org.seasar.struts.customizerパッケージのActionCustomizerクラスのsetupMethodメソッドから呼び出される。さらに、setupMethodメソッドは、同じActionCustomizerクラスのcreateActionMappingメソッドから呼び出される。

詳細は追えていないけれど、定義箇所を見つけたので、今はひとまずOK。

ところで、sa-strutsのコードを読むには、seasar2はもちろん、s2-tigerもインポートした方がいいんですね。最初、sa-strutsだけをインポートした状態で読もうとして、プロジェクトが見つからないエラーでEclipseの画面を真っ赤にしてしまった。当たり前か。