• ベストアンサー

サーブレット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です。

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

> サーブレットBのdoPostメソッド内にて > サーブレットAにforwardを実行する場合に、 > 呼出されるのはサーブレットAのどのメソッドですか? doPost() のはず。実際には、forward するときの HttpServletRequest#getMethod() で取得できる文字列に従うはず。 > JSPへのforwardはできたのですが、 > サーブレットへのforwardができず悩んでいます。 forward に関して、servlet と JSP の違いはないはず(というか、JSP は自動コンパイルされる servlet だし)。 getRequestDispatcher() してるパスが間違っているのだと思います。 > サーブレットからforwardされたサーブレットで、 > そこからさらにJSPへforwardすることはできますか? コンテナの実装次第だけど、forward() は、サブルーチン呼び出しと変わらないはずなので、 回数に制限はないはず。

ssm3u
質問者

お礼

ありがとうございました。 できました。 serviceを作っことが原因で doPostが無視されていたことが動かない原因でした。

ssm3u
質問者

補足

「doPostからforwardすればdoPost」というのは、 厳密には間違いであって、正しくは 「getMethod()で取得した結果からdoPost」ですね。。 了解しました。大変解りやすく、ありがとうございます。

その他の回答 (1)

  • Harry_
  • ベストアンサー率55% (36/65)
回答No.2

サーブレットAは HttpServlet を拡張しているのだと思いますが、 service メソッドはオーバーライドしては駄目です。 HttpServlet の service メソッド内で、処理を doGet や doPost に 委譲するようになってますので、これをオーバーライドしてしまうと、 doGet も doPost も実行されなくなります。 ひょっとしたら、そのせいでサーブレットが実行されてないと 勘違いしているのかもしれません。 なんの設定もせずに forward した場合、doGet が呼ばれます。 また、forward の回数には制限はありません。

ssm3u
質問者

お礼

ありがとうございました。 当件無事解決しました。

関連するQ&A

専門家に質問してみよう