人に聞けない痔の悩み、これでスッキリ >>

JSPでNullPointerExceptionが出たのですが、初めて見るエラーなので、
どういうものなのか、どなたか教えてください。
スタックトレースは以下です。

メッセージ java.lang.NullPointerException

説明 The server encountered an internal error that prevented it from fulfilling this request.

例外

org.apache.jasper.JasperException: java.lang.NullPointerException
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:502)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:430)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
accession.filter.SessionFilter.doFilter(SessionFilter.java:97)
accession.filter.ReferFilter.doFilter(ReferFilter.java:39)
accession.filter.TimeoutFilter.doFilter(TimeoutFilter.java:23)
accession.filter.EncodeFilter.doFilter(EncodeFilter.java:10)

原因

java.lang.NullPointerException
org.apache.jsp.Use.Select.SendSelect_jsp._jspService(SendSelect_jsp.java:93)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
accession.filter.SessionFilter.doFilter(SessionFilter.java:97)
accession.filter.ReferFilter.doFilter(ReferFilter.java:39)
accession.filter.TimeoutFilter.doFilter(TimeoutFilter.java:23)
accession.filter.EncodeFilter.doFilter(EncodeFilter.java:10)

原因一行目の「SendSelect_jsp.java:93」は何というファイルの93行目のことですか?
SendSelect_jsp._jspServiceというのは・・・?
このようなエラー(_jspServiceが原因の最初にあるもの)は初めてで、
調べてはみたのですが、同じようなエラーを見つけられなかったので、
教えてください。

JSPがSendSelect.jspで、SendSelect.javaを使っています。
宜しくお願い致します。

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

A 回答 (2件)

>SendSelect_jsp.javaというファイルは見つかりません。



これは、あなたが作成したJSPファイルを元に、サーブレットコンテナが自動生成したサーブレットのソースコードです。JSPというのは、サーブレットコンテナ(Tomcatなどのことです)がそれを読み込んでサーブレットに変換して動かします。つまり、JSPのソースコードを解析して、それと同じ働きをするサーブレットのソースコードを生成し、コンパイルしてJSPファイル名のアドレスにルーティングする、といった作業を行なっているわけです。

このソースコードは、JSPファイルから機械的に生成されますから、このソースコードでエラーが発生しているというのは、すなわち元になっているJSPでエラーが発生していると考えるべきです。

とりあえず、SendSelect.jspというJSPがあると思いますので、それを調べましょう。Eclipseなどからサーブレットコンテナを起動しているのであれば、デバッグモードで実行することでエラー発生時の状況を詳しく調べられると思います。

普通にTomcatを起動して動かしている場合は、面倒くさいですが、その中のスクリプトレットを最後のところから少しずつ削除するなりコメントアウトするなりしてリロードしていけば、どの部分でエラーが起こっているか見つけられると思いますよ。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
詳しく説明していただきありがとうございました。
勉強を始めたばかりでしたので、非常に為になりました。

>サーブレットコンテナが自動生成したサーブレットのソースコードです。
SendSelect_jsp.javaはサーブレットのことだったんですね!!

Eclipseは使わずTomcat(Apacheと連携)を使用しています。
>その中のスクリプトレットを最後のところから少しずつ削除するなりコメントアウトするなりして
原因が見つかりました!
プログラム自体にミスがいくつかありました・・・。
無事、表示できるようになりました^^

ご回答ありがとうございました。助かりました。

お礼日時:2013/02/01 10:48

> NullPointerExceptionが出たのですが、初めて見るエラーなので



Javaで一番見る例外だと思うんですが。
この例外は、nullが期待されていないところにnullが使われたときに発生します、
a.method0() としたときにa=null、とか
b.method1(c) としたときに、cがnullで、b.method1の引数としてnullを期待していない、とか

> 原因一行目の「SendSelect_jsp.java:93」は何というファイルの93行目のことですか?

「SendSelect_jsp.java」というファイルです。

> SendSelect_jsp._jspServiceというのは・・・?

SendSelect_jspクラスの_jspServiceメソッドだと思われます。

これらは、既存のモジュールのものです。
そのモジュールのバグの可能性はありますが、それよりは、自作プログラム中での使い方に問題があるケースが多いです。

例えば、
c=a.method0() ; // エラー時にnullを返す
でエラーになっているのに、それを確認せず
b.method1(c) ; // nullは期待していない
のように使ってしまっている、とか。
b.method1自体が例外を返さなくても、そこから呼ばれたmethod2から呼ばれたmethod3から呼ばれた....と深いところから例外が返ってくることもあります。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございました。

>「SendSelect_jsp.java」というファイルです。
>SendSelect_jspクラスの_jspServiceメソッドだと思われます。
SendSelect_jsp.javaというファイルは見つかりません。

>これらは、既存のモジュールのものです。
>そのモジュールのバグの可能性はありますが、それよりは、自作プログラム中での使い方に問題があるケースが多いです。
既存モジュールだったのですね!

>深いところから例外が返ってくることもあります。
なるほど・・・

NullPointerExceptionの原因の一番目に、初めて既存モジュールが表示されたため、
混乱していましたが、
よく見る例外と同じようなので、もう一度じっくりコードとにらめっこしてきます。

ご回答ありがとうございました。

お礼日時:2013/01/31 10:40

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

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

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

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

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

QJava-jspの画面入力値保持について

画面にテキスト、ラジオボタン、リストボックス とボタンがあります。
ボタンを押すと、JAVAで処理を行い、jspのviewで表示します。

1.テキスト、ラジオボタン、リストボックスなどに値が入力、設定されている状態で
ボタンを押して処理後にテキスト、ラジオボタン、リストボックスの値が
変わらないようにしたいのですが、
その場合、たとえば、入力、設定値をセッションになどに格納しておき
jspの所で、セッションから値を設定すると言うような方法になるのでしょうか?

2.ボタン押して処理後、ラジオボタン、リストボックスの選択値も
  変えないようにしたいのですが、
  これはどのように実現するのが、適切なのでしょうか?


以上、よろしくお願いします。

Aベストアンサー

ボタンというのはフォームのサブミットボタンのことですよ?
つまり、画面遷移が起きることを前提とすると(元の同じ画面に戻るのも含みます)

テキスト、ラジオボタン、リストボックスの状態を「要求パラメータ」として
送信し、それを次画面に反映するというのが最も一般的な方法です。

フレームワーク struts のアクションフォーム&JSPカスタムタグを使うと比較的楽に
そういう画面が作れますが、多くのフレームワークでも大差ありません。
簡単な画面なら素のサーブレート+JSPでも十分作れます。

セッションでもできますが、 セッションはログイン情報などの保持など、
限定された範囲で使うのが普通です。また、結局セッションに最新の
テキスト、ラジオボタン、リストボックスの状態を送るには、「要求パラメータ」
を送信する必要があります。

AJAXを使うという方法もあります。この場合、ボタンは AJAX 処理だけを行い
画面遷移を起こさないので、サーバ側で画面のテキスト、ラジオボタン、
リストボックスの状態をもつ必要はありません。

Qjspのプログラムについて

jspファイルで
データベースの中のテーブルの中身をCSVファイルに出力するプログラムを教えてください。

delete文で中身を消すプログラムは書けたのですが、これはできません。
conn = null;
st=null;

conn=DriverManager.getConnection("jdbc:mysql://localhost/データベース名?" +
"user=ユーザー名&password=パスワード&useUnicode=true&characterEncoding=utf8");

st=conn.createStatement();

StringBuffer buf = new StringBuffer();
buf.append("delete from where id="+id);
st.executeUpdate(buf.toString());

これで削除はできました。
なのでbuf.appendの中身を
buf.append("SELECT from テーブル名 INTO OUTFILE "c:/data" ");
これに書き換えればできると思ったのですができません。

よろしくお願いします。

jspファイルで
データベースの中のテーブルの中身をCSVファイルに出力するプログラムを教えてください。

delete文で中身を消すプログラムは書けたのですが、これはできません。
conn = null;
st=null;

conn=DriverManager.getConnection("jdbc:mysql://localhost/データベース名?" +
"user=ユーザー名&password=パスワード&useUnicode=true&characterEncoding=utf8");

st=conn.createStatement();

