doGetとdoPostの違い

このQ&Aのポイント
  • doGetとdoPostは、ブラウザからのリクエストの種類に対応するメソッドです。
  • doGetはブラウザからのGETリクエストに対応し、doPostはPOSTリクエストに対応します。
  • doGetとdoPostの中身のコーディングの仕方は同様であり、送信量の違いだけがあります。
回答を見る
  • ベストアンサー

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と同様の処理ができると いうことですか? 基本的な質問過ぎるかとおもいますがおしえてください。

noname#2205
noname#2205
  • Java
  • 回答数2
  • ありがとう数7

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

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

GET と POST では、パラメータをプログラムに渡す仕組みが全く違います。 仕組みが違うので渡せるパラメータの大きさが違う、等の違いが出てきます。 ですが、Servlet では、その違いを request オブジェクトが全部隠してくれて いるので、気にしなくて良いです。つまり、同じことができて、呼出され方が 違う、と。 普通は、html や JSP の方も、Servlet を意識して書くでしょうから、 どちらかだけの実装で良いのですが、汎用的(呼ぶ人を特定しない)な Servlet を書こうと思ったら、両方を実装しておく、と理解しておけば良いです。 ちなみに、GET で渡せるパラメータの大きさは 255 バイトと決っているわけでは ないし、POST で渡せるパラメータの大きさに制限が無い、というわけでもあり ません。 GET の制限は、どちらかというとブラウザ側の実装によって決ってくることで、 POST に制限があるとしたらサーバ側(例えば、Servlet コンテナ)の実装に よってきます。

noname#2205
質問者

補足

解答ありがとうございます。 別にコーディング上は意識しなくてもいいのですね。 今やってみたらそのとおり、でした。 >普通は、html や JSP の方も、Servlet を意識して書く >でしょうから、 >どちらかだけの実装で良いのですが、汎用的(呼ぶ人を特 >定しない)な Servlet >を書こうと思ったら、両方を実装しておく、と理解してお >けば良いです。 なぜ、両方を実装するのでしょうか? 呼ぶ人を想定しない、・・・からなのでしょうが、 いまいち、具体的になぜ、なのかわかりません。 HTMLやJSPがGetやPostの両方を使う場合があるから?? うーん、勉強不足ですみません。。 >GET の制限は、どちらかというとブラウザ側の実装によっ >て決ってくることで、 >POST に制限があるとしたらサーバ側(例えば、Servlet >コンテナ)の実装に >よってきます。 ああ、そうなんですか。勉強になりました。。 ありがとうございます。

その他の回答 (1)

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

> なぜ、両方を実装するのでしょうか? > 呼ぶ人を想定しない、・・・からなのでしょうが、 > いまいち、具体的になぜ、なのかわかりません。 例えば、Perl なんかで書かれたフリーの掲示板の CGI とかってありますよね。 それとか、ソフト屋さんが車内で配布している共通プログラムとか。 そういったレベルで、Servlet を書こうとしたら、「POST でも GET でも 使えます」って両方を実装することになりますよ。 もちろん、「POST にしか対応してません」と取扱説明に書いておいても 良いのだけれど。

noname#2205
質問者

補足

ありがとうございます。 理解できました。

