![](/img/trans.png)
[英]Cannot create JDBC driver of class '' for connect URL 'null' -:ERROR while creating and using a Datasource in tomcat 6
[英]Cannot connect to datasource using @Resource DI in Tomcat 8
我想在JSP頁面上打印表中所有行的計數。 這種東西:
Total Products: 102
但是,我嘗試從數據源獲取連接時遇到NullPointerException
。
Tomcat 8是否支持@Resource依賴項注入?
在某些在線博客中,它似乎已受支持並且可以正常工作。 下面的鏈接。 https://www.mkyong.com/tomcat/how-to-configure-mysql-datasource-in-tomcat-6/
例外:
Stacktrace:] with root cause
java.lang.NullPointerException
at com.study.crud.dao.jdbc.impl.ProductDao.getProducts(ProductDao.java:31)
at org.apache.jsp.jsp.home_jsp._jspService(home_jsp.java:135)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
META-INF / context.xml的
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/product-manager-mvc1-webapp">
<!-- PostgreSQL Datasource -->
<Resource auth="Container" driverClassName="org.postgresql.Driver" factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory" maxActive="50" maxIdle="10" maxWait="-1" name="jdbc/product-db-v1" password="def" type="javax.sql.DataSource" url="jdbc:postgresql://localhost:5432/product-db-v1" username="abc"/>
</Context>
ProductDao.java
public class ProductDao {
@Resource(name = "jdbc/product-db-v1")
private DataSource dataSource;
public ProductDao() {
}
public List<Product> getProducts() throws SQLException {
List<Product> products = QueryExecutor.getAllProducts(dataSource.getConnection());
return products;
}
}
針對home.jsp
<%
ProductDao productDao = new ProductDao();
List<Product> products = productDao.getProducts();
LOG.debug("products = " + products);
int productCnt = 0;
if (products != null) {
productCnt = products.size();
}
%>
<body>
<h1>Resource Injection Demo</h1>
<h3>Product Count: <%= productCnt%></h3>
</body>
Tomcat 8當然支持使用@Resource批注注入DataSource對象。
它對您不起作用,因為您正在使用new
運算符創建ProductDao
。 僅當容器控制包含對象的生命周期時才進行注入。
在Tomcat的情況下,這意味着您可以對servlet,偵聽器,過濾器等執行@Resource注入。Tomcat不知道如何注入ProductDao,因為正如其他人提到的那樣,您需要一個完整的Java EE服務器實現(或使用Spring框架)。
如果這是一個學習練習,那么您可以在其中一種開源Java EE實現(例如GlassFish,Apache TomEE或WildFly(又名JBoss))中嘗試該方法,從而從中受益匪淺,在那里您可以將ProductDao注入到一個將加載數據並隨后轉發到您的JSP。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.