- ベストアンサー
サーブレットforward時の実行メソッドについて
初歩的な質問で失礼します。 サーブレットAに doGet, doPost, serviceメソッドを実装しています。 サーブレットBのdoPostメソッド内にて サーブレットAにforwardを実行する場合に、 呼出されるのはサーブレットAのどのメソッドですか? JSPへのforwardはできたのですが、 サーブレットへのforwardができず悩んでいます。 サーブレットのAPIを読んでもいまいちわかりません。 何かメソッドに関する制約があるのでしょうか? 上の質問は全くマト外れでしょうか? 追加ですが・・・ サーブレットからforwardされたサーブレットで、 そこからさらにJSPへforwardすることはできますか? Apache2.0.43+tomcat4.1.12+Java1.4.0_01です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> サーブレットBのdoPostメソッド内にて > サーブレットAにforwardを実行する場合に、 > 呼出されるのはサーブレットAのどのメソッドですか? doPost() のはず。実際には、forward するときの HttpServletRequest#getMethod() で取得できる文字列に従うはず。 > JSPへのforwardはできたのですが、 > サーブレットへのforwardができず悩んでいます。 forward に関して、servlet と JSP の違いはないはず(というか、JSP は自動コンパイルされる servlet だし)。 getRequestDispatcher() してるパスが間違っているのだと思います。 > サーブレットからforwardされたサーブレットで、 > そこからさらにJSPへforwardすることはできますか? コンテナの実装次第だけど、forward() は、サブルーチン呼び出しと変わらないはずなので、 回数に制限はないはず。
その他の回答 (1)
- Harry_
- ベストアンサー率55% (36/65)
サーブレットAは HttpServlet を拡張しているのだと思いますが、 service メソッドはオーバーライドしては駄目です。 HttpServlet の service メソッド内で、処理を doGet や doPost に 委譲するようになってますので、これをオーバーライドしてしまうと、 doGet も doPost も実行されなくなります。 ひょっとしたら、そのせいでサーブレットが実行されてないと 勘違いしているのかもしれません。 なんの設定もせずに forward した場合、doGet が呼ばれます。 また、forward の回数には制限はありません。
お礼
ありがとうございました。 当件無事解決しました。
お礼
ありがとうございました。 できました。 serviceを作っことが原因で doPostが無視されていたことが動かない原因でした。
補足
「doPostからforwardすればdoPost」というのは、 厳密には間違いであって、正しくは 「getMethod()で取得した結果からdoPost」ですね。。 了解しました。大変解りやすく、ありがとうございます。