如何调用servlet中的Config.java?

时间:2013-09-30 05:55:32

标签: java

我一直在努力弄清楚如何将这个数据库连接引入我的servlet,但是失败了,因此在这里发布。

基本上,我正在使用这个代码,我找到了我的网站 - 由BalusC教授的。

public class Config implements ServletContextListener {
    private static final String ATTRIBUTE_NAME = "config";
    private DataSource dataSource;

    @Override
    public void contextInitialized(ServletContextEvent event) {
        ServletContext servletContext = event.getServletContext();
        String databaseName = servletContext.getInitParameter("pract1");
        try {
            dataSource = (DataSource) new InitialContext().lookup("java:/comp/env/jdbc/TestDB");  
        } catch (NamingException e) {
            throw new RuntimeException("Config failed: datasource not found", e);
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        System.out.println("contextDestroyed....");
    }

    public DataSource getDataSource() {
        return dataSource;
    }

    public static Config getInstance(ServletContext servletContext) {
        return (Config) servletContext.getAttribute(ATTRIBUTE_NAME);
    }
}

他解释说你有这个类,并且连接将为所有servlet启动一次,所以我认为这样做很好。

现在,我的问题是我不知道如何使在Config中设置的数据库连接,context.xml文件等在servlet中工作。

这是我尝试的但是没有成功:

Connection con = null;
Config a = new Config();
con = (Connection) a.getDataSource();
DBConnect dbConnect = new DBConnect();
con = dbConnect.getConnection();                        

stmt = con.createStatement();                   
rs = stmt.executeQuery("SELECT * FROM members"); 

我希望有人能告诉我如何将连接带入我的doPost Servlet。

3 个答案:

答案 0 :(得分:1)

使用ServletContextListner中创建的连接的更好方法是将其设置为ServletContext中的属性,如下所示:

event.getServletContext().setAttribute("connection_name", connection_object);

在此之后,您可以在任何这样的servlet中使用此connection_object

connection_object = config.getServletContext().getAttribute("connection_name");

答案 1 :(得分:0)

您的投放数据源到连接

     Connection con = null;
     con = (Connection) a.getDataSource(); 

请改为

     DataSource dataSource= null;
     dataSource = (DataSource) a.getDataSource(); // Your casting datasource to Connection 

     //get the connection from datasource

     if (dataSource!= null) {
        con = dataSource.getConnection();
     }
     if (con!= null) {
       stmt = con.createStatement();                   
       rs = stmt.executeQuery("SELECT * FROM members"); 
     }

答案 2 :(得分:0)

使用此:

 Connection con = ((DataSource) a.getDataSource()).getConnection();

而不是:

 Connection con = null;
 con = (Connection) a.getDataSource();
 DBConnect dbConnect = new DBConnect();
 con = dbConnect.getConnection();                        

假设您已设置:

Config a = Config.getInstance(request.getServletContext());