JSPからServletへパラメータを渡そうとしています。
JSP同士のやり取りのようにrequest.getParameter
でやろうとするとNullPointerExceptionが出てしまいます。
ひょっとして私って何も分かってないのかも…。

JSPで、
<input type=hidden name="nickname" value="pinky">
として渡すべき値を設定しました。
そして、PostでServletを呼び出します。
呼び出されたServlet側で、この"nickname"を受け取りたいのです。
必要な情報があれば仰って下さい。補足致します。
よろしくお願いします。

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

値 属性」に関するQ&A: MHP2nd 属性値

A 回答 (1件)

 参考URLのように、サーブレットのソースでdoPost()メソッドを定義してその中でrequest.getParameter()を呼ぶだけです。



 getParameter()でNullPointerExceptionが出るという症状は、厳密にはどちらでしょうか。

(A) getParameter()からNullPointerExceptionがthrowされる。
→getParameter()の引数値がnullになっていませんか?

(B) getParameter()の返り値がnullになる。
→getParameter()の引数値は正しい(JSP/HTMLの<INPUT>タグのNAME属性値に等しい)ですか?

参考URL:http://www.atmarkit.co.jp/fjava/onepoint/svltjsp …
    • good
    • 0
この回答へのお礼

分かっちゃいましたよー!!!!
amajunさんの回答を読んで、私は何か勘違いしてると思いました。
教えていただいた参考URLものぞいてみました。
で、ふと分かったのです。
バカなことに私は

<form action = "AAA" method="post">
 <input type="hidden" name="nickname" value="pinky">
 <input type="submit" name="hoge1" value="hogehoge1">
</form
<form action="BBB" method="post">
 <input type="submit" name="hoge2" value="hogehoge2">
</form>

って処理をして、"BBB"のほうで"nickname"を受け取ろうとしていたのです。
分かってみたらバカバカしいけど本気で悩んでました。
ありがとうございましたー!!!

お礼日時:2002/03/06 12:01

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

値 属性」に関するQ&A: JWWの寸法線

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

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

QJSPからServletに、テーブルに格納された値を渡したい

JSPに日付、資産名、社員番号、社員名、備考とボタンを各行に配置したテーブルがあります。
ここから資産名をServletに渡して、それを基に別のJSPに別のテーブルを表示させるコードを考えています。

現状のコードは以下(抜き出し)
【JSP】
<table>
<tr>
<td>状態</td>
<td>社員番号</td>
<td>社員名</td>
<td>機種</td>
<td>備考</td>
<td></td>
</tr>

<%
List list = (List)request.getAttribute("list");
int Cnt;
for(Cnt=0; Cnt<list.size(); Cnt++){
Account account = (Account)list.get(Cnt);
%>

<tr>
<!-- Beansに格納したSQLの実行結果を呼び出す -->
<td><%=account.getLendingReturnFlag() %></td>
<td><%=account.getEmployeeCode() %></td>
<td><%=account.getEmployeeName() %></td>
<td><%=account.getMaker() %>

<%=account.getMachineType() %></td>
<td><%=account.getRemarks() %></td>
<td>
<!-- 資産NoをServletに渡すために、hiddenに"No_カウンタ"という名前をつけて格納 -->
<input type="hidden" name="No_" + "<%=Cnt%>" value="<%=account.getAssetNo()%>">

<!-- 資産Noと同じ行のボタンを判別するため、"id_カウンタ"という名前をつけて資産Noを格納 -->
<!-- 現状ではボタンに資産Noが表示されていますが、これは後から「資産詳細」に直す予定 -->
<input id="<%=Cnt%>" name="id_" + "<%=Cnt%>" type="submit" value="<%=account.getAssetNo()%>">
</td>
</tr>

<%
}
%>

</table>

<!-- 現在表示している一覧が何行あるかを"Cnt_sum"という名前をつけて格納 -->
<input type="hidden" name="Cnt_sum" value="<%=Cnt%>">
</form>
<FORM>
<input type="button" value="戻る" onClick="history.back()"></div>
</FORM>


【Servlet】
package history;

import java.io.*;
import java.sql.*;

import javax.servlet.*;
import javax.servlet.http.*;
import db.*;

import java.util.*;

public class HistoryDetailServ extends HttpServlet {
private static final long serialVersionUID = 444896L;
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

