- PR -

JavaBeansについて教えてください。

投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 80
投稿日時: 2004-10-24 19:08
fuuです。
JavaBeansについて勉強しています。
それで、
jspからJavaBeansを呼び出そうとしたのですが、
下記のようなエラーが出てしまい、困っています。


-------------ここから----------------------------------------------------------
HTTP Status 500 -

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

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: /jsp/jsp02.jsp(2,0) The value for the useBean class attribute db.bean_dbSearch02 is invalid.
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:150)
org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1225)
org.apache.jasper.compiler.Node$UseBean.accept(Node.java:1116)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2213)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2219)
org.apache.jasper.compiler.Node$Root.accept(Node.java:456)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
org.apache.jasper.compiler.Generator.generate(Generator.java:3269)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:244)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:470)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.0.27 logs.


-------ここまでです。----------------------------------------------------------


ファイルbean_dbSearch02.javaは、
[Tomcatのフォルダ]\webapps\jsp\WEB-INF\dbにあります。
bean_dbSearch02.javaをコンパイルしてもエラーは出ませんでした。

内容は、
------------ここから----------------------------------------------------
package db;

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

public class bean_dbSearch implements Serializable {
private ArrayList result;
private class Software {
public String id;
public String nam;
public String gdate;
public String grade;
}
public bean_dbSearch(){}
public void execute(){
try{
Class.forName("org.gjt.mm.mysql.Driver");
Connection db=DriverManager.getConnection("jdbc:mysql://localhost/db02?user=****&password=****&useUnicode=true&characterEncoding=Shift_JIS");
Statement sttSql=db.createStatement();
ResultSet rs=sttSql.executeQuery("SELECT * FROM softlist");
result=new ArrayList();
while(rs.next()){
Software soft=new Software();
soft.id =rs.getString("id");
soft.nam =rs.getString("nam");
soft.gdate =rs.getString("gdate");
soft.grade =rs.getString("grade");
result.add(soft);
}
sttSql.close();
db.close();
}catch(Exception e){
e.printStackTrace();
}
}
public int getResultCount(){
return result.size();
}
public String getId(int index){
Software soft=(Software)result.get(index);
return soft.id;
}
public String getNam(int index){
Software soft=(Software)result.get(index);
return soft.nam;
}
public String getGdate(int index){
Software soft=(Software)result.get(index);
return soft.gdate;
}
public String getGrade(int index){
Software soft=(Software)result.get(index);
return soft.grade;
}
}
------ここまでです。-------------------------------------------------------

エラーをみて、JavaBeansに問題があるのでは・・・と思っているのですが。

環境は、
OS:WinXP
java:j2sdk1.4.2_05
TomcatはTomcat 5.0.27にある5.0.27 exeをインストールしました。

どうかご教授お願いいたします。
Odakaz
ベテラン
会議室デビュー日: 2004/05/24
投稿数: 70
投稿日時: 2004-10-24 20:12
引用:

fuuさんの書き込み (2004-10-24 19:08) より:
ファイルbean_dbSearch02.javaは、
[Tomcatのフォルダ]/webapps/jsp/WEB-INF/dbにあります。
bean_dbSearch02.javaをコンパイルしてもエラーは出ませんでした。


WEB-INF/classesの下にdbディレクトリをおかないとだめなような・・・
未記入
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 80
投稿日時: 2004-10-25 02:35
Odakaz様、返信ありがとうございます。
bean_dbSearch02.javaのファイルがあるフォルダごとWEB-INF/classesの下においてみたのですが、
下記のようなエラーが出て、調べてみたのですが、解決できません。
試しに、bean_dbSearch02.javaのファイルを本についているプログラムにして、接続の部分などを
変更して試みたのですが、結果は同じでした。
どうかご教授お願いします。


-----ここから---------------------------------------------

HTTP Status 500 -

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

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

java.lang.NullPointerException
db.bean_dbSearch02.getResultCount(bean_dbSearch02.java:43)
org.apache.jsp.jsp.jsp02_jsp._jspService(jsp02_jsp.java:70)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.0.27 logs.

---------------ここまでです。-----------------------------------------------------


Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2004-10-25 07:27
fuuさん、こんにちは。

execute()が呼び出される前に、getNam()等が呼び出されている
ということはないでしょうか?
Odakaz
ベテラン
会議室デビュー日: 2004/05/24
投稿数: 70
投稿日時: 2004-10-25 11:37
もともとの問題は解決して、別の問題が出てきたってトコでしょうか。

引用:

java.lang.NullPointerException
db.bean_dbSearch02.getResultCount(bean_dbSearch02.java:43)
org.apache.jsp.jsp.jsp02_jsp._jspService(jsp02_jsp.java:70)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


このスタックトレースからすると、メンバ変数のresultがNullなのかなぁと
いうことくらいですね。
JSPをコンパイルした.javaファイルの該当箇所もスタックトレースに載っていますから、
そこから解決の糸口を探られてはいかがでしょうか。
未記入
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 80
投稿日時: 2004-10-28 01:25
返信ありがとうございます。

