RequestDispatcher.forwardメソッドで遷移する際のURLについての質問

このQ&Aのポイント
  • JSP/サーブレットを使用してwebアプリケーションを作成しています。タイトルの通りRequestDispatcher.forwardメソッドで遷移する際のURLについてうまくいかず、原因がわからないので質問させて頂きます。
  • login.jspにて<form action="../Login" method="post">でLogin.javaサーブレットにIDとパスワードを渡し、サーブレットで認証を行ったあとRequestDispatcher.forwardメソッドにて遷移するようになっています。遷移はうまくいくのですが、top.jspが表示される時のURLがhttp://localhost:8080/Aproject/jsp/top.jspとなるはずが、http://localhost:8080/Aproject/Loginとなってしまいます。
  • forwardメソッドではなく、sendRedirectメソッドを使用した場合は正しくhttp://localhost:8080/Aproject/jsp/top.jspに遷移することができます。
回答を見る
  • ベストアンサー

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
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • bgbg
  • ベストアンサー率53% (94/175)
回答No.1

そういう仕様です。 RequestDispatcherはリクエスト(URL)から実体のデータ(JSP)を隠匿します。

njomojo
質問者

お礼

なるほど納得。お手数をお掛けしましてすみませんでした。 ありがとうございました!

関連するQ&A

  • RequestDispatcher でURL引数の扱い

    はじめまして。SINといいます。 今、ServletとJSPを使っているんですが、JSPからServletにはURL引数を渡す ことはできているんですが、ServletからJSPにはURL引数を渡すことはできるのでしょうか? 色々と調べていたんですが、わからず困っています。 SrvletからJSPへはRequestDispatcher の forward メソッドを使っています。 どなたか知恵をお貸しください。 下記にソースを抜粋したものを書きました。 String nextUrl = "/xxxx/xxxxx.jsp?aaa"; ServletContext context = request.getSession().getServletContext(); RequestDispatcher requestDispatcher = context.getRequestDispatcher(nextUrl); requestDispatcher.forward(request, response);

  • Tomcatにおけるサーブレットの呼び出し

    tomcatに関してですが、現在サーブレットからjspを呼び出すようなことをしたいと思い、web.xmlを以下のように設定し、”http:localhost:8080/servlet/Login”としても『HTTP Status 404 - 』が返却されます。jspからサーブレットを呼び出すことはできるのですが・・・(この場合、jspファイルをWEB-INFの直下にディレクトリを作成するとやはりアクセスができませんでした。WEB-INFと同レベルに置けばアクセスは可能でした。)。 どなたかわかる方がいれば教えて下さい! よろしくお願いします。 --------------- 環境 --------------- Windows2000Server eclipse ver2.1.1 tomcat ver4.1 --------------- ディレクトリ構成 --------------- WEB-INF Lclasses | LLogin_serv.java Ljsp LLogin.jsp --------------- web.xml --------------- <?xml version="1.0" encoding="shift_jis"?> <!DOCTYPE web-app PUBLIC "-//SUN Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>Login</servlet-name> <servlet-class>serv.Login_serv</servlet-class> </servlet> <servlet-mapping> <servlet-name>Login</servlet> <url-pattern>Login</url-pattern> </servlet-mapping> </web-app> 補足:tomcat-confにあるweb.xmlの『invoker』はコメントを外し有効にしてます。

    • ベストアンサー
    • Java
  • 【servlet】フォワードを使った画面遷移

    java,サーブレット初学者です。表題の通り、フォワード を使って画面遷移を試みています。 以下のコードを記述しリンクをクリックすると確かに画面遷移はできるのですが、 フォワードが出来ているならURLの最後が【/Test1】になるのではないかと考えました。 ですが実際は【/NewFile2】となっているため、フォワードが出来ていないのかと思います。 どの様にしたら前者のような結果になるでしょうか。 ご教授頂きたいです。 サーブレット↓ package sample; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/Test1") public class Test1 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher br = request.getRequestDispatcher("html/NewFile2.html"); br.forward(request, response); } } 遷移前の画面↓ <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>テスト</title> </head> <body> <h2>sample</h2> <p>テストです</p> <a href ="/servlet_dayo/html/NewFile2.html">画面遷移する</a> </body> </html> 遷移先↓ <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>テスト</title> </head> <body> <p>遷移先</p> </body> </html> サーバー:Tomcat8.5 os:macos を使用しています。どうぞよろしくお願いします。 ※OKWAVEより補足:「Webシステム開発」についての質問です。

    • ベストアンサー
    • Java
  • サーブレット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です。

    • ベストアンサー
    • Java
  • JSPからサーブレットを呼び出す際に404エラー

    現在、tomcatでサーブレット/JSPの勉強をしています。 参考書に載っている、jspの入力画面で入力した値をサーブレットで受け取り、そのまま表示させるようなサンプルを作成しています。 JSPの入力画面は表示できるのですが、値を入力してサーブレットに移動する際、404エラーが出てしまいます。 ・ファイルの配置 basic |-input |...|-echo.jsp |-WEB-INF |...|-src |......|-input |.........|-EchoServlet.java |...|-classes |......|-input |.........|-EchoServlet.class |...|-web.xml ・echo.jsp内のサーブレットのパスに関する記述 <FORM ACTION="../servlet/input.EchoServlet"> ・web.xmlの記述 <servlet> <servlet-name>EchoServlet</servlet-name> <servlet-class>input.EchoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>EchoServlet</servlet-name> <url-pattern>/servlet/EchoServlet</url-pattern> </servlet-mapping> tomcatの/confのinvokerのコメントは外していません。 過去の質問も調べてみて、上記の記述の辺りがおかしいのではないかと 思うのですが、、お気付きの点がありましたら教えて頂けないでしょうか。

    • ベストアンサー
    • Java
  • JSPファイルは参照できましたが、サーブレット不可

    JSPファイルは参照できましたが、サーブレットが上手く行きません Eclipse(Ver3)+Tomcat6を使用し、「サーブレット&JSP 逆引き大全」のコーディングを行っております。 JSPファイルは参照できましたが、サーブレットが上手く行きません 表示しようとすると下記エラーが出ます。 The requested resource (/myapp/Sample014/) is not available. ◎web.xmlの設定 [省略]・・・・・・・・・・・・ <servlet> <servlet-name>Sample014</servlet-name> <servlet-class>com.gokui.Sample014</servlet-class> </servlet> <servlet-mapping> <servlet-name>Sample014</servlet-name> <url-pattern>/Sample014</url-pattern> </servlet-mapping> [省略]・・・・・・・・・・・・ ◎ロケーション D:\Users\ueda\workspace\myapp\WEB-INF\web.xml ◎状態 ・http://localhost:8080/myapp/Sample015.jsp は表示される。 ・http://localhost:8080/myapp/Sample014/ は表示されず。 下記URLは参照したのですが、未解決です。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1158881041 http://www.javaroad.jp/bbs/answer.jsp?q_id=20100904015203906 アドバイス頂けると有り難いです。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • RequestDispatcherオブジェクトについて。

    データベース表示を行うサーブレットを呼び出す処理を行うには、RequestDispatcherオブジェクトを取得して、そのforwardメソッドを呼び出すだけと聞きましたが、うまくいきません。どなたかどこが悪いか教えてください。 // データベース表示するために、RequestDispatcherを取得 ServletContext cx = getServletContext(); RequestDispatcher rd = cx.getRequestDispatcher( "/netjv/servlet/shuwa.ext_db5_2_1"); // サーブレットを呼び出す rd.forward(request, response); } catch (Exception e) { e.printStackTrace(); } } 後、URL部分にはどこからのパスを書けばよいのでしょうか?あってるか不安です。

    • ベストアンサー
    • Java
  • servletからjspへの遷移時に文字化け

    質問します。 用件:servletからjspに遷移する際に文字化けが発生します。 環境: Eclipse3.7 java6 ApacheTomcat7.0 フレームワークはなし 内容: フォワードでTest.jspに遷移します。 RequestDispatcher requestdispatcher = request.getRequestDispatcher("/Test.jsp"); requestdispatcher.forward(request, response); Test.jspに遷移すると、Test.jspの「<body>テスト</body>」がブラウザ表示時に文字化けします。 (英数字は化けません。) servletを使用せず、Test.jspに直接アクセスすると文字化けが起きません。 servletで、Test.jspで適当なhiddenを作成し、servletでgetParameterをSystem.out.printしても 文字化けなどはおきません。 また、RequestDispatcherでは文字化けが起こりますが、 response.sendRedirect("/Test.jsp"); だと文字化けがおきません。 現状、sendRedirectとsessionを使用して値の受け渡しを行っておりますが、 RequestDispatcherを使用したいので困っております。 また文字コードは javaファイルそのものはSJIS jspは<%@ page language="java" contentType="text/html; charset=SJIS" %> となっております。 わかりにくい文章で申し訳ありませんが、ご回答の程よろしくお願いします。

    • ベストアンサー
    • Java
  • eclipseWTP環境 HTMLフォームからのデータをサーブレットで

    eclipseWTP環境 HTMLフォームからのデータをサーブレットで受け取れない。 eclipseWTP環境で、HTMLフォームからデータをサーブレットで受け取るサンプルファイルの実行動作を確認しようとしています。しかしエラーが発生し対処方法が分からず困っています。 htmlファイル http://localhost:8080/JSP_Servlet/view/formTest.html <FORM action="JSP_Servlet/FormTestServlet" method="POST"> MailAddress : <INPUT type="text" name="mailAddress"><BR> Password : <INPUT type="password" name="password"><BR> <INPUT type="submit" value="O K"> で、データをPOSTで投げてるのですが、サーブレットが見あたらないみたいです。 サーブレットファイル http://localhost:8080/JSP_Servlet/FormTestServlet エラー表示 HTTPステータス 404 - /JSP_Servlet/view/JSP_Servlet/FormTestServlet -------------------------------------------------------------------------------- type ステータスレポート メッセージ /JSP_Servlet/view/JSP_Servlet/FormTestServlet 説明 The requested resource (/JSP_Servlet/view/JSP_Servlet/FormTestServlet) is not available. web.xmlファイル <servlet> <description></description> <display-name>FormTestServlet</display-name> <servlet-name>FormTestServlet</servlet-name> <servlet-class>pac.FormTestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>FormTestServlet</servlet-name> <url-pattern>/FormTestServlet</url-pattern> </servlet-mapping> マッピングがおかしいでしょうか?それとも私の考え方がおかしいでしょうか? サーブレットマッピングパスがよく分かっていないのかもしれません。 FormTestServlet.javaはJSP_Servletプロジェクトのsrc内pacパッケージの中にいます。

    • ベストアンサー
    • Java
  • サーブレットからJSPへフォワード 画像が・・・

    サーブレットからJSPへフォワード 画像が・・・ javaの勉強をしながらサーブレットやJSPを使ったページを作ってるのですが、サーブレットで処理を行った後にJSPへ sc.getRequestDispatcher("/index.jsp").forward(req, res); で転送したら画像が表示されません。 JSPで記述したページを直接開いたりresponse.Redirect(URL)で遷移した場合は画像もちゃんと表示されます。画像だけではなくスタイルシート等も読み込んでいないようなのです・・・orz どうしたらいいのでしょうか? 【ファイル構成】 [プロジェクトフォルダ]  JSPファイル(.jsp)  [image]   画像ファイル  [style]   スタイルシート  [WEB-INF]   [classes]    サーブレットファイル(.class)

    • ベストアンサー
    • Java