- PR -

javaとjspのrequest値処理について

1
投稿者投稿内容
ひろ
ベテラン
会議室デビュー日: 2003/12/26
投稿数: 97
投稿日時: 2007-10-31 14:19
画面の入力フォームで,"&"などの半角記号をPOSTし(下記処理参照),
javaとjspで各々getParameterにて取得した際に,以下の事象が発生します。

・処理
---------------------------------------------
画面A (POST)→ JAVA* → 画面B*

*の処理時に以下の記述をし,requestの値を取得している
String prm = request.getParameter("key");

※画面Aと画面Bの文字コードはShift_JIS
---------------------------------------------

・事象
**********************************************
入力値:「89&jhgt」

・java:「89」
"&"以降の文字列がカットされた形で取得される。

・jsp:「89&jhgt」
入力フォームで入力された値をそのまま取得できる。
**********************************************


javaで上手く取得できない原因は,javaは全てUnicodeで処理するため
Unicodeにエンコードする際に,取得値が切捨てられてしまうからでしょうか。

逆にjspで取得可能な理由としては,Unicodeにエンコードする必要がないためでしょうか。

ご教授お願い致します。
朝日奈 ありす
ベテラン
会議室デビュー日: 2007/10/28
投稿数: 57
お住まい・勤務地: 北の都
投稿日時: 2007-11-01 07:50
javaもjspも同じjavaですが・・・
jspはまんまservletに変換されますので
ひろ
ベテラン
会議室デビュー日: 2003/12/26
投稿数: 97
投稿日時: 2007-11-01 13:27
引用:

汀さんの書き込み (2007-11-01 07:50) より:
javaもjspも同じjavaですが・・・
jspはまんまservletに変換されますので




ご返答ありがとうございます。
無知で恥ずかしい限りです。

継続して調査しておりますが未だ解決できません。
原因が特定できるまで調べたいと思います。
Ray
ベテラン
会議室デビュー日: 2007/09/13
投稿数: 88
投稿日時: 2007-11-02 15:03
URLエンコードが正しく行われてないのでは。
&はQUERYの区切り記号なため%26に変換されているはずです。

HTTPリクエストより抜粋。
Content-Type: application/x-www-form-urlencoded
Content-Length: 24

key=89%26jhgt&other=hoge

getInputStream() で読んでみたら何かわかるかも知れません。

ちなみに入力しているウェブブラウザは何を使っているのでしょうか?
JavaとはJavaServletのことだと思いますが、ServletEngineは何を使っているのでしょう?
trickster
会議室デビュー日: 2004/08/05
投稿数: 8
お住まい・勤務地: 東京の外れで気持ちは千葉っ子
投稿日時: 2007-11-06 15:36
文字コードかなぁと思ったりでして。

引用:
逆にjspで取得可能な理由としては,Unicodeにエンコードする必要がないためでしょうか。



こちらはブラウザ依存やらでjspのキャラクタセットが、
単にShift_JISであっていたから問題ないのかなと思いました。

コード的には以下の様なもので、javaでも参照出来るかなと。
jspへの文字コード指定も、明示的に行ったりすると思いますので。

/******************************************************/
//(1)エンコード方式の指定
res.setContentType("text/html; charset=Windows-31J");
//(2)パラメータのエンコード方式の指定
req.setCharacterEncoding("Windows-31J");
/******************************************************/

リクエストのエンコーディング指定をした後に、
サーブレット内で出力したら大丈夫かなと思ったりです
※未確認で申し訳ないです…。
1

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