もう一度、ファイルを見直し、ファイルの置き場所を変更して、初めから試みたのですが、
前回と同様に下記のエラーが解決できませんでした。
エラーが出ているところも検討してみたのですが、どう修正したら良いのか解りません。どうか、ご教授お願いいたします。

=========エラーは、ここから==============================================
HTTP Status 500 -

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

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: /jsp2/dbMvc.jsp(2,0) The value for the useBean class attribute bean_dbSearch03 is invalid.
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:150)
org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1225)
org.apache.jasper.compiler.Node$UseBean.accept(Node.java:1116)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2213)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2219)
org.apache.jasper.compiler.Node$Root.accept(Node.java:456)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
org.apache.jasper.compiler.Generator.generate(Generator.java:3269)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:244)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:470)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.0.27 logs.

===========ここまでです。=================================================

bean_dbSearch03.java とdbMvc.jsp
の置き場所は、
C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\jsp-examples\jsp2 です。

===========bean_dbSearch03.javaは、========================================================

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

public class bean_dbSearch03 implements Serializable {
private ArrayList result;
private class Kii {
public String kcal;
public String solt;
public String cho;
}
public void bean_dbSearch03(){} /* コンストラクタ */
public void execute(){ /* データベースに接続 */
try{
Class.forName("org.gjt.mm.mysql.Driver");
Connection db=DriverManager.getConnection("jdbc:mysql:///KII?user=****&password=****&useUnicode=true&characterEncoding=SJIS");
Statement sttSql=db.createStatement();
ResultSet rs=sttSql.executeQuery("SELECT * FROM EIYOU_TABLE");
result=new ArrayList();
while(rs.next()){
Kii ta=new Kii();
ta.kcal = rs.getString("KCAL");
ta.solt = rs.getString("SOLT");
ta.cho = rs.getString("CHO");
result.add(ta);
}
sttSql.close();
db.close();
}catch(Exception e){
e.printStackTrace();
}
}

public int getResultCount(){
return result.size();
}
public String getKcal(int index){
Kii ta=(Kii)result.get(index);
return ta.kcal;
}
public String getSolt(int index){
Kii ta=(Kii)result.get(index);
return ta.solt;
}
public String getCho(int index){
Kii ta=(Kii)result.get(index);
return ta.cho;
}

}

========ここまでです。===========================================================

========dbMvc.jspは、========================================
<%@ page contentType="text/html; charset=Shift_JIS" %>
<jsp:useBean id="dbb" class="bean_dbSearch03" scope="page" />
<html>
<head>
<title>ソフトウェア情報一覧</title>
</head>
<body>
<h1 style="background:#cccccc">ソフトウェア情報登録</h1>
<table border="0">
<tr style="background:#00ccff">
<th>No.</th><th>名前</th><th>入手日</th>
</tr>
<% dbb.execute();
for(int i=0;i<dbb.getResultCount();i++){ %>
<tr style="background:#ffffcc">
<td><%=dbb.getKcal(i)%></td>
<td><%=dbb.getSolt(i)%></td>
<td><%=dbb.getCho(i)%></td>
<% } %>
</table>
</body>
</html>

========ここまでです。========================================

どうかお気づきのてんがございましたら、ご教授お願いいたします。
Odakaz
ベテラン
会議室デビュー日: 2004/05/24
投稿数: 70
投稿日時: 2004-10-28 12:01
引用:

org.apache.jasper.JasperException: /jsp2/dbMvc.jsp(2,0) The value for the useBean class attribute bean_dbSearch03 is invalid.


これがすべてを物語っていると思います・・・。
useBeanで指定しているクラスが無効と言ってますね。

引用:

bean_dbSearch03.java とdbMvc.jsp
の置き場所は、
C:Program Files\Apache Software Foundation\Tomcat 5.0\webapps\jsp-examples\jsp2 です。


その場所って、あんまりBeanを置かない場所だと思うのですが。すくなくとも、デフォルトの状態だと、そこにクラスを置いても読み込まれないような・・・?
あと、置いてあるのは.javaじゃなくて.classですよね?
未記入
ベテラン
会議室デビュー日: 2004/08/18
投稿数: 80
投稿日時: 2004-10-30 00:31
Odakaz様、返信ありがとうございます。

すみません、javaじゃなくて.classです。
両方ともC:Program Files\Apache Software Foundation\Tomcat 5.0\webapps\jsp-examples\jsp2
においてあります。

「その場所って、あんまりBeanを置かない場所だと思うのですが。
すくなくとも、デフォルトの状態だと、そこにクラスを置いても読み込まれないような・・・? 」
とは、javabeansは、置く場所に何か、指定があるのでしょうか?

参考にしていた本に書いてあるように、
C:\Program Files\Apache Software Foundation\Tomcat 5.0\webappsにjspというフォルダをつくり、
その中に、WEB-INF\classes とし、javaとclassファイルを置いていたのですが、
つながらなく、表示されなかったため、「bean の配置は、サーバマシンの CLASSPATH が通っているところからアクセスできれば、
どこに配置しても構いません。」と書いてあるWebを見て、以前にjspファイルを置いていたところに、
移動したのですが・・・。これは、間違いなのでしょうか?
どうか、ご教授お願いします。

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