- PR -

リクエストパラメータの内容を全て表示したいのですが

1
投稿者投稿内容
kon
会議室デビュー日: 2005/03/18
投稿数: 14
投稿日時: 2005-03-26 03:42
教えて下さい。

JavaServletで
リクエストパラメータ(request.getParameter)の内容を全て表示したいのですが

Map map_par=request.getParameterMap();
Set map_ite1 = map_par.keySet( );
Iterator i = map_ite1.iterator( );
while (i.hasNext()) {
String key = (String)i.next();
System.out.println(key + "=" + map_par.get(key));
}

これで
http://localhost:8080/servlet/test?adr=1234&par1=xyz
とすると
adr=[Ljava.lang.String;@725967
par1=[Ljava.lang.String;@14ba9a2
となってしまいます。

また
System.out.println(key + "=" + (String)map_par.get(key));
とするとエラーになってしまします。

java.lang.ClassCastException
hellow.Hellow.doGet(Hellow.java:59)
javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

よろしくお願いします。

環境
WindowsXP
Tomcat/5.0.18
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-03-26 09:42
toString() メソッドをオーバーライドしていないオブジェクトの toString() メソッドを呼び出すと getClass().getName() とハッシュ値の16進数表示が返ります。
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#toString()

"[Lクラス名"というのは、そのオブジェクトが1次元配列だということです。
詳しくは Class#getName() をご覧ください。
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Class.html#getName()

つまり返ってきているのは String ではなくて String[] だということです。
instanceof で String[] だったら配列にキャストしてダンプする、という処理を加えれば良いと思います。

または getParameterValues() で値をとれば全て配列と扱えるので処理が少しシンプルになりますね。
http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/ServletRequest.html#getParameterValues(java.lang.String)
kon
会議室デビュー日: 2005/03/18
投稿数: 14
投稿日時: 2005-03-26 19:56
回答ありがとございます。

無事対応できました。

Map map_par=request.getParameterMap();
Set map_ite1 = map_par.keySet( );
Iterator i = map_ite1.iterator( );
while (i.hasNext()) {
String key = (String)i.next();
String par[]=(String[])map_par.get(key);
System.out.println(key+"="+par[0]);
}


1

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