• 締切済み

サーブレット GETからPOST送信

はじめまして。 JAVA初心者です。 現在、サーブレットにおいてGETメソッドで受け取ったリクエストを、POST送信で他のサーブレットにパラメータを渡してフォワードする、アプリケーションを考えています。 このような処理を行なった経験のある方、お手数ですが、方法又は参考サイトなど、ご教授いただけませんでしょうか。 ちなみに、パラメータをhiddenで持たすJSPを間に入れる方法では、上手くいくようですが、JSPなしで直接送ることはできないでしょうか。

  • Java
  • 回答数2
  • ありがとう数4

みんなの回答

  • auty
  • ベストアンサー率58% (284/486)
回答No.2

経験が少ない者ですが、質問者様の述べられている事の中の語句の使い方に混乱があるようなので説明させていただきます。 ・ データの受け渡しに関してですが、ここでは2種類が取り上げられていると思います。     1.サーブレットとサーブレット間(jspを含む。)     2.WebブラウザとWebサーバ間(HTTPプロトコルによるもの。) ・ 1.のサーブレット間の場合、javaサーブレットではフォワードとリダイレクトが準備されています。     フォワードは、すでに、anmochi様の述べられている通りでこの方法が最も早く良く使われている方法です。この場合、データはrequest属性に保存されます。     リダイレクトは、クライアントとの間を往復することになり(このときHTTPが使われると思いますが)余分なトラフィックが発生します。その結果クライアントからは。URLの遷移を見ることが出来ます。この場合、データはsession属性に保存出来ます。 ・ 2.の場合、POSTという語句は、HTTPプロトコルのメソッドの1つとして含まれるということです。 ・ したがって、何か新しいことをしようとしているのでなければ、 >>> サーブレットにおいてGETメソッドで受け取ったリクエストを、POST送信で他のサーブレットにパラメータを渡してフォワードする は、「POST送信で」をはずして、 >>> サーブレットにおいてGETメソッドで受け取ったリクエストを、他のサーブレットにパラメータを渡してフォワードする としたほうがよく、 >>> パラメータをhiddenで持たすJSPを間に入れる方法 は、1.の問題を わざわざ2.のHTTPプロトコルを使って解決しようとすることになると思います。 結局今回は、サーブレットにおけるフォワードの仕方を正確に知るということになるのでしょうか。

hone1977
質問者

お礼

回答、ありがとうございます。 そうなんです、そもそもサーブレットの知識自体が危ういものでした。 細かい説明、本当に感謝いたします。 自分でも、もう少し内容を整理し勉強をし直したいと思います。

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 フォワード「される」サーブレットはどこにあるのだろうか。もし、同じ場所(同一のサーブレットコンテナ内)にあるのなら、メソッドをPOSTに変更するまでもなくそのままRequestDispatcher経由でフォワードをすれば良いと思うけど。コンテキストをまたがるフォワードはコンテナの設定にもよるけど。  PROXYサーバのようなものを意図しているのであればURLクラスとHttpUrlConnectionクラスを調べてみると良いだろう。

hone1977
質問者

お礼

早速のご返答ありがとうございます。 同一のサーブレット内で実現するつもりです。 もう一度良く、調べてみます。

