それぞれブラウザからのリクエストの種類に対応する
メソッドが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と同様の処理ができると
いうことですか?
基本的な質問過ぎるかとおもいますがおしえてください。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

GET と POST では、パラメータをプログラムに渡す仕組みが全く違います。


仕組みが違うので渡せるパラメータの大きさが違う、等の違いが出てきます。

ですが、Servlet では、その違いを request オブジェクトが全部隠してくれて
いるので、気にしなくて良いです。つまり、同じことができて、呼出され方が
違う、と。

普通は、html や JSP の方も、Servlet を意識して書くでしょうから、
どちらかだけの実装で良いのですが、汎用的(呼ぶ人を特定しない)な Servlet
を書こうと思ったら、両方を実装しておく、と理解しておけば良いです。


ちなみに、GET で渡せるパラメータの大きさは 255 バイトと決っているわけでは
ないし、POST で渡せるパラメータの大きさに制限が無い、というわけでもあり
ません。

GET の制限は、どちらかというとブラウザ側の実装によって決ってくることで、
POST に制限があるとしたらサーバ側(例えば、Servlet コンテナ)の実装に
よってきます。

この回答への補足

解答ありがとうございます。
別にコーディング上は意識しなくてもいいのですね。
今やってみたらそのとおり、でした。

>普通は、html や JSP の方も、Servlet を意識して書く
>でしょうから、
>どちらかだけの実装で良いのですが、汎用的(呼ぶ人を特
>定しない)な Servlet
>を書こうと思ったら、両方を実装しておく、と理解してお
>けば良いです。

なぜ、両方を実装するのでしょうか?
呼ぶ人を想定しない、・・・からなのでしょうが、
いまいち、具体的になぜ、なのかわかりません。
HTMLやJSPがGetやPostの両方を使う場合があるから??

うーん、勉強不足ですみません。。


>GET の制限は、どちらかというとブラウザ側の実装によっ
>て決ってくることで、
>POST に制限があるとしたらサーバ側(例えば、Servlet
>コンテナ)の実装に
>よってきます。

ああ、そうなんですか。勉強になりました。。
ありがとうございます。

補足日時:2001/08/10 10:41
    • good
    • 1

> なぜ、両方を実装するのでしょうか?


> 呼ぶ人を想定しない、・・・からなのでしょうが、
> いまいち、具体的になぜ、なのかわかりません。

例えば、Perl なんかで書かれたフリーの掲示板の CGI とかってありますよね。
それとか、ソフト屋さんが車内で配布している共通プログラムとか。

そういったレベルで、Servlet を書こうとしたら、「POST でも GET でも
使えます」って両方を実装することになりますよ。

もちろん、「POST にしか対応してません」と取扱説明に書いておいても
良いのだけれど。

この回答への補足

ありがとうございます。

理解できました。

補足日時:2001/08/10 18:44
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QFreeBSD Apacheの環境でサーブレットやJSPは使用できますか?

 Javaについての質問ですが
FreeBSD Apacheの環境でサーブレットやJSPは使用できますか?
FreeBSD Apacheの環境でのサーブレットやJSPの実装は存在しますか、という質問です。
Javaに詳しい方、どうかよろしくお願いいたします。

Aベストアンサー

FreeBSD上でサーブレットやJSPを動かすためには、
・Tomcatなどのアプリケーションサーバ(Javaサーバ)
・JVM(Java実行環境)
が必要です。

TomcatはJavaで書かれているためプラットフォーム非依存なので○○版、というのはありません。
(配布ファイルの圧縮形式でZip版とtar.gz版とWindows向けインストーラつきのexe版がありますが、中身のTomcat本体はどれも同じのはずです。)

次にFreeBSD用のJava実行環境ですが、次のところから入手できるようです。しかしSunのJVM仕様とどのくらい互換性があるのかわかりませんので、Tomcatが正しく動作するかというと、私にはわかりません。

参考URL:http://www.freebsd.org/ja/java/

Qサーブレット(doGetメソッド内)でMySQLテーブル内を、

サーブレット(doGetメソッド内)でMySQLテーブル内を、
CSVファイルとしてクライアントへダウンロードする以下プログラムで、
UTF-16LE(BOM無し)でCSVファイルが正常に出力されております。

そこでご質問内容なのですが、このCSVを出力する際に、
BOM無しではなくて、
「BOM有り」でCSVファイル出力する(BOMを追加する)方法を教えてください。
  ↓
final ResultSetMetaData meta = rs.getMetaData();
(上記のrsは、MySQLテーブル内をSELECTしたレコードセットです)

response.setContentType("application/octet-stream;charset=utf-16le");
response.setHeader("Content-Disposition", "attachment; filename="
+ "KYOIKU.csv");
out = response.getWriter();

for (int i = 1; i <= meta.getColumnCount(); i++) {
out.print("\"" + meta.getColumnName(i) + "\"");
out.print(i < meta.getColumnCount() ? "\t" : "");
}
out.print("\r\n");

