加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何解决这个java.lang.ClassCastException:org.apache.tomcat.

发布时间:2020-12-15 05:23:38 所属栏目:Java 来源:网络整理
导读:我试图在tomcat中使用池进行数据库连接,这就是我的上下文: Resource name="jdbc/slingemp" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="root" driverClassName="com.mysql.jdbc
我试图在tomcat中使用池进行数据库连接,这就是我的上下文:

<Resource name="jdbc/slingemp" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost:3306/slingemp"/>

这就是我的web.xml:

<description>MySQL JNDI Test</description>
  <resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/slingemp</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

这就是我与数据库连接的方式:

package org.slingemp.jnditest;

import java.io.IOException;
import java.sql.Connection;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.tomcat.jdbc.pool.DataSource;

/**
 * Servlet implementation class JNDILookUpServlet
 */
@WebServlet("/JNDILookUpServlet")
public class JNDILookUpServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public JNDILookUpServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request,HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
        // TODO Auto-generated method stub
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request,HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request,IOException {
        // TODO Auto-generated method stub
        try {
            Context initContext = new InitialContext();
            Context envContext  = (Context)initContext.lookup("java:/comp/env");
            DataSource ds = (DataSource)envContext.lookup("jdbc/slingemp");
            Connection conn = ds.getConnection();
            if(conn != null)System.out.println("Connected..");
            else System.out.println("Not connected...");
        } catch (Exception e) {
            e.printStackTrace();
        }
        response.sendRedirect("index.jsp");
    }


}

但它给了我以下例外:

java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.BasicDataSource cannot be cast to org.apache.tomcat.jdbc.pool.DataSource

请帮我解决这个问题,

问候

解决方法

你只是使用错误的导入.

替换这个:

import org.apache.tomcat.jdbc.pool.DataSource;

有了这个:

import javax.sql.DataSource;

javax.sql.DataSource是所有DataSource实现必须继承的基接口.通常不建议针对此接口以外的任何其他方式进行开发.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读