関連するQ&A

  • サーブレットからパラメータをPOST形式で送信するには。

    現在JavaでWEBアプリケーションを開発しています。 技術的な事で、皆様にご質問がございます。 サーブレットから、他のWEBアプリケーションのサイトへ POST形式でパラメータを送信するには、どうすれば 良いのでしょうか? GET形式で送信するなら、 response.sendRedirect("http:aaa.com?key1=aaa&key2=bbb") ってな具合で、URLの後ろに送信したいパラメータを つければ、GET形式で送信できますが、 POST形式で送る事はできないのでしょうか? どなたか、ご存知の方がおられましたら、 ご教授よろしくお願い致します。

    • ベストアンサー
    • Java
  • request、 post、getなどの参考書はありますか?

    request、 post、getなどの使い方がいまいちわかりません。JSPやサーブレットのあたりで使うのだとは思いますが、いい参考書はないでしょうか?初心者向けのでお願いいたします。

    • ベストアンサー
    • Java
  • method=POSTしているのにGETで送信

    WEBのシステムでHTML上はmethod=POSTと書いてリクエストを実行しているのに、たまにアクセスされるリクエストのログがGETで送信されるという事象が発生しました。もちろんPOSTで送信されるべき画面がGETで送信されているのでリクエストのパラメータが渡ってきていません。 ユーザが勝手にHTMLを書き換えてアクセスしているということはまず考えられないのですが、なにか原因はありすでしょうか? ちなみにIE6での利用です。

  • サーバーAからサーバーBへPOSTする方法

    お世話になっております。 WEBアプリケーションを作成しているのですが、 問題が解消されずに困っております。 どなたかわかる方、ご教授いただけないでしょうか。 【質問】 サーバーAからサーバーBへデータをPOSTする方法を教えてください。 【詳細】 現在サーバーAのサーブレットより、サーバーBのサーブレットへデータをPOSTで渡そうとしています。 そして、サーバーBのサーブレットが持つdoPostメソッドにて、渡したデータ処理を実施したいです。 forwardとsendRedirectを考えたのですが、 forwardだと他サーバーへデータを渡すことができないようです。 また、sendRedirectだとdoGetメソッドが実行されるため、おそらくGetが行われていると考えられます。 現在、Javaだけでコーディングを実施しているため、Javaでの実現方法を教えていただけると非常に助かります。 大変困っておりますので、わかる方はぜひご教授ください。

    • ベストアンサー
    • Java
  • 1アクションでPOST・GET、両方送信したい

    1つのフォームからボタンをクリックして、 POST・GET送信と、両方飛ばすには、どうすればよいでしょうか? URLに「表示させたいパラメータ」と「表示させたくないパラメータ」 があります。 「表示させたいパラメータ」は、GETで、 「表示させたくないパラメータ」は、POST送信したいのですが、 1つのフォームで、同時に飛ばす方法が分かりません。 <form method =post action=hoge.php>  <input type=text name="piyo" value="piyo">  <input type=hidden name=puyo_id value=puyo>←これだget送信したい  <input type=submit value="送信"> </form>

    • ベストアンサー
    • PHP
  • postで送信できないんです

    oracle plsqlで開発しています。 htmlからpostでプロシジャーに値をわたしていますが、 パラメータが渡っていないようです。 エラーページでREQUEST METHOD=GETと表示されてしまいます。 getで送るとページが表示されるのですが・・・ formタグのmethod=postにすればREQUEST METHODには自動的にPOSTがはいると 思っていたのですが、どこかで設定しなければいけないのでしょうか。 とても困っています。 どなたか教えてください。

    • 締切済み
    • CGI
  • サーブレットの動作

    以下のようなサーブレットのプログラムがあります。 本サーブレットを実行すると、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
  • サーブレットから別フレームのパラメータを取り出すことは可能でしょうか?

    はじめまして。 JAVA&サーブレット初心者です。 現在、サーブレット、JSPを使ったWEBアプリケーションの開発をしてお ります。 左右二つに分かれたフレームを持つWEBアプリケーションを作っています。 大まかな流れとしては以下の通りです。  (1)左側のフレーム(仮にleft.jspとします)からサーブレット  (仮にservlet1とします)を呼び出す。  (2)右側フレームに(1)の処理結果のJSP(right1.jsp)を呼び出す  (3)right1.jspでサーブレット(servlet2)を呼び出す。  (4)右側フレームに(3)の処理結果のJSP(right2.jsp)を呼び出す。  (5)right2.jspでサーブレット(servlet3)を呼び出す。  (6)右側フレームに(5)の処理結果のJSP(right3.jsp)を呼び出す。   上記のように左側フレームが固定で右側フレームのJSPがサーブ  レット処理によって切り替わるようなWEBアプリケーションを開発し  ています。    問題なのは、今回開発しているシステムの要件により、(5)で呼び出され るサーブレット(servlet3)内の処理で左側のフレーム(left.jsp)の入力 パラメータが必要だということです。  servlet1でleft.jspの入力パラメータをセッションオブジェクトに保管 し、servlet3でセッションオブジェクトから復元すれば実現は可能かと思 いました。  しかし、途中servlet2からの処理が大変重いものであり、セッションオ ブジェクトは一定時間がたつと無効になってしまうと聞いたのでタイトル のような方法を考えたのですが、見当がつかず、今回の質問に至りました。  request.getParameter("****"); ではもちろん取り出せないと思いますが、サーブレットで別フレームのパ ラメータを取り出すことは可能でしょうか?

    • ベストアンサー
    • Java
  • Java(Servlet,JSP)を使用してあるURLにHTTPリクエスト(POST)を送信する方法

    あるWeb APIを使用したWEBアプリケーションを作成しています. JavaのServletやJSPで実装していますが,サンプルではGETでリクエストを送る方法だけが紹介されていました. APIがPOSTに対応しているので,POSTでリクエストを送信しようと思います. サンプルは以下のようになっていましたが,POSTでリクエストを送信する場合,どう変更すれば良いでしょうか? URL url = new URL("http://xxxxxx.xx/xx/?q=" + URLEncoder.encode(request.getParameter("data"), "UTF-8")); URLConnection con = url.openConnection(); InputStream stream = con.getInputStream(); リクエストは日本語を含むデータをパラメータに含める予定です.

    • ベストアンサー
    • Java
  • サーブレットの【405】POSTについて

    「HTTPのGETメソッドは、このURLではサポートされていません。」のエラーが出ます。 コードは「スッキリわかるサーブレット&JSP」本の10章です。 サーブレットを右クリックで実行すると、上記のエラーが出ます。 ----------------------------------------------------------------- package servlet; 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; import javax.servlet.http.HttpSession; import model.LoginLogic; import model.User; @WebServlet("/Login") public class Login extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // リクエストパラメータの取得 request.setCharacterEncoding("UTF-8"); //PrintWriter out = response.getWriter(); //out.println(createHTML("POST")); //out.close(); String name = request.getParameter("name"); String pass = request.getParameter("pass"); // Userインスタンス(ユーザー情報)の生成 User user = new User(name, pass); // ログイン処理 LoginLogic loginLogic = new LoginLogic(); boolean isLogin = loginLogic.execute(user); // ログイン成功時の処理 if (isLogin) { // ユーザー情報をセッションスコープに保存 HttpSession session = request.getSession(); session.setAttribute("loginUser", user); } // ログイン結果画面にフォワード RequestDispatcher dispatcher =request.getRequestDispatcher("/WEB-INF/jsp/loginResult.jsp"); dispatcher.forward(request, response); } //private char[] createHTML(String string) { // TODO 自動生成されたメソッド・スタブ //return null; //} } ------------------------------------------------------------------------------------ ビュー <%--つぶやきトップ画面 --%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>つぶやき画面</title> </head> <body> <br><br><br><p style="text-align:center"><b>ようこそ!!つぶやきアプリへ!</b></p> <form action="Tsubuyaki/Login" method="post"> <p style="text-align:center">ユーザー名:<input type="text" name = "name"></p> <p style="text-align:center">パスワード:<input type="text" name = "pass"></p> <p style="text-align:center"><input type="submit" value="ログイン"></p> </form> </body> </html> ------------------------------------------------------------------------------------ どこがダメかご回答願います。

専門家に質問してみよう