while (rs.next()) {
for (int i = 1; i <= meta.getColumnCount(); i++) {
out.print("\"" + rs.getString(i) + "\"");
out.print(i < meta.getColumnCount() ? "\t" : "");
}
out.print("\r\n");
}

} catch (final NumberFormatException e) {
(以下省略)

お世話になります
以上、宜しくお願い致します。

サーブレット(doGetメソッド内)でMySQLテーブル内を、
CSVファイルとしてクライアントへダウンロードする以下プログラムで、
UTF-16LE(BOM無し)でCSVファイルが正常に出力されております。

そこでご質問内容なのですが、このCSVを出力する際に、
BOM無しではなくて、
「BOM有り」でCSVファイル出力する(BOMを追加する)方法を教えてください。
  ↓
final ResultSetMetaData meta = rs.getMetaData();
(上記のrsは、MySQLテーブル内をSELECTしたレコードセットです)

response.setContentType("application...続きを読む

Aベストアンサー

> out = response.getWriter();
の後辺りで、BOMを出力したら良いんじゃないでしょうか。

out.print("\uFEFF"); // BOM 出力。

テストしていませんが、こんな感じで、如何でしょう。

QApache環境でJavaサーブレットを動かすのには?

Windows2000のマシンに「Apache for Win32(Ver1.3)」と「JDK1.3」をインストールし、
そのサーバで実際にJavaサーブレットで作成したページを表示させようとしました。
しかし、サーブレットのソース(****.java)を「javac」でコンパイルしたところ、
エラーが発生して、うまく動作されませんでした。
雑誌にあったサンプルをコンパイルしたので文法的には当たっているので、
問題は環境にあるように思えるのですが、他にインストールするものはあるのでしょうか?

Aベストアンサー

サーブレットのコンパイルには、JDKとは別に、JSDKが必要です。
また、サーブレットを実行するのも、確か、Apacheだけでは無理です。
(昔は無理でした)
で、JRun、Apache JServ等のサーブレットエンジンと呼ばれるものを
インストールする必要があります。
(Tomcatを入れるのがいいのかな?)

QJava(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();

リクエストは日本語を含むデータをパラメータに含める予定です.

Aベストアンサー

HttpURLConnection POST
でGoogleで検索すると沢山出てくるけどね。

わかりやすいのは
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=22814&forum=12&6
ここかしら。

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

Aベストアンサー

> サーブレットBのdoPostメソッド内にて
> サーブレットAにforwardを実行する場合に、
> 呼出されるのはサーブレットAのどのメソッドですか?

doPost() のはず。実際には、forward するときの HttpServletRequest#getMethod() で取得できる文字列に従うはず。

> JSPへのforwardはできたのですが、
> サーブレットへのforwardができず悩んでいます。

forward に関して、servlet と JSP の違いはないはず(というか、JSP は自動コンパイルされる servlet だし)。
getRequestDispatcher() してるパスが間違っているのだと思います。

> サーブレットからforwardされたサーブレットで、
> そこからさらにJSPへforwardすることはできますか?

コンテナの実装次第だけど、forward() は、サブルーチン呼び出しと変わらないはずなので、
回数に制限はないはず。

QBean→JSPでの文字化け

こんにちは。

質問したいことがあります。
JSPで定義した全角文字列はそのままブラウザに表示されるのですが、Bean内で定義した全角文字が文字化けをしてしまいます。
文字化けは、JSPファイルからBeanのメソッドを使ってパラメータを取得する際に
発生します。

----------------------例----------------------------------------
<jsp:useBean id="tBean" scope="session" class="test.testBean" />

<p>運勢は <em><%= tBean.getUnsei() %></em> です!</p>
------------------------------------------------------------------
※getUnsei()はBean内で定義された全角文字を取得するメソッドで、このメソッドで取得した文字列が文字化け(?が多数出力される)します。ちなみに「運勢は」と「です!」という文字列は、そのまま文字化けせずに出力されます。

どう対処してよいか全く分かりません。
もし何か分かることがありましたらご教授御願い致します。

こんにちは。

質問したいことがあります。
JSPで定義した全角文字列はそのままブラウザに表示されるのですが、Bean内で定義した全角文字が文字化けをしてしまいます。
文字化けは、JSPファイルからBeanのメソッドを使ってパラメータを取得する際に
発生します。

----------------------例----------------------------------------
<jsp:useBean id="tBean" scope="session" class="test.testBean" />

<p>運勢は <em><%= tBean.getUnsei() %></em> です!</p>
------------------------------------...続きを読む

Aベストアンサー

何分情報が少なく的を得ていないかもしれませんが、
tBean.getUnsei()
で表示される文字列は
"??????????????"
でしょうか?
だとしたらエンコーディングを2回やっている可能性があります。JSPから受け取った文字列のエンコーディング処理を再度確認してみてください。

Qサーブレットを動せるレンタルサーバについて

サーブレットを動せるレンタルサーバについて

現在、ロリポップ(チカッパプラン)という月額500円程度の(PHPやMySQLが使える)レンタルサーバを借りていますが、共用サーバですのでサーブレットが動かせないです。(tomcatやJDKをインストールすること自体不可能)

そこでレンタルサーバでサーブレットを動かそうとする場合、高価な専用レンタルサーバを借り、
tomcatのインストールやJDKの設定を全部自分でやらないといけないのでしょうか?
最初から既にサーブレットが動く環境(Apache+tomcat)がデフォルトで用意されすぐに利用できるようなレンタルサーバは通常ないものでしょうか?

現在、ローカル環境を2つ構築しており、(2)のようなサーブレットが動作する環境が最初から整ったレンタルサーバがないものかと考えています。
普通はレンタルサーバを借りてサーブレットを動かそうとすれば、tomcatやらJDKやら自分で専用サーバにインストール&設定するものなんでしょうか?それ以外に手法はありますか?

ローカル環境は2つ構築していています。
(1) windows7 Xampp(Apache2.2+tomcat7連携)JDK6
(2) 自宅サーバ:centOS5.6 Apache2.2+tomcat5.5連携 JDK5 

サーブレットを動せるレンタルサーバについて

現在、ロリポップ(チカッパプラン)という月額500円程度の(PHPやMySQLが使える)レンタルサーバを借りていますが、共用サーバですのでサーブレットが動かせないです。(tomcatやJDKをインストールすること自体不可能)

そこでレンタルサーバでサーブレットを動かそうとする場合、高価な専用レンタルサーバを借り、
tomcatのインストールやJDKの設定を全部自分でやらないといけないのでしょうか?
最初から既にサーブレットが動く環境(Apache+tomcat)がデフォル...続きを読む

Aベストアンサー

最初から環境が整ってるというわけではありませんが最近は比較的安価にVPSが提供されてますが、それではダメなんでしょうか?

Q標準入力をするメソッドを作り例外処理をそのメソッド内で行います

以下のソースでエラーが発生します
return文は書いているのですが
エラー内容は 「return 文が指定されていません」
と出ます。
return文はどこに置けばいいのでしょうか。
よろしくお願いします。

public static int getStdin(){
 try{
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  return (Integer.parseInt(br.readLine()));
 }catch(IOException e){
  System.out.println("標準入出力でのエラー");
 }catch(NumberFormatException e){
  System.out.println("不正な入力が行われました");
 }finally{
  System.out.println("例外処理が無事終了");
 }
}

Aベストアンサー

例外をcatchした場合にreturnが実行されないからです。
たとえば、エラーなら-1を返すとか決めて、
returnを記述する必要があります。

QJava サーブレット間の値の受渡について

こんにちは

サーブレットAからサーブレットBへ値を渡して、
サーブレットAで、戻り値を取得したいと考えています。

条件としては、
・サーブレットBの改修はできない
・サーブレットBへはGet,Postで値を渡すことができ、
戻り値を数値で貰える
というものです。

サーブレットA側からサーブレットBへリダイレクトするやり方はわかったのですが、それだと処理が完全にサーブレットBに移ってしまい、戻り値に応じた処理がサーブレットA側で行えないのです。
一般的なプログラミングのように、コールして戻り値に応じて処理を分ける・・といったことは出来ないのでしょうか?

Aベストアンサー

サーブレットAからBへリダイレクトしたのでは、そのままページを移るだけですからお望みのような働きにはなりません。

どうしてもというなら、サーブレットAの中から、URLConnectionでサーブレットBに接続をし、結果を受け取って処理する、というような形になるかと思います。要するに、サーブレットAの内部から、HTTPでサーブレットBにアクセスするわけです。

Qjsp + servlet + Beans

なぜ、jsp + servlet + Beansというような使い方をするのでしょうか?

jsp + Beansでは、表示用にjsp、複雑な処理はBeansという感じにすることの意味はわかります。
同様に、jsp + servletもわかります。

servletで行う処理と、Beansで行う処理はどこで線を引けば良いのでしょうか?

よろしくお願いします。

Aベストアンサー

>Beansとクラスっていうのは、別ですよね?
Beanとクラスは一緒です。

>クラスでやる場合はどのような不都合があるのでしょうか?
JavaBeansとは基本的には値の受け渡しで使用します。
主にsetter(set~)メソッドとgetter(get~)メソッドで成り立ちます。
またその中にビジネスロジックを搭載しsetした値から何かの数値を計算するとかしてそれをgetで取得するって感じです。

一応参考までにJavaBeansクラスはこんな感じです。

public class SampleBeans{
private String name;//名前
 private int number://番号

public String getName(){
return this.name;
}

public int getNumber(){
return this.number;
}

public void setName(String name){
this.name = name;
}

public void setNumber(int number){
this.number = number;
}

}

>Beansとクラスっていうのは、別ですよね?
Beanとクラスは一緒です。

>クラスでやる場合はどのような不都合があるのでしょうか?
JavaBeansとは基本的には値の受け渡しで使用します。
主にsetter(set~)メソッドとgetter(get~)メソッドで成り立ちます。
またその中にビジネスロジックを搭載しsetした値から何かの数値を計算するとかしてそれをgetで取得するって感じです。

一応参考までにJavaBeansクラスはこんな感じです。

public class SampleBeans{
private String name;//名前
 private...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング