- PR -

servletからjspを呼ぶときにnullPointerExceptionがでます

投稿者投稿内容
kセイバー
常連さん
会議室デビュー日: 2005/10/12
投稿数: 33
投稿日時: 2005-11-17 16:25
今、jspからservletを呼び出し,servletからjspに戻すプログラムを作っているのですが、
サーブレットからjspになぜか画面遷移しません。
調査して見たところnullPointerExceptionがrd.forward(req,res)からエラーが出ていることがわかりました
わかる方がいればなぜnullPointerExceptionがでるのか教えていただけないでしょうか?
環境はtomcat4.0,Apache,ローカル環境です
下記にコードを書きます。
見やすくするため大幅に文を省略しています。(動作は変わらず)

Test.jsp

<%@ page contentType="text/html; charset=shift_jis" %>
<html>
<head>
<title>山猫軒 コメントブック</title>
</head>
<body>

<form action="http://localhost:8080/cb/servlet/store" method="post"> <input type="submit" value="送信">
</form>
</center>
</body>
</html>

store.java

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.ServletException;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.util.Date;
import java.text.SimpleDateFormat;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;

public class store extends HttpServlet
{

protected void doPost(HttpServletRequest req,HttpServletResponse res)
throws IOException,ServletException
{
res.setContentType("text/html; charset=Shift_JIS");
String next="";
next="/../../entry/test.jsp";
try{
ServletContext con=getServletContext();
RequestDispatcher rd=con.getRequestDispatcher(next);
rd.forward(req,res);

}catch(Exception e){
PrintWriter out=res.getWriter();
out.println(e);
}
}
}





[ メッセージ編集済み 編集者: kセイバー 編集日時 2005-11-17 16:31 ]
ももんが
会議室デビュー日: 2005/02/02
投稿数: 4
投稿日時: 2005-11-17 16:58
こんにちは。

Exception発生時のトレースがないのではっきりしたことは言えませんが、forward先の
jsp側でNullPointerExceptionが発生しているということはないですか?
Servletのロジック的には特に問題はなさそうなので。。。
ハツキタツミ
大ベテラン
会議室デビュー日: 2005/05/24
投稿数: 108
投稿日時: 2005-11-17 16:58
#よくわからないので参考までに

>RequestDispatcher rd=con.getRequestDispatcher(next);
で取得したrdがnullなだけでしょうね..

>next="/../../entry/test.jsp";
を絶対パスにかえるとどうなります?
ミソジマエ
常連さん
会議室デビュー日: 2005/09/25
投稿数: 43
投稿日時: 2005-11-17 18:30
このパスだと
引用:

next="/../../entry/test.jsp";


構成はこんな感じかな
コード:

???/ --- ???/ --- docBase/ --- WEB-INF/ --- classes/ --- store.class
|
| --- entry/ --- test.jsp


実際の構成はこんな感じだと予想
コード:

docBase/ --- WEB-INF/ --- classes/ --- store.class
|
| --- entry/ --- test.jsp


上記の予想からtest.jspが見つからないのでrdにNullが入ってるに1票でしょうか
引用:

RequestDispatcher rd=con.getRequestDispatcher(next);



[ メッセージ編集済み 編集者: ミソジマエ 編集日時 2005-11-17 19:46 ]
kセイバー
常連さん
会議室デビュー日: 2005/10/12
投稿数: 33
投稿日時: 2005-11-17 19:29
みなさん、お返事いただきありがとう、ございます。
現在、分析中ですが、聞かれたことをわかっている範囲で答えます

ディレクトリについてですが、
tomcat4.0--webapps--cb--entry--test.jsp
                 |
                  |
                 --web-inf--classes--store.java
です

発生元についてですが、
念入りにしらべましたがnullpointerexceptionがでているのはやはりrd.forward(req,res)です。

直接URLを試す話については
/Http://localhost:8080/cb/entry/test.jsp
と入力して実行すると
Http status 404とでました

直接IEのアドレスバーに入れるとうまくいきます

今日は、会社から帰るため返事は明日になります。







[ メッセージ編集済み 編集者: kセイバー 編集日時 2005-11-17 19:35 ]

[ メッセージ編集済み 編集者: kセイバー 編集日時 2005-11-17 19:37 ]

[ メッセージ編集済み 編集者: kセイバー 編集日時 2005-11-17 19:38 ]

[ メッセージ編集済み 編集者: kセイバー 編集日時 2005-11-17 19:38 ]
T2
常連さん
会議室デビュー日: 2002/02/20
投稿数: 37
投稿日時: 2005-11-17 21:03
ならば、rd がnullなのでしょうね。
getRequestDispatcher()の引数に渡すパスは、
絶対パスでもなく、相対パスでもなく、「コンテキスト相対パス」です。
kセイバー
常連さん
会議室デビュー日: 2005/10/12
投稿数: 33
投稿日時: 2005-11-18 10:36
お返事いただきありがとうございます。
../を./に変えたらうまくいきました。
next="/././entry/test.jsp";
ですありがとうございました
ミソジマエ
常連さん
会議室デビュー日: 2005/09/25
投稿数: 43
投稿日時: 2005-11-18 10:45
引用:

kセイバーさんの書き込み (2005-11-18 10:36) より:
お返事いただきありがとうございます。
../を./に変えたらうまくいきました。
next="/././entry/test.jsp";
ですありがとうございました



./と../がどういった意味なのかもう一度調べなおされたほうが良いかと思います。
その書き方でも動くかと思いますが

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