 //エンコードを指定
response.setContentType("text/html; charset=Windows-31J");
request.setCharacterEncoding("Windows-31J");

//前画面でテーブルが何行だったかを呼び出す
int Cnt_sum = Integer.parseInt(request.getParameter("Cnt_sum"));
 //上記のテストコード
System.out.println(Cnt_sum);

String pc_id = "";
String No = "";
String id = "";

 //テーブルの行数分、繰り返しを行うfor文
for(int Cnt=1; Cnt<=Cnt_sum; Cnt++){
 //"No_カウンタ"という名前で格納されている値を呼び出す(資産No)
No = request.getParameter("No_" + Cnt);

 for(int Cnt_2=1; Cnt_2<=Cnt_sum; Cnt_2++){
 //"id_カウンタ"という名前で格納されている値を呼び出す(資産No)
id = request.getParameter("id_" + Cnt_2);

 //上記のテストコード
System.out.println(No);
System.out.println(id);

 //上記2つの値が等しいときに処理を行うif文
if(No==id){
 //SQLの取得に使用する変数に、Noを格納
pc_id = No;
 //上記のテストコード
System.out.println(pc_id);
}
 }
}

//DB接続
ServletContext sc = getServletContext();
DbControl db_Con = new DbControl(sc);

try{


となっています。

テスト用のコードの実行結果(コンソールに出力しました)を見ると、テーブルが何行だったかを示すCnt_sumは正しくServletに渡っているようですが、残る3つはnullが返ってきてしまいました。

for文のあたりからが怪しいのは判るのですが、値を取得するコードに間違いがあるのか、for文そのものに問題があるのか・・・など考えたまま数時間経っても解決しなかったので質問させていただきます。

JSPに日付、資産名、社員番号、社員名、備考とボタンを各行に配置したテーブルがあります。
ここから資産名をServletに渡して、それを基に別のJSPに別のテーブルを表示させるコードを考えています。

現状のコードは以下(抜き出し)
【JSP】
<table>
<tr>
<td>状態</td>
<td>社員番号</td>
<td>社員名</td>
<td>機種</td>
<td>備考</td>
<td></td>
</tr>

<%
List list = (List)request.getAttribute("list");
int Cnt;
for(Cnt=0; Cnt<list.size(); Cnt++){
Account account = (Account)list...続きを読む

Aベストアンサー

No+カウンタ
<input type="hidden" name="No_" + "<%=Cnt%>" value="<%=account.getAssetNo()%>">
ってあるけど、name属性が「"No_" + "<%=Cnt%>"」ってなってるよ。
属性に「+」って使えたっけ?

id+カウンタ
<input id="<%=Cnt%>" name="id_" + "<%=Cnt%>" type="submit" value="<%=account.getAssetNo()%>">
これってtypeがsubmitになってるよ。
だからないんじゃない?

その他
<FORM>
<input type="button" value="戻る" onClick="history.back()"></div>
</FORM>
<div>の開始タグがないのに閉じタグがあるよ。

QjspからServletを呼び、元のjspページに戻るにはどうしたらよいですか?

・jspページにあるボタンを押すとServletに値を渡す。
・Servletで処理をする。
・処理の結果を元のjspページに表示する。

というプログラムを作りたいと考えています。
jspページ→Servletで処理をする、という所までは出来たのですが
その後元のページに戻すというところで困っています。

jspページは複数(十数ページ)あり、Servletは1つです。
a.jsp→Servlet→a.jsp
b.jsp→Servlet→b.jsp
このように、どのjspページから呼ばれても、元のjspページに
戻したいのですが、どのようにすれば実現できるでしょうか?

Aベストアンサー

doGetメソッドなら
import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class サーブレット名 extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try {
res.sendRedirect(new URI(req.getHeader("referer")).getPath());
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}
(JDKやサーバーなどの環境、eclipse等を使用しているかなど、詳しく書いたほうがいいですよ^^!ロジック自体はもっといいものがあるかどうか検討してみてください。sendRedirectメソッドはリクエスト属性を保持しないので、必要な場合はRequestDispatcher#forwardメソッドの使用も考えられます。その場合はパスの記述が/アプリ名/ファイル名ではなく/ファイル名 になりますが(余談))

doGetメソッドなら
import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class サーブレット名 extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try {
res.sendRedirect(new URI(req.getHeader("referer")).getPath());
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}
(JDKやサーバーなどの環境、eclipse等を使用しているかなど、詳し...続きを読む

QServletからJSPに遷移させた後もServletに制御を戻したいんですが

Java初心者です。宜しくお願いします。
現在、ServletからJSPに対してIncludeまたはForward
した後にServlet側にて処理を継続させる方法が
ないか調べています。
Forwardは×かなというところ
まではわかったのですがIncludeで行った場合
Servlet → JSPに遷移させた後に呼び出し元の
Servletに制御を戻す事は可能でしょうか。
また、一般的な方法がありましたらご教授お願いします。

宜しくお願いします。

Aベストアンサー

なぜそうしたいか?
というのがわからないので、適切な回答になっているか分かりませんが、

サーブレット
リクエストを受け取る

(継続させたい)処理を行う

JSPを返す

となっているんですよね?(今は)

サーブレット         スレッド
リクエストを受け取る

スレッドを生成して開始させる→処理を行う
↓              ↓
JSPを返す         処理を継続して行う

とすれば、サーブレットはスレッドを起動・開始すればすぐ処理が戻ってきますので、JSPを返した後も処理が継続できるのでは?

ただし、サーバーのリソースなどを考慮して下さいね。

QWTP,JSP,Servlet

WTPを使って開発をしています。
設定まではうまくいきました。
一応環境をお知らせします。
・WindowsVista
・WTP
・Tomcat6.0
・Java6.0

○実現したい事
JSP画面のフォームから送信ボタンでServletを呼ぶ。

○困っていること
JSP画面からServletが呼べない。
どうも
<form method="post" action="com.Servlet">
のactionの指定が間違っているようです。

○ソース環境
JSP : ルート/WebContent/JSP画面
Servlet : ルート/src/com/Servlet.java
class : ルート/build/classes/com/Servlet.class

○エラー
HTTPステータス 404 - /ルート/com.Servlet

Actionの指定をいろいろと試したのですがダメでした。
Sevletの代わりにJSP画面と同じフォルダ内の他のJSPファイルを指定したらうまくいってます。

情報が足りなかったらすいません。
どうぞよろしくお願いします。

WTPを使って開発をしています。
設定まではうまくいきました。
一応環境をお知らせします。
・WindowsVista
・WTP
・Tomcat6.0
・Java6.0

○実現したい事
JSP画面のフォームから送信ボタンでServletを呼ぶ。

○困っていること
JSP画面からServletが呼べない。
どうも
<form method="post" action="com.Servlet">
のactionの指定が間違っているようです。

○ソース環境
JSP : ルート/WebContent/JSP画面
Servlet : ルート/src/com/Servlet.java
class : ルート/build/classes/com/Servlet.clas...続きを読む

Aベストアンサー

サーブレットを作成した際、web.xmlにサーブレットが自動登録される。その値がどうなっているか確認してみる。web.xmlには<servlet-mapping>というタグがあって、そこに<url-pattern>というのがある。これが、公開されるURIになる。これの値をactionに指定すればいい。

ちなみに、クラスファイルの配置場所は気にしなくていい。WTPはビルドされた生成物の配置場所が特殊で、一般的なサーブレットの作法とは異なっている。だから、これは逆に下手に触らないほうがいい。

QEclipseでServlet/JSP

エクリプス2.0.2を使っていますが、Servlet/JSPを使った開発でひとつ疑問があります。
ちなみに、
http://www.atmarkit.co.jp/fjava/rensai2/eclipse03/eclipse03.html
で各種設定いたしました。
JSPを作成するのは問題ないのですが、
Servletのクラスを作るときに、新規→クラスで、ソースフォルダがプロジェクト名か、j2srcのどちらかしか選択できません。コンパイルして、そのクラスをclassesに移動してやりましたが、それを実行するときに、
http://localhost:8080/myWeb/servlet/Hello
とすると、Helloクラスをダウンロードするような形になってしまうのです。URLはなんパターンか変えてやってみましたが、できません・・・。
どうすればうまくサーブレットを作って実行できるのでしょうか?
宜しくお願いします。

Aベストアンサー

どんなむちゃくちゃをやったとしても、
/WEB-INF/classes 以下に配置したクラスを
ダウンロードするようなことにはなりません。

ダウンロードが開始されてしまうのは、
環境のせいではなく、もしかしたらプログラム中の
response.setContentType の箇所に誤りがあるから
かもしれません。

そこの一文を見せてもらえませんか?


人気Q&Aランキング

おすすめ情報