- PR -

ServletでdoGetからdoPostを呼び出した時にreq.getParameterがnullを返す

1
投稿者投稿内容
ジェイ
ベテラン
会議室デビュー日: 2002/10/06
投稿数: 62
投稿日時: 2002-10-06 23:35
こんにちは。

Windows2000 serverで、jdk1.3.0_02とj2sdkee1.2.1で、Tomcat4.0.4を利用して
Webアプリを作成しています。
通常はdoGetを使用せず、doPostを呼び出してServletを動かしています。
IE上で右クリックをして「新しいウィンドウで開く」を再現するために、

public void doGet(HttpServletRequest req,HttpServletResponse res)
throws IOException, ServletException{
doPost(req, res);
}

public void doPost(HttpServletRequest req,HttpServletResponse res)
throws IOException, ServletException{

res.setContentType("text/html; charset=Shift_JIS");
PrintWriter out = new PrintWriter(
       new OutputStreamWriter(res.getOutputStream(), "Shift_JIS"));

int ReqID = Integer.parseInt(req.getParameter("ID"));
     /////////////以下略/////////////////

とした際に、req.getParameter("ID")のところで、
java.lang.NumberFormatException: null
が返されてしまいます。

リンクではないので、パラメータを渡していないのかななんて考えていますが、
doGetの時はreqの中にパラメータは含まれないのでしょうか。
また、回避策をお持ちの方がいらっしゃいましたら、ご教授願います。
よろしくお願い申し上げます。
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-10-07 07:59
「新しいウィンドウを開く」と doPost/doGet の関係がわかりませんけど、
『そんなはずはありません』。

なんか別の間違いをしてるんでは。doGet ということは、呼出し URL に ?ID=なんちゃら は入ってるんですよね
oyouji
会議室デビュー日: 2002/10/07
投稿数: 1
投稿日時: 2002-10-07 20:53
>doGetの時はreqの中にパラメータは含まれないのでしょうか。

そんなことはないです.

>回避策をお持ちの方がいらっしゃいましたら

しょむさんも書いてますが,
呼び出すページのリンクには,?ID=xxxxx みたいにちゃんと書いてますよね?

それとも質問の意図は,
左クリックだったら,doGetにデータが送られるのに,
右クリックだったら送られない..ということですか?


ジェイ
ベテラン
会議室デビュー日: 2002/10/06
投稿数: 62
投稿日時: 2002-10-07 22:46
しょむさん、べるまんさん早速のご返答ありがとうございます。
言葉が足りなくて申し訳ございません。

リンクに、?ID=****はありません。
本文にも書きましたが、通常はdoGetは使わずにdoPostをしようしています。
やり取りするパラメータが多いので、doGetは使用していないのです。

リンクを左クリックした場合、JavaScriptを利用して、FORMをsubmitしています。
なので、結果的にPOSTしているのです。
右クリックで開いたときにはJavaScriptが走らないので、doGetが反応してしまいます。
doGetをコメントアウトしてdoPostだけのサーブレットにしても見たのですが、
「doGetがサポートされていない」とエラーになってしまいます。

こんな場合だと、doPostだけでなく、doGetもdoPostと同じ処理をするようにコーディングしないといけないでしょうか。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2002-10-08 01:10
クライアント(ブラウザ等)からのリクエストの種類によりリクエストメッセージの構造がちがいます。
postはリクエスト行及び各種ヘッダ、1行の空白行に続いてエンティティ本体としてパラメタ等が続きます。
getにはエンティティ本体がなく、簡単なクエリをリクエストURLの後ろに?で区切って付けることができます。
プログラムから reqを通して読み取っているのはこれらの値です。
ですから、今回の問題はプログラムのコーディングの問題というよりは、httpの使用方法との関係を吟味する必要があると思われます。
ジェイ
ベテラン
会議室デビュー日: 2002/10/06
投稿数: 62
投稿日時: 2002-10-08 23:39
Kissingerさんご返答ありがとうございます。

やはり、Getだと、ヘッダ部分だけしか送信されないので・・ということですね。
ありがとうございました。
もうちょっと吟味してみます。
1

スキルアップ/キャリアアップ(JOB@IT)