StringBuffer buf = new StringBuffer();
buf.append("delete from where id="+id);
st.executeUpdate(buf.toS...続きを読む

Aベストアンサー

こんにちは。

buf.append("SELECT * from テーブル名 INTO OUTFILE \"c:/data\"");

こうではないですか?
"文字列"の中で「"」を使うのであればエスケープが必要です。

QJSPの処理の途中で、JavaScriptの処理をしたい

プログラムをJSPで記述している(<% %>タグ)のですが、
JavaScriptのalertやconfirmなどのポップアップするダイアログを
表示したいのです。それは可能なのでしょうか?

Aベストアンサー

No.2の回答に対する回答(変な日本語ですが)です。

JSPとJavaScriptの処理の行われる順番について考えていないと
エラーになることがありますよ。
大まかな流れは、
 JSPのソースをサーバ側で解釈、実行する(HTMLのソースを吐き出す)
  ↓
 クライアントに生成したソースを送信する
  ↓
 クライアント側のブラウザがソースを解釈する
  ↓
 ソースの中のJavaScriptを、ソースの上のほうから順次実行する
  ↓
 同時に、通常の表示(HTMLの解釈)も実行される

 と、こういう流れですので、例えば、JavaScriptで値を入力し、
JSPでその値を使おうとすると、エラーとなります。

 具体的にやりたいこと(やろうとしていること)を書いていただいたほうが
適切に回答できますが、上記が今考えられるエラーの原因です。

Q「httpステータス404」というエラーが出ます。

「httpステータス404」というエラーが出ます。

java初心者です、宜しくお願い致します。
EclipseでServletを書いてやりましたが、以下のようなエラーが出ます、
原因はなんでしょうか、宜しくお願い致します。
「httpステータス404-/Servlet%E7%B7%B4%E7%BF%92/ ServOutput」

Aベストアンサー

Not Found
という意味です。
そのファイルが無い。あるいはリンクが間違っています。
詳しくは参考URLをみてください。

参考URL:http://ja.wikipedia.org/wiki/HTTP_404

Qservletからjspへオブジェクトの配列情報を送る方法

いつもお世話になっております。echo2002です。

さて、今回は以下のような処理を行いたいのですが、可能なのでしょうか?
”servletで作成したオブジェクトの配列をjspにforwardして表示させる”

こんなような処理を考えています。

構成:FileListServletクラス, FileInfomationクラス, disp.jsp

FileInfomationクラスではファイル名やファイルサイズなどの情報を持ち、
それぞれgetなどのアクセサメソッドを持つとします。

FileListServletクラスでの処理
FileInfomationクラスの配列を作成し、各情報をsetする。
HttpServletRequestにsetAttributeでFileInfomation情報を付加し、
disp.jspへforwardする。

※以下の方法を考えています。
request.setAttribute("fileinfo1", fileinfo[0]);
request.setAttribute("fileinfo2", fileinfo[1]);
request.setAttribute("fileinfo3", fileinfo[2]);
・・・
(配列でsetAttributeできるのかわからなかったので、
 とにかくファイルの数分setAttributeしてみました)

getServletContext().getRequestDispatcher("/disp.jsp").forward(req, res)

わからないこと:
disp.jspでどのようにFileInfomationの情報を取得し、
内容を参照できるのかがよくわからないのです。
jspの暗黙オブジェクトrequestを使用して、request.getParameterをすると、
返ってくる値がStringのようなので、FileInfomationクラスにならないんですよね?

突っ込みどころ満載の質問かと思いますが、何かアドバイス頂ければと思います。
オブジェクトの配列をsetAttributeしてjspで読み出せる方法があれば、
それもご教授いただけますでしょうか。
よろしくお願いいたします。jsp難しいです・・・。

いつもお世話になっております。echo2002です。

さて、今回は以下のような処理を行いたいのですが、可能なのでしょうか?
”servletで作成したオブジェクトの配列をjspにforwardして表示させる”

こんなような処理を考えています。

構成:FileListServletクラス, FileInfomationクラス, disp.jsp

FileInfomationクラスではファイル名やファイルサイズなどの情報を持ち、
それぞれgetなどのアクセサメソッドを持つとします。

FileListServletクラスでの処理
FileInfomationクラスの配列を作成し、...続きを読む

Aベストアンサー

setなんちゃらメソッドで値を設定したら、getなんちゃらメソッドを呼べば良かったのです。つまり、set/get以下が同名のメソッド同士をセットで使えば良いのです。
今回の場合は、getAttributeメソッドですね。
戻り値はObjectですがこれはキャストすれば良いのです。
FileInfomation 変数 = (FileInfomation)request.getAttribute("fileinfo1");
てな具合です。

なお、getParameterメソッドは、クライアント(ブラウザ)から送信されたパラメータを取得するメソッドです。

さて、話を次の段階に進めて、配列を受け渡しできるか?となりますが、、できます。
サーブレット側で、
request.setAttribute("キー文字列", fileinfo);
として、JSP側で、
FileInfomation[] 変数 = (FileInfomation[])request.getAttribute("キー文字列");
とすれば、良いのです。

QJSPでリンクを利用してパラメータを次画面に渡す方法について。

一覧表示されているデータのNOをクリックすると、二つのパラメータでデータベースへアクセスし、該当データの詳細画面に遷移する、というプログラムを作っています。

データベースへアクセスする際に必要なIDは2つで、仮にID_A、ID_Bとします。
リンク部分のソースは

---------------------------------------------------------------------
<a href = "update_form.jsp?ID_A=<%= rs.getString("ID_A") %>">番号</a>
<input type="hidden" name="ID_B" value="<%= rs.getString("ID_Bcat_id") %>">
---------------------------------------------------------------------

としておりますが、次画面へ遷移すると、ID_Bの値はnullとなってしまうために、正常にデータの取得ができません。

二つのパラメータを使用する場合のパラメータを渡す方法を教えて頂きたいと思います。よろしくお願いします。

一覧表示されているデータのNOをクリックすると、二つのパラメータでデータベースへアクセスし、該当データの詳細画面に遷移する、というプログラムを作っています。

データベースへアクセスする際に必要なIDは2つで、仮にID_A、ID_Bとします。
リンク部分のソースは

---------------------------------------------------------------------
<a href = "update_form.jsp?ID_A=<%= rs.getString("ID_A") %>">番号</a>
<input type="hidden" name="ID_B" value="<%= rs.getString("ID_Bcat_id") %>">...続きを読む

Aベストアンサー

<a href = "update_form.jsp?ID_A=<%= rs.getString("ID_A") %>&ID_B=<%= rs.getString("ID_Bcat_id") %>">番号</a>

としてID_Bを&で繋げればMethod="get"で送れますね。
inputタグで送る場合はformタグでactionアトリビュートに飛ぶjspを指定してsubmitボタンかJavaScriptでsubmitさせなければならないと思います。

Qフォーム上で押されたボタンによってサーブレットの処理を変えたい

Urizakaです。
さて、さっそく質問です。
JSPの同一フォーム上に「登録」「修正」「削除」のボタンを置き、その押された
ボタンによってサーブレット内での処理が切り替わる(具体的には、違う
SQL文を実行し、違うJSPページをgetRequestDispatcherメソッドで生成
する)ようにしたいのですが、どのようにすればよいのでしょうか?
もちろんそれぞれの処理に対して別々のサーブレットを作り、javaScript
でそれぞれのサーブレットへ飛ぶように制御するという処理も考えたことは
考えたのですが、できれば一つのサーブレットで済ませたいと考えたもので
…宜しくお願いします。

Aベストアンサー

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

---------------------------------------------------

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=MySubmit>
</form>

<script language="JavaScript">
function func(MyCommand){
document.MyForm.MySubmit.value=MyCommand;
document.MyForm.submit();
}
</script>

■Servletでの処理
// リクエストの取得
String MyAction = req.getParameter("MySubmit");

// 処理の実行
if (MyAction.equals("Toroku")){...}
if (MyAction.equals("Shusei")){...}
if (MyAction.equals("Sakujo")){...}



---------------------------------------------------

こんな感じでどうでしょうか。
ちなみにこうやって書いておくと、フォームのボタンからじゃなくても
アンカーをクリックすることで同じ効果が出せそうな……

<a href="JavaScript:func('Toroku')">登録</a>

あ、でもまたボロが出そうなのでこの辺で(^_^;)

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

---------------------------------------------------

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=M...続きを読む

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等を使用しているかなど、詳し...続きを読む

QEclipseでのJDBCドライバについて

Eclipse3.1でデータベース(mysql)にアクセスするプログラムを作ったのですが下記のエラーが出ます。

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

これはJDBCドライバのセットアップがうまく出来ていないからなのでしょうか?
またEclipseでは、~.jarというファイルをプロジェクトのWEB-INFのlibフォルダに入れれば使える印象があるのですが、参考書(EclipseのではなくJAVAなどの)などにあるようにTomcatのインストールフォルダ以下common/libに入れて環境変数を変更しないといけないのでしょうか?

ご存知の方教えてください、よろしくお願いします。

Aベストアンサー

WEB-INF以下に入れると実行はできるのですが、エクリプスが.javaファイルをコンパイルすることができません。projectの一覧を右クリックしてpropertyを選択し、ダイアログ右側からJava Build Pathを選択し、タグからLibrariesを選び、Add JARsボタンをおして.jarファイルを登録して下さい。
たぶんこれでコンパイルできるはずです。

QJSPのNULLレコード表示について教えて下さい。

JSPでテーブルのレコードを表示するWEBを作成したのですが
レコードで空白の部分が「null」という表示になって出てしまいます。

これを空白で表示する事はできないのでしょうか?
エンコードの問題なのか分からず困っています。。。
教えて下さい!

Aベストアンサー

<% if (変数 == null) { %>
<%= "" %>
<% } else { %>
<%= 変数 %>
<% } %>

ってだけではないのです??


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

人気Q&Aランキング