• ベストアンサー

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

  • ssm3u
  • お礼率70% (42/60)
  • Java
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • 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

  • サーブレットを動かすためには?

    Tomcat5.0を使ってサーブレットを動かそうとしましたが、動きません。 JSPは問題なく動きます。 サーブレットのコンパイルは問題なくできているようです。また、ほかで動いていたものをためしに使ってみたのですが、動きません。 何か、設定をしなければならないのでしょうか。 現在は、サーブレットを動かそうとすると、 HTTPステータス 500 - type 例外レポート メッセージ 説明 The server encountered an internal error () that prevented it from fulfilling this request. 例外 javax.servlet.ServletException: パス /yoko/servlet/test にサーブレットインスタンスを割り当てられません org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:388) org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:133) javax.servlet.http.HttpServlet.service(HttpServlet.java:689) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 原因 java.lang.IllegalAccessException: Class org.apache.catalina.core.StandardWrapper can not access a member of class test with modifiers "" sun.reflect.Reflection.ensureMemberAccess(Reflection.java:57) java.lang.Class.newInstance0(Class.java:302) java.lang.Class.newInstance(Class.java:261) org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:369) org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:133) javax.servlet.http.HttpServlet.service(HttpServlet.java:689) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) このように表示されています。 何が原因なのか、対処策など、わかることがありましたらお教えください。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • JSP/サーブレットについて

    JSP/サーブレットのMVCモデル風にJSP、サーブレットと、Beanを作成したばあい、サーバーに各プログラム?をどう配置し、プログラム内でのお互いの具体な指定の仕方がぴんときません。 指定の仕方とはたとえばサーブレットからJSPを呼ぶときgetServletContext().getRequestDispatcher("xxxxx/aaaaaa.jsp").forward(......); とコーディングするとおもいますが、この場合のxxxxxと実際にサーバーに配置する場合の関連です。 サーブレットは...../WEB-INF/classesに置くとか、Beanは...../WEB-INF/classes/パッケージ名に配置するのはわかります。JSPは通常どこにおくのでしょうか?たとえばC:\Tomcat\webapps\examplesなのか C:\Tomcat\webapps\examples\jspなのか? その場合プログラムないではどう指定するのが一般的なのでしょうか? 文章がわかりにくくてすいません。 開発環境はWindowsXP,Apache,Tomcatの場合です。

  • doGetとdoPostの違い

    それぞれブラウザからのリクエストの種類に対応する メソッドがdoGet,doPost。 doGetはブラウザからGETでそのサーブレットに リクエストがあった時に、処理が始まるメソッド、 doPostは同じようにPOSTを受け取った時に動き出す ・・・・・ということなのですが、 doGetもdoPostも、中身のコーディングの仕方としては 同様でいいのでしょうか? いま、doGetでリクエストに対応する処理をうけつけて いるのですが、255バイトまでなのでdoPostのほうが いいということがかかれていました。 これは、ブラウザ:Servletのメソッドで対応してれば いいだけで、結局は送信量の違いだけですか? そのへんがよくわかってないので教えてください。 ちなみに、doGetでやってる処理は、 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Bean(workBean)のインスタンス作成 wk = new work_Bean(); //Bean処理実行 wk.Work(); ・ ・ ・ ・ //BeanをJSPに渡すためにHttpServletRequestオブジェクトにセット request.setAttribute("wk",wk) ; //ViewであるJSPを呼び出す RequestDispatcher rDispatcher = request.getRequestDispatcher("/kanri_JSP.jsp"); rDispatcher.forward(request,response); } こんなかんじでしてます。 あとは、ネットで、人のサンプルとかみると doGetメソッドに処理をかいており、doPostでは doGet(request,response);として doGetをよんでたりするんですが、 これは、PostでもGetと同様の処理ができると いうことですか? 基本的な質問過ぎるかとおもいますがおしえてください。

    • ベストアンサー
    • Java
  • サーブレットの実行について

    サーブレットの実行について http://www.hellohiro.com/servlet.htm こちらを参考しながら設定してみたのですが、 アクセスしても404エラーでページが表示されません。 Tomcatをインストールし http://localhost:8080 にてindex.jspが表示されることは確認できました。 Tomcat起動後 http://localhost:8080/manager/htmlからアプリケーションjavahelloを設定しました。 そして サーブレットファイル(A.class)を[Tomcatのフォルダ]\javahello\WEB-INF\classesの下にコピーし、 http://localhost:8080/javahello/servlet/A とブラウザにしてすると404エラーになってしまいます。 何か設定が足りていないのでしょうか? どなたか教えてください。よろしくお願いします。 環境 Windows XP Tomcat 5.5

    • ベストアンサー
    • Java
  • サーブレットインスタンスを割り当てられません・・・とは

    データベースを作成中にサーブレットでのエラーがどうしてもわかりません・・・。 設定のファイル(web.xmlやserver.xml)のファイルがおかしいのか、サーブレットの配置がおかしいのか、プログラム自体がおかしいのか・・・どうなのでしょうか? エラーは以下のように出るんですが・・・ HTTPステータス 500 - -------------------------------------------------------------------------------- type 例外レポート メッセージ 説明 The server encountered an internal error () that prevented it from fulfilling this request. 例外 javax.servlet.ServletException: パス /rits/servlet/rits.SrvMain にサーブレットインスタンスを割り当てられません org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:388) org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:133) javax.servlet.http.HttpServlet.service(HttpServlet.java:689) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 原因 java.lang.OutOfMemoryError: Java heap space 注意 原因のすべてのスタックトレースは、Apache Tomcat/5.5.20のログに記録されています -------------------------------------------------------------------------------- Apache Tomcat/5.5.20 sampleのサーブレットなどはちゃんと表示されるのですがどうしてでしょうか・・?? 原因などがわかれば教えてください。 ちなみにweb.xmlはinvokerを有効にして使っています。 よろしくおねがいします。

  • RequestDispatcher.forwardメソッドで遷移する際のURL

    お世話になります。 JSP/サーブレットを使用してwebアプリケーションを作成しています。 タイトルの通りRequestDispatcher.forwardメソッドで遷移する際のURL についてうまくいかず、原因がわからない為質問させて頂きます。 ご教授宜しくお願い致します。 Aproject/jsp/login.jsp Aproject/jsp/top.jsp Aproject/WEB-INF/src/servlet/Login.java という3つのファイルを使用しています。 login.jspにて<form action="../Login" method="post">で Login.javaサーブレットにIDとパスワードを渡し、 サーブレットで認証を行ったあと RequestDispatcher.forwardメソッドにて以下のように 遷移するようになっています。 RequestDispatcher rd = request.getRequestDispatcher("./jsp/top.jsp"); rd.forward(request, response); 遷移はうまくいくのですが、top.jspが表示される時のURLが http://localhost:8080/Aproject/jsp/top.jspとなるはずが、 http://localhost:8080/Aproject/Login となってしまいます。 web.xmlの記述は <servlet> <servlet-name>Login</servlet-name> <servlet-class>servlet.Login</servlet-class> </servlet> <servlet-mapping> <servlet-name>Login</servlet-name> <url-pattern>/Login</url-pattern> </servlet-mapping> としています。 forwardメソッドではなく、sendRedirectメソッドを使用した場合 http://localhost:8080/Aproject/jsp/top.jsp とうまくいきます。 どのような原因が考えられますでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • Java
  • サーブレットの実行について

    はじめまして。迷い猫です。 Javaを始めて、まだ2週間の初心者です。 これから、Javaを使って開発をしていこうと猛勉強中です。 DBを使った処理で、コンパイルは通るのですが、実行をするとエラーが出てしまいます。 JDBCの設定かなと思い、調べてみたのですがわからないため、ここに質問をさせていただきました。 エラー内容の詳細ですが、 ********** START exception javax.servlet.ServletException: サーブレットの実行により例外を投げました filters.SetCharacterEncodingFilter.doFilter(Unknown Source) root cause java.lang.NoSuchMethodError: study.struts.model.biz.LogonAuth.authentication(Ljava/lang/String;Ljava/lang/String;)V study.struts.action.LogonAction.execute(Unknown Source) org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525) javax.servlet.http.HttpServlet.service(HttpServlet.java:763) javax.servlet.http.HttpServlet.service(HttpServlet.java:856) filters.SetCharacterEncodingFilter.doFilter(Unknown Source) ********** END 長くなって申し訳ありませんが、わかる方いらっしゃいましたら、どうかご教授宜しくお願い致します。 開発環境(クライアント) ・WindowsXP ・j2sdk1.4.2_02 ・Tomcat5 ・Struts1.1

    • ベストアンサー
    • Java
  • サーブレットが動かなくなりました・・・

    Apache+Tomcatで環境(以後、環境A)を作り Webアプリが正常に動いていたのですが、 別の環境(以後、環境B)で動いていたWebアプリを 環境Aの$CATALINA_HOME/webapps以下にコピーしたところ 下記のエラーが出てサーブレットが動かなくなってしまいました。 (JSPは動きます) 動作環境は以下になります。 OS:Redhat Enterprise Linux AS4 Update5 Tomcat:5.5.25 JDK:1.6.0_03 環境A、B共に同環境で Webアプリも同じものが動いていました。 対処法の分かる方がいらっしゃいましたら よろしくお願いします。 java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet java.lang.ClassLoader.defineClass1(Native Method) java.lang.ClassLoader.defineClass(ClassLoader.java:620) java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) java.net.URLClassLoader.defineClass(URLClassLoader.java:260) java.net.URLClassLoader.access$000(URLClassLoader.java:56) java.net.URLClassLoader$1.run(URLClassLoader.java:195) java.security.AccessController.doPrivileged(Native Method) java.net.URLClassLoader.findClass(URLClassLoader.java:188) java.lang.ClassLoader.loadClass(ClassLoader.java:306) sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) java.lang.ClassLoader.loadClass(ClassLoader.java:251) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1277) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1208) org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:370) org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:134) javax.servlet.http.HttpServlet.service(HttpServlet.java:690) javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

  • サーブレットについて

    WIN2000 j2sdk1.4.1_06 Tomcat 4.1.24です。 よろしくお願いします。 困っているのは、はサーブレットが動かないということです。 コンパイルすると C:\j2sdk1.4.1_06\bin>javac Hello.java パッケージ javax.servlet は存在しません。 import javax.servlet.*; というエラーになります。 j2sdkとトムキャットをインストールし、 PATH等の設定も行い Tomcatの起動も行なってからやっているのですが、 JSPはちゃんと表示してくれるのですが、 サーブレットだけ動きません。 APIを見ると確かに標準のものには載っておらず サーブレットの方に載っているようなのですが、 何か他に設定もしくは、インストールする必要が あるのでしょうか?

    • ベストアンサー
    • Java
  • Javaサーブレット

    Javaサーブレットの初心者です。 「標準 MySQL 改訂第3版」(2007,3月発行)という本でMySQLを勉強しようと始めたのですが、それ以前の場所で詰まってしまいました。 本の流れは  Apache,MySQL,Tomcat,J2SEをインストール → Apacheの動作確認 → Tomcatの動作確認 → ApacheとTomcatを連携させる。(ここまでは正常に動いています。)→Javaサーブレットの動作確認 ここでブラウザから http://localhost/java/Test と入力すると 「Hello Java」と表示されるはずなのですが HTTPステータス 404 - /java/Test というエラー画面になってしまい、表示されません。 すべて本に書いてあるとおりにやりました。 ファイルの中身なども何度も見直しました。 なぜ表示されないのか教えてください。 お願いします。