関連するQ&A

  • doPost+doGet

    public class Class{ public void doPost (HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException try{ //処理 }catch(Exception e){ e.printStackTrace(); } } public void doGet (HttpServletRequest request,HttpServletResponse response){ try{ doPost(request, response); }catch(Exception e){ e.printStackTrace(); } } } この処理は、doGetで送信されたものをdoPostに送って処理するということでよろしいのでしょうか? 分かる方がいましたら、よろしくお願いします。

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

    以下のようなサーブレットのプログラムがあります。 本サーブレットを実行すると、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
  • getParameterとgetInitParameterの違いについて

    いつもお世話になっています。 現在HTMLファイルからServletを呼び出す処理を行っています。 Servletファイル側のdoPostメソッドのなかでよく記述してある HttpServletRequest.getparameter("パラメタ名")は HTMLファイルのFORMタグのなかにある情報を取得するものですが、 初期処理(initメソッド)でよく記述されている ServletConfig.getInitParameter("パラメタ名")は どこの情報を取得しようとしているものなのでしょうか? また public void doPost(HttpServletRequest request, HttpServletResponse response) という記述ではServletファイルが呼ばれた時に引数をrequestに取得しますが このときresponseの中身はNULLの状態なのでしょうか? responseの使い方がいまいちイメージできなくて。。 たくさん質問してすいません。 何かお気づきの方が居られましたら、ご教授ください。 宜しくお願いします。

    • ベストアンサー
    • Java
  • Javaについて

    JavaのjspやServlet、xmlで電たくを作りたいのですが、その際にprivate void main 〇〇 といったメインメソッドは使わずに、dopostやdoget、HttpServletRequestメソッドを使えば作れるという認識で合ってますかね?

    • ベストアンサー
    • Java
  • doHeadメソッドを使いたい

    訳あって、doHeadメソッドを使ったサーブレットを作りたいのですが、 例題が無くて困っています。 いろいろ調べても、doHeadの説明は 「ヘッダだけを返す」 と書いてあるだけで、 ほとんどは実際の使用例になるとdoGetを使ったものになってしまっています。 doHeadを使う単純なサーブレットはどのように書いたらいいのでしょう? 何も表示しなくてもエラーさえ出なければかまいません。 public class HellodoHead extends HttpServlet{   public void doHead(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{   } } ためしにこのように何も記述しないで見たのですが、 HTTP Status 405 - HTTP の GET メソッドはこの URL ではサポートされていません。 というエラーです。 dogetメソッドが無いのに、GETリクエストを送った、ということらしいのですが、 ではheadリクエストのみを送ることはできるのでしょうか? 思いついたことがあれば何でもいいので、 回答いただけると助かります。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • getRequestDispatcher の機能について

    こんいちは。 下記の機能を使用して転送したいのですがエラーになってしまいます。 tomcatの設定ファイル、web.xmlなどのファイルに何か情報を登録しなければならないのでしょうか? どなたかご存知でしたら教えていただけないでしょうか? 環境 tomcat4.1 機能 ****** getServletConfig().getServletContext().getRequestDispatcher("/cc/t_1.jsp").forward(request,response); ****** ソース package cc; import mng.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class t_1 extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { //response.sendRedirect("/cc/t_1.jsp"); getServletConfig().getServletContext().getRequestDispatcher("/cc/t_1.jsp").forward(request,response); } public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { doGet(request,response); } } 下記がエラー内容になります。 HTTP Status 404 - /cc/t_1.jsp The requested resource (/cc/t_1.jsp) is not available.

    • ベストアンサー
    • Java
  • doGetの引数に「入るモノ」について

    サーブレットにおけるクラスのdoGetメソッドについて 質問です(Tomcat3.2.1 + JDK1.3)。 public void doGet(HttpServletRequest request, HttpServletResponse response) 理屈で考えると、このdoGetメソッドの2つの仮引数 (request, response)には、 「インターフェースHttpServletRequestをimplements したクラス」のインスタンス ‥‥と、 「インターフェースHttpServletRequestをimplements したクラス」のインスタンス の2つのインスタンスが入れられるハズですよね。 そこで疑問なのが、 1. それら2つのクラスの名前はなんというのでしょう? (というのはインターフェースHttpServletRequestや インターフェースHttpServletResponseを 実装したクラスのメソッドの処理内容の定義を 見たいのです‥) 2. 誰がそのクラスをインスタンス化しているのでしょう? (サーブレットコンテナのTomcat? JRE? JVM?‥ いったい誰が?‥‥用語の区別も曖昧なのですが) 補足すると、 Javaアプリケーションのmainメソッドでは、 public static void main(String[] args) として、コマンドラインの引数がそのまま仮引数argsに 入る。じゃあ、サーブレットの場合はどうなのか? といった感じです。 2.のほうはトンチンカンな質問かもしれませんが、 1.の質問は切実です。 ご存知の方、教えてください。

    • ベストアンサー
    • Java
  • サーブレット初歩に関して。

    package oty; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Otys */ public class Otys extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Otys() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } } 初期状態がこんな状態なんですが、これになにを追加したらhelloworldとでますか?? 普通にJAVA入門みたいに、System.out.printlnしたらいいんでしょうか??

    • ベストアンサー
    • Java
  • Headリクエスト、ディズパッチャについて

    以下、あるソフトウェアで、このような条件のときに不具合が出るという内容なのですが、理解できないのです。 wwwブラウザ等から、Http Headリクエストを送り、サーブレットが受けます。 リクエストオブジェクトをレスポンスオブジェクトをコンテナが生成します。 それを通じて、HttpServlet実装のdoHeadが呼び出され、その後、オーバーライドされたdoGetメソッドにリクエストオブジェクトとレスポンスオブジェクトが渡され(ここが疑問、doHeadをオーバーライドせずにこんなことができるのか?doHeadから明示的にdoGetを呼べばできそうだが、doHeadをオーバーライドしている場合は除くのだそうです) その渡されたリクエストオブジェクトとレスポンスオブジェクトをRequestDispatcherのfowardメソッドでディスパッチしようとするとレスポンスオブジェクトをHttpServletResponseFacadeにキャストしようとするのだが、実際にはNoBodyResponseである為キャストに失敗。java.lang.ClassCastExceptionが出る。 (1)HEADリクエストが出来ない HttpURLConnection.setRequestMethod("HEAD"); のようにしてURLに送ってみたのですが、 「ドキュメントにデータが含まれていません」 というエラーが出てしまいました。 htmlから<form name="form" method="head" action="URL">のようにした所、「Getメソッドが無いのにGetメソッドが呼ばれている」というエラーになってしまいました。 (2)doHeadを通過してdoGetに行くという図で示されているのですが、どういうことかわからないです。どうやって実現するのか? 何か思いつくことがあったら教えていただけると助かります。

    • ベストアンサー
    • Java
  • RequestDispatcherの使用方法

    RequestDispatcherの使用方法について教えてください doPostメソッドにて以下のロジックを実行しています。 public void doPost(HttpServletRequest req, HttpServletResponse res){ Strin uri= "/aaa/bbb/ccc/ddd.jsp"; RequestDispatcher dis = request.getRequestDispatcher(uri); dis.foward(req, res); return; } この処理でfowardのところからreturnに進まず再度doPost()がよばれてしまい 無限ループ状態になります。 RequestDispatcher に設定されている情報は以下です。 servletPath = "bbb"; pathInfo = "/aaa/bbb/ccc/ddd.jsp"; 情報が足りていないとは思いますが よろしくお願い致します。

    • ベストアンサー
    • Java