RequestDispatcherオブジェクトについて

このQ&Aのポイント
  • RequestDispatcherオブジェクトを使用してデータベース表示を行うサーブレットを呼び出す方法について詳しく教えてください。
  • RequestDispatcherオブジェクトを取得してforwardメソッドを呼び出すことで、データベース表示を行うサーブレットを呼び出すことができます。
  • URLの部分にはパスを書く必要がありますが、どのようなパスを書けばいいのでしょうか?
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • hidebu-
  • ベストアンサー率53% (45/84)
回答No.4

RequestDispatcher rd = cx.getRequestDispatcher( "/netjv/servlet/shuwa.ext_db5_2_1"); のURIの部分を RequestDispatcher rd = cx.getRequestDispatcher( "/servlet/shuwa.ext_db5_2_1"); としてみてください。 たぶん正常に動くはずです。 もしうごかなければまた結果を教えてください

wareha_uminoko
質問者

お礼

できました!!! ありがとうございました。原因もなんとなくですが,つかめましたので さらに変更,削除サーブレットをつくっていきたいと思います。 本当に長い間,仕事でおいそがしいところを教えていただきましてありがとうございました。

その他の回答 (3)

  • hidebu-
  • ベストアンサー率53% (45/84)
回答No.3

ちょっと仕事が忙しくみてませんでした^^; え~と、まずサーバーエラーが出てるかどうかってことですけど。 それとも、エラーがでてなくてページがみつかりませんってことなのでしょうか?

wareha_uminoko
質問者

補足

ご返答ありがとうございます。 エラーメッセージはなく、画面には何も表示されない状態です。真っ白です。 ページが表示サーブレットへきりかわらず、URLも追加サーブレットのままなので す。

  • hidebu-
  • ベストアンサー率53% (45/84)
回答No.2

// データベース表示するために、RequestDispatcherを取得 ServletContext cx = getServletContext(); RequestDispatcher rd = cx.getRequestDispatcher( "/netjv/servlet/shuwa.ext_db5_2_1"); // サーブレットを呼び出す rd.forward(request, response); } catch (Exception e) { e.printStackTrace(); ←この部分が出力されているか? } } ということです^^;

wareha_uminoko
質問者

補足

たびたび申し訳ないです。出力されていることをどう確かめたらよいのでしょうか?参考書を写した形で使っているので細かくわかりません。

  • hidebu-
  • ベストアンサー率53% (45/84)
回答No.1

トレースは出力されているのでしょうか?

wareha_uminoko
質問者

補足

すいません。もっと具体的に言ってもらえませんか?トレースとはなんでしょう?お願いします。

