Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在servlet中调用Config.java?_Java - Fatal编程技术网

如何在servlet中调用Config.java?

如何在servlet中调用Config.java?,java,Java,我一直努力想弄清楚如何将这个数据库连接引入到我的servlet中,但失败了,因此在这里发布了这篇文章 Connection con = ((DataSource) a.getDataSource()).getConnection(); 基本上,我使用的是我在这个网站上找到的代码——一个由BalusC教授的代码 public class Config implements ServletContextListener { private static final String ATTR

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

 Connection con = ((DataSource) a.getDataSource()).getConnection();
基本上,我使用的是我在这个网站上找到的代码——一个由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);
    }
}
 Connection con = ((DataSource) a.getDataSource()).getConnection();
他解释说,您有这个类,所有servlet的连接都会启动一次,所以我认为这样做是一个很好的实践

 Connection con = ((DataSource) a.getDataSource()).getConnection();
现在,我的问题是,我不知道如何使在Config、context.xml文件等中设置的数据库连接在servlet中工作

 Connection con = ((DataSource) a.getDataSource()).getConnection();
以下是我尝试过的,但没有成功:

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"); 
 Connection con = ((DataSource) a.getDataSource()).getConnection();

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

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

event.getServletContext().setAttribute("connection_name", connection_object);
connection_object = config.getServletContext().getAttribute("connection_name");
 Connection con = ((DataSource) a.getDataSource()).getConnection();
在此之后,您可以在任何servlet中使用此
连接\u对象
,如下所示:

event.getServletContext().setAttribute("connection_name", connection_object);
connection_object = config.getServletContext().getAttribute("connection_name");
 Connection con = ((DataSource) a.getDataSource()).getConnection();

将数据源转换为连接

     Connection con = null;
     con = (Connection) a.getDataSource(); 
 Connection con = ((DataSource) a.getDataSource()).getConnection();
请换成

     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"); 
     }
 Connection con = ((DataSource) a.getDataSource()).getConnection();
使用以下命令:

 Connection con = ((DataSource) a.getDataSource()).getConnection();
与此相反:

 Connection con = ((DataSource) a.getDataSource()).getConnection();
 Connection con = null;
 con = (Connection) a.getDataSource();
 DBConnect dbConnect = new DBConnect();
 con = dbConnect.getConnection();                        
假设您已设置:

 Connection con = ((DataSource) a.getDataSource()).getConnection();
Config a = Config.getInstance(request.getServletContext());

什么是
con=(连接)a.getDataSource()中的
a
对不起,我漏掉了这一行:Config a=new Config();OP的代码已经包含了对具有getDataSource()方法的配置实例的引用。这是多余的。再看看OP的代码,我现在已经包括了Conig a=Config.getInstance(request.getServletContext());con=a.getDataSource().getConnection();但是,Tomcat仍然在向我发送错误消息:重新加载名为[/Web1]的上下文已启动contextDestroyed。。。。2013年9月30日上午7:19:53 org.apache.catalina.core.StandardContext重新加载信息:已完成重新加载名为[/Web1]的上下文,这不是错误。您的con对象是否按预期工作?我想是的,因为测试连接工作正常。现在,我添加了autoDeploy=“false”,上面的问题消失了。我收到另一个错误:启动ProtocolHandler[“http-apr-8080”]2013年10月1日8:22:19 PM org.apache.coyote.AbstractProtocol启动信息:启动ProtocolHandler[“ajp-apr-8009”]2013年10月1日8:22:19 PM org.apache.catalina.startup.catalina start浏览器给我一个http 405错误,Tomcat显示另一个错误:取消部署上下文[/Web1]2013年10月1日10:28:41 PM org.apache.catalina.startup.HostConfig部署描述符信息:部署配置描述符C:\\Tomcat\apache-Tomcat-7.0.42\conf\catalina\localhost\Web1.xml