先日より、Spring + Struts + Hibernateの3つ巴作戦を敢行中なのですが、このうちの Struts君 にイマイチ疑惑が。
何かといいますと、ごく普通に表示のみしたいページ(でもDBアクセスしたい)の場合、JSPだけを使うことになるのでしょうが、DBアクセスした結果を表示したい場合にはどうするんでしょ?
JSPにビジネスロジックに相当する部分は、(たとえDB呼び出しであっても)記述したくないでしょ。
その場合、表示をするだけの部分にもかかわらず、xx.doっていう拡張子になってカッコ悪い。。。
あと、ディレクトリインデックスはどうするんでしょ?
/index.do
とかになるのかなぁ・・・?
カッコ悪すぎる!!!!
ヤダヤダ、絶対にやだ!!!
#みなさん、どうしてます?
これらの問題点回避、および SpringFramework を捨てたくない僕としましては、生Servletを利用することに決めました。
Struts君には、何でもかんでもやってもらうのではなくて、なんらかのデータを送信したいときだけ登場していただくようにします。
#これって、極めて普通の考え方だ。。。
SpringFrameworkは、WebApplicationContextUtils経由でWebApplicationContextを呼び出して、Bean取得、という手法を採用。
ビジネスロジックBeanを呼び出して、処理してもらって、結果受け取ってJSPへ転送。
極一般的なServletの流れができました。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Business business = (Business) WebApplicationContextUtils
.getWebApplicationContext(getServletContext()).getBean(
"business");
business.hogehoge();
request.getRequestDispatcher("/WEB-INF/jsp/xxx.jsp").forward(request,
response);
}
生Servletの利点として、GET、POSTの処理の切り分けがスッキリできることでしょうか。
SpringFramework上で、プレーンな形でのServletが扱えないのがちょっと残念。
でもWebApplicationContextUtils経由でのSpring呼び出しがほぼ同等であろうことがようやくわかりました。
#理想としては、Servletに対してパラメータを入れてくれた状態でdoGetとかdoPostを呼び出してくれればなぁ。。。<こちらのフレームワーク、そのうち作るかも。
あとは、そのServletに対して自由にurl-patternを設定すれば、そのURLでアクセスできるようになるという感じですな。
この辺も、拡張子を制限されるStrutsなどと比べて自由に設定できていい感じ。
ディレクトリインデックス問題は、例えば、IndexServletを作って、url-patternを "/index.html" で設定。
こうすることで、コンテナがIndexServletを起動してくれます。
この辺も、制御が移らないと(Struts用のurl-patternでアクセスされないと)何もできないStrutsと比べて、コンテナ側が把握してくれるので良い♪
この境地に行き着くまでに、2週間くらいかかりましたが、その分Strutsの内部動作であったりとか、Springの内部動作であったりとかを勉強できたので、良しとしましょう。


コメントする