Вы, кажется, говорили об использовании непосредственно подключение к базе данных из файлов JSP, не так ли? Ну, это не теоретически правильное решение, потому что, следуя принципу разделения проблем, ваш взгляд - ваш JSP-файл - вообще ничего не должен знать о базах данных или доступе к данным. Проверьте любое описание MVC шаблон, например, это довольно очевидно ;-):
Wikipedia on MVC pattern
Но если вы хотите взять shorcut и иметь свой взгляд в курсе вашей базе данных у вас есть, на мой взгляд, два варианта , оба из которых связаны с JNDI-поиском источника данных, ранее определенного в вашем приложении, как уже сказано Marcelo Tataje.
О том, как определить на 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>
Is java.sql.Connection thread safe?
другой немного лучшее решение есть в коде Java, JNDI Lookup источника данных, как это из вашего контекста слушателя:
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()
Не используйте непосредственно класс подключения. Это ужасно примитивно и устарело. В настоящее время никто в серьезной рабочей среде не занимается такими связями. Если вы сделаете то, что предложили AmitG, вы получите уникальное соединение, доступное для всех одновременных доступов. Посмотрите на это, почему это не так.
Я бы рекомендовал исследовать шаблон [Singleton pattern] (http://en.wikipedia.org/wiki/Singleton_pattern) и объединение пулов DB ... Также , работа с соединениями DB на уровне JSP - это то, что я пытался бы избежать любой ценой. JSP должен быть только для отображения, ИМХО. – ppeterka
Возможно, пул подключения к базе данных будет уместен? – vikingsteve
объект singleton для соединения с БД будет лучшей идеей, создайте объект в контексте вашего приложения. –