- PR -

Tomcat再起動後、最初の実行で発生するHTTP500エラーについて

1
投稿者投稿内容
Tossignol
会議室デビュー日: 2004/06/18
投稿数: 2
投稿日時: 2004-06-18 19:02
はじめまして
JAVAよりもサーバーの問題かと思われましたが、他で質問する所がわからなかったので質問させていただきました。

HTMLで入力したデータをJSPで確認画面として表示、JSPにある登録ボタンを押すことで、Servletプログラムでデータベースに接続し、データをテーブルに追加するプログラムを作成しています。

JSP、Servletともコンパイルエラーはなく、コンパイル後Tomcatを再起動してプログラムを実行すると、必ずHTTP500エラーが出力されます。しかし、「戻る」を押してまた登録すると、きちんと登録できます。

JSP⇒Servlet⇒SQL Server(別サーバー)⇒Servlet⇒JSPという一連の流れを「登録」ボタンを押しただけで実行するので、時間がかかるのに対し、タイムアウトの制御がされているのでは、と考えられるのですが、どこを見ればよいのかわかりません。

考えられる原因がわかれば教えてください。

サーバーの構成は以下の通りです。
Windows 2000 Advanced Server SP4
Tomcat4.1.27
SQL Server2000 SP3(別の場所にあるサーバー)

Web-inf以下においたweb.xmlは以下の通りです。

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<!-- Change character encode to Shift_JIS -->
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>Shift_JIS</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*/</url-pattern>
</filter-mapping>

<!-- Defalut servlet mapping -->
<servlet>
<servlet-name>CtrAdd</servlet-name>
<servlet-class>metadata.CtrAdd</servlet-class>
</servlet>
<servlet>
<servlet-name>ExecUpData</servlet-name>
<servlet-class>metadata.ExecUpData</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CtrAdd</servlet-name>
<url-pattern>/servlet/metadata.CtrAdd</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ExecUpData</servlet-name>
<url-pattern>/servlet/metadata.ExecUpData</url-pattern>
</servlet-mapping>

</web-app>


TomcatでとったHTTP500エラーログは以下の通りです。

2004-06-18 16:59:15 StandardWrapperValve[jsp]: サーブレット jsp のServlet.service()が例外を投げました
org.apache.jasper.JasperException
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:254)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)

            〜 途中正常に読み込まれているため省略

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Unknown Source)
----- Root Cause -----
java.lang.NullPointerException
at metadata.ExecUpData.getUpdate(ExecUpData.java:94)
at org.apache.jsp.execUp_jsp._jspService(execUp_jsp.java:68)

            〜 途中正常に読み込まれているため省略

at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Unknown Source)

よろしくお願い致します。
Dr.Doraemon
ぬし
会議室デビュー日: 2002/03/23
投稿数: 265
投稿日時: 2004-06-18 19:44
お疲れ様です。

実際のソースがないので分からないのですが、デバック環境で試してみた場合も同じように途中で落ちてしまうのでしょうか?
もし、同じことがデバック環境でも起きるのであれば、ソースをデバックしていくことでなにかヒントが出てくるのではないかと思います。

 ログを見る限りでは、Tomcat側や設定の問題ではないのではないかと思うのですが(あくまでも個人的主観で)

 NullPointerExceptionが出ているのは気になりますが・・・。
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2004-06-18 20:02
引用:

----- Root Cause -----
java.lang.NullPointerException
at metadata.ExecUpData.getUpdate(ExecUpData.java:94)


とりあえず94行目はどうなんですか?
Tossignol
会議室デビュー日: 2004/06/18
投稿数: 2
投稿日時: 2004-06-18 20:23
Dr.Doraemonさんaaさんありがとうございます。

デバック環境は用意していません。(使ったことがなかったので、今までエディタで作成していました。)しかし、現在の問題が起こっている前の開発環境では、HTTP error 500はほとんどでてきませんでした。

ExecUpData.javaの94行目以降はデータベースへ接続後の主キー重複チェックとInsertです。

以下です。
try{

//ProjectName重複のチェック
stmt = con.createStatement();

sql1 = "SELECT ProjectName FROM PRJCREATE WHERE ProjectName = '" + ProjectName +"';";
ResultSet rs = stmt.executeQuery(sql1);


if(rs.next() == true){
updated = -1;

}
else {
System.out.println("SELECT check is OK");

rs.close();
stmt.close();

}

sql2 = "INSERT INTO PRJCREATE VALUES(";
for(int i=0; i<colms.length; i++){
if(i==0){
sql2 += "?";
} else{
sql2 += ",?";
}
}
sql2 += ")";

//プロジェクト情報の登録
pstmt = con.prepareStatement(sql2);

pstmt.setString(1, ProjectName);
pstmt.setString(2, ClientName);

             途中省略

pstmt.setString(16, ProjectDescription);

//Insertに成功した場合、登録件数を返す
updated = pstmt.executeUpdate();

}

catch (SQLException e) {

System.err.println("SQL failed");
e.printStackTrace ();

//エラーしたデータをログに保存
System.out.println(ProjectName);
System.out.println(ClientName);

             途中省略

System.out.println(ProjectDescription);
System.out.println("updated line is"+updated);

}
finally{

if(con != null){
try{
con.close();
}
catch(Exception e){
e.printStackTrace();
}
}
else if(pstmt != null){
try{
pstmt.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
return updated;
}

よろしくお願いします。
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2004-06-19 13:01
で、どこが94行目なんですかね?
どれが NullPointerException だって言われているんですかね?
1

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