- PR -

サーブレットからJavaBeansを利用したDB接続について

1
投稿者投稿内容
nankurunaisa2
会議室デビュー日: 2006/08/20
投稿数: 1
投稿日時: 2006-08-20 01:49
初歩的な質問ですみません。下記環境で、Javaを勉強しています。

教材 :やさしいJava 活用編 Lesson8 Sample5
実行環境:j2sdk1.4.1_07 (教材では、j2sdk-1_4_0)
Tomcat 5.0(教材では、Tomcat-3.2.3)
IE6.0

サーブレットでリクエストを受付け、JavaBean経由でDBに接続(Access2000を利用)しDBの中身をJSPで表示するという流れです。サーブレットのURLを指定して実行してもjspページには何も表示されません。ログファイルには下記エラーが記述されています。勘違いか、何らかの初歩的なミスだと思いますが、解決方法が見つかりません。解決方法をご存知の方いらしたらご教示いただけませんでしょうか。
尚、JDBC-ODBCドライバを使用していますが、サーブレットからではなくJavaアプリからではAccess2000のDB参照更新が出来ています。サーブレットから(JavaBean経由)だとうまくいかないという事象です。
TOMCATは正常に動いており、JSPの配置にも問題はないはずです。

<エラーログ>
java.sql.SQLException: [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバが見つかりません。
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6879)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7036)
at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3028)
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174)
at java.sql.DriverManager.getConnection(DriverManager.java:512)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at CarDB.CarDBBean.<init>(CarDBBean.java:22)
at Sample5.doGet(Sample5.java:16)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:419)
at org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:133)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:535)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:536)
org.apache.jasper.JasperException: /Sample5.jsp(5,0)
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:150)
at org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1227)
at org.apache.jasper.compiler.Node$UseBean.accept(Node.java:1116)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2213)
at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2219)
at org.apache.jasper.compiler.Node$Root.accept(Node.java:456)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
at org.apache.jasper.compiler.Generator.generate(Generator.java:3272)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:244)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:470)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:704)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:474)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:409)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
at Sample5.doGet(Sample5.java:22)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:419)
at org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:133)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:535)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:536)
2006/08/19 22:29:26 org.apache.coyote.http11.Http11Protocol pause
情報: Pausing Coyote HTTP/1.1 on http-8080



<ソース>
---------------------------------------------------------------

【Sample5.java】
import javax.servlet.*;
import javax.servlet.http.*;
import CarDB.CarDBBean;

public class Sample5 extends HttpServlet
{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
try{
//サーブレットコンテキストの取得
ServletContext sc = getServletContext();

//Beanの作成
CarDBBean cb = new CarDBBean();

//リクエストに設定
request.setAttribute("cb", cb);

//リクエストの転送
sc.getRequestDispatcher("/Sample5.jsp")
.forward(request, response);
}
catch(Exception e){
e.printStackTrace();
}
}
}

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

【CarDBBean.java】
package CarDB;
import java.util.*;
import java.io.*;
import java.sql.*;

public class CarDBBean implements Serializable
{
private Vector colname;
private Vector data;

public CarDBBean()
{
try{
//接続の準備
String drv = "sun.jdbc.odbc.JdbcOdbcDriver";
String url = "jdbc:odbc:CarDB";
String usr = "";
String pw = "";

//データベースへの接続
Class.forName(drv);
Connection cn = DriverManager.getConnection(url, usr, pw);

//問い合わせの準備
Statement st = cn.createStatement();
String qry = "SELECT * FROM 車表";

//問い合わせ
ResultSet rs = st.executeQuery(qry);

//列数の取得
ResultSetMetaData rm = rs.getMetaData();
int cnum = rm.getColumnCount();
colname = new Vector(cnum);

//列名の取得
for(int i=1; i<=cnum; i++){
colname.addElement(rm.getColumnName(i));
}

//行の取得
data = new Vector();
while(rs.next()){
Vector rowdata = new Vector();
for(int i=1; i<=cnum; i++){
rowdata.addElement(rs.getObject(i));
}
data.addElement(rowdata);
}

//接続のクローズ
rs.close();
st.close();
cn.close();
}
catch(Exception e){
e.printStackTrace();
}
}
public Vector getData()
{
return data;
}
public Vector getColname()
{
return colname;
}
}

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

【Sample5.jsp】
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ page import="CarDB.CarDBBean" %>
<%@ page import="java.util.Vector" %>

<jsp:useBean id="cb" class="CarDBBean" scope="request"/>
<%!
Vector colname;
Vector data;
%>
<%
colname = cb.getColname();
data = cb.getData();
%>

<html>
<head>
<title>サンプル</title>
</head>
<body>
<center>
<h2>ようこそ</h2>
<hr />
お選びください。<br />
<br />
<table border="1">
<tr bgcolor="#E0C76F">
<%
for(int column=0; column<colname.size(); column++){
%>
<th>
<%=(String)colname.elementAt(column)%>
</th>
<%
}
%>
</tr>

<%
for(int row=0; row<data.size(); row++){
%>
<tr>
<%
Vector rowdata = (Vector)(data.elementAt(row));
for(int column=0; column<rowdata.size(); column++){
%>
<td>
<%=rowdata.elementAt(column)%>
</td>
<%
}
%>
</tr>
<%
}
%>
</table>
</center>
</body>
</html>

以上です。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-08-20 05:33
結論の書き込みは無かったようですが、参考になるのではないしょうか。↓
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=20980&forum=12&start=0



[ メッセージ編集済み 編集者: 小僧 編集日時 2006-08-20 05:33 ]
1

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