あなたはJSPファイルから直接データベース接続を使用することについて話しているようですよね?まあ、これは理論的に正しい解決策ではありません。関心の分離の原則に従うと、ビュー(JSPファイル)はデータベースやデータアクセスについて何も知らないはずだからです。MVCパターンの説明を確認してください。たとえば、これは非常に明白です;-):
MVCパターンに関するウィキペディア
しかし、ショートカットを使用してデータベースをビューに認識させたい場合は、2つのオプションがあります。どちらも、Marcelo Tatajeがすでに述べたように、アプリケーションで以前に定義されたデータソースのJNDIルックアップを含みます。
Tomcatで接続プールに基づいてJNDIデータソースを定義する方法について:
http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html
同じページで、この接続プールを使用して、JSPから直接クエリを発行する方法を確認できます(これも私の意見では非常にお勧めできません)
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<sql:query var="rs" dataSource="jdbc/TestDB">
select id, foo, bar from testdata
</sql:query>
<html>
<head>
<title>DB Test</title>
</head>
<body>
<h2>Results</h2>
<c:forEach var="row" items="${rs.rows}">
Foo ${row.foo}<br/>
Bar ${row.bar}<br/>
</c:forEach>
</body>
</html>
java.sql.Connectionスレッドは安全ですか?
もう少し良い解決策は、Javaコードで、JNDIがコンテキストリスナーから次のようにデータソースをルックアップすることです。
public void contextInitialized(ServletContextEvent contextEvent) {
// JNDI Datasource lookup
InitialContext context = new InitialContext();
DataSource dataSource = (DataSource) context
.lookup("jdbc/DataSource");
// Storing datasource in application context
contextEvent.getServletContext().setAttribute("datasource",dataSource);
}
サーブレットから保存されたデータソースを使用して、このように必要なデータベース接続を取得した後
((DataSource)contextEvent.getServletContext().getAttribute("datasource")).getConnection()
Connectionクラスを直接使用しないでください。それはひどく原始的で時代遅れです。今日、深刻な職場環境では、そのような接続を処理する人は誰もいません。AmitGが提案したことを実行すると、すべての同時アクセスで共有される一意の接続になります。これが進むべき道ではない理由については、こちらをご覧ください