関連するQ&A

  • サーブレットコンテキストの意味がわからなくて困っています。

    やさしいJava活用編で勉強しているのですが、 サーブレットコンテキストの説明が書いてなく、ネットで調べても意味不明です。 サーブレットコンテキストは、 javax.servlet.ServletContextインタフェースを実装するクラスのインスタンスで、そのアプリケーションに一つあるとのことですが、 そのサーブレットコンテキストの意味がわからなくて困っています。 HttpSessionのようなもので、クライアントではなく、そのアプリケーションに対して1つあるということですが... ServletContextオブジェクトは、具体的に何の情報を持っているのですか? また以下のソースですが、 なぜ指定されたパスにあるリソースを、ラッパーとして機能するRequestDispatcherオブジェクトを返してから、 forwardで転送するのですか? ServletContext sc = getServletContext(); sc.getRequestDispatcher("/thanks.html").forward(request, response);

    • ベストアンサー
    • Java
  • テーブルにレコードを追加するサーブレット。

    HTML画面からservletに接続してMYSQLにてつくったデータベースのテーブルに レコードを追加するプログラム(servlet)を作っています。テーブルを表示させるservlet(ext_db5_2_1.java)と、テーブルにレコードを追加して前出のservlet(ext_db5_2_1.java)を呼び出しテーブル表示をさせるservlet(ext_db5_2_2.java)をつくってます。 windows2000Professional, j2sdk1.4.0_01, MySQL3.23.47, tomcat3.3.1 テーブルにレコードを追加するサーブレット(ext_db5_2_2.java)の問題箇所。 // データベースに追加する値を取得 String number = request.getParameter("number"); String name = new String( request.getParameter("name").getBytes("8859_1"), "JISAutoDetect"); String from_pref =new String( request.getParameter("from_pref").getBytes("8859_1"), "JISAutoDetect"); // SQLを実行して、データベースに追加する StringBuffer buf = new StringBuffer(); buf.append("INSERT INTO OOIWA_SEM ("); buf.append("NUMBER, NAME, FROM_PREF) "); buf.append("VALUES ("); buf.append(number); buf.append(",'"); buf.append(name); buf.append("','"); buf.append(from_pref); buf.append("')"); stmt.executeUpdate(buf.toString()); // データベース表示するために、RequestDispatcherを取得 ServletContext cx = getServletContext(); RequestDispatcher rd =                          cx.getRequestDispatcher("/netjv/servlet/shuwa.ext_db5_2_1");

  • 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);

  • javaの掲示板について

    サーブレットにおいて未入力のチェックを行っているのですがこのままだと、未入力の表示と一緒に空欄の投稿ができてしまいます。 String sendMessage = request.getParameter("sendMessage");               String name = request.getParameter("name"); if(name.equals("")){ errorname = "名前を入力してください"; request.setAttribute("errorname",errorname); } Message message = new Message(); message.setName(name); Vector messageList = dao.getMessageList(); request.setAttribute("MESSAGE_LIST", messageList); ServletContext sc = this.getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher("/bbs.jsp"); rd.forward(request, response); } catch (Exception e) { e.printStackTrace(); } 空欄の投稿がされないようにするにはどうすればいいのでしょうか? 全く思いつかないので詳しく説明をお願いします。

    • ベストアンサー
    • Java
  • [JSP]1Servletから複数フレームにパラメータ渡し

    HTMLの<frame>タグでaaa.jspとbbb.jspを同時に表示させています。 aaa.jspからのフォームの値をHOGEというServletで受取り、 処理したものをaaa.jsp・bbb.jsp共に反映(更新)させるにはどうすれば良いでしょうか? 現状、forwardを2回書いているのですが、下記の様に怒られてしまいます。 (エラー/java.lang.IllegalStateException: レスポンスをコミットした後でフォワードできません ) ============aaa.jspのフォーム=================================== <form name="a1" method="post" action="/HOGE"> <input type="submit" name="GO" value="go"> </form> ================================================================ ============HOGE (サーブレット)================================ public class HOGE extends HttpServlet { public void doPost (HttpServletRequest request, HttpServletResponse response){ //jspに渡すパラメータをセット request.setAttribute("pram1", "judy"); request.setAttribute("pram2", "mary"); //forward準備 ServletContext sc = getServletContext(); RequestDispatcher aaa = sc.getRequestDispatcher("/jsp/aaa.jsp"); ServletContext sa = getServletContext(); RequestDispatcher bbb = sa.getRequestDispatcher("/jsp/bbb.jsp"); try { aaa.forward(request, response); bbb.forward(request, response); //ここでエラー } catch (ServletException e) { } catch (IOException e) { } } } ============================================================== どなたかご存知の方いらっしゃいましたら御教授宜しくお願いします。

  • Cookieが反映されない

    Servletで設定したCookieをJSPで取得できないのです。 具体的には (1)Servletクラスで↓のようにresponseに対してaddCookieを行います。 Cookie cookie = new Cookie("key", "KEY"); cookie.setMaxAge(-1); // ブラウザが終了するまで有効 HttpServletResponse response.addCookie(cookie); (2)nextPage.jspにホワードします。 HttpServletRequest req; HttpServletResponse res; ServletContext context = this.getServletContext(); RequestDispatcher rd =context.getRequestDispatcher("nextPage.jsp"); rd.forward(req,res); (3)nextPage.jspでCookieを取得 Cookie cookies[] = request.getCookies(); String name = cookies[0].getName(); String value = cookies[0].getValue(); 以下の方法でServletで書き換えたCookieが取得できません、もっと具体的に言うと1つ前のCookieの状態が取得されてしまいます。(最新のCookie情報が取得できない) というような状況です。 皆様よきアドバイスを。。。

  • HTTPステータス 404 - /servlet/Testが表示される

    はじめまして。Javaの初心者です。 どうしてもわからないことがあります。それは、 最初にTest.jspを実行して送信ボタンを押すと、 サーブレットからforwardされてきた「あああああ」 が表示されるのですが、再び送信ボタンを押すと、 「HTTPステータス 404 - /servlet/Test」が表示 されます。なぜなのでしょうか?また、どのようにす れば、404エラーを出すことがなく実行できるのが どうか教えてください。お願いします。 ************************************************* <%-- Test.jsp --%> <%@ page contentType="text/html; charset=Shift_JIS" %> <html> <head> <title>Test</title> </head> <body> <form method="POST" action="/servlet/Test"> <input type="submit" name="submit" value="送信"/><br/> </form> <% if(request.getParameter("submit") != null) { %> <hr/> <%= (String)request.getAttribute("b") %> <% } %> </body> </html> ************************************************* import java.io.IOException; import javax.servlet.*; import javax.servlet.http.*; public final class Test extends HttpServlet { public void doPost ( HttpServletRequest request, HttpServletResponse response ) throws IOException,ServletException { request.setAttribute("b","あああああ"); ServletContext sc = this.getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher("/Test.jsp"); rd.forward(request,response); } } *************************************************

    • ベストアンサー
    • Java
  • 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サーブレットで、わからないことがありお伺いいたします。 名前、タイトル、メッセージが入力されていないと、エラー画面になるように設定したと思っています。 ソースが3つあり、 (1)拡張子jspのソース  ここでBBSの投稿フォームおよび投稿後のフォームの呼び出し (2)拡張子javaのソース  フォームから入力された内容の取得および「bean」へ登録 (3)拡張子javaのソース  投稿内容の値の保持および取り出し となっています。 (2)に if(!isEmpty(name) && !isEmpty(subject) && !isEmpty(message) ){ // beanにフォームデータをセット があるので下記を記述しました。 }else {ServletContext sc = getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher("/error.jsp"); rd.forward(request, response); } それでも、どれか一つを抜かして「投稿」ボタンを押しても、元の初期画面に戻ってしまいエラー画面が出ません。 記述の仕方がいけないのでしょうか。 宜しくお願い致します。

  • サーブレットの動作

    以下のようなサーブレットのプログラムがあります。 本サーブレットを実行すると、simpleDB.jspに飛ぶようになっています。 疑問点は以下です。 ・GetやPostを使って送られてくるデータがないのに、なぜ  本プログラムが動くのか分かりません(根本的に分かって  ないんですが)。 ・getServletContext().setAttribute("list", employeeList)で  listに設定をしてますが、listは飛ぶ先のsimpleDB.jspで定義  されています。なぜこのサーブレットで定義されていないものを、  設定することが可能なのでしょうか? 以上、ご回答頂けると幸いです。 ---------- import java.io.IOException; import文以下略 public class EmployeeServlet extends javax.servlet.http.HttpServlet { /** * 初期化メソッド * 社員一覧をapplicationスコープにセットします */ public void init() { EmployeeDAO dao = new EmployeeDAO();     //EmployeeDAOクラスは他で定義済み ArrayList<Employee> employeeList = dao.findAll(); getServletContext().setAttribute("list", employeeList); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * リクエストを処理するメソッド * simpleDB.jspに移動し、社員一覧を表示します */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nextPage = "/view/simpleDB.jsp"; ServletContext context = getServletContext(); RequestDispatcher rd = context.getRequestDispatcher(nextPage); rd.forward(request, response); } }

    • ベストアンサー
    • Java

専門家に質問してみよう