【问题标题】:assets folder is not accessible in java class Tomcat Web Project Built in Maven在 Maven 中构建的 java 类 Tomcat Web 项目中无法访问 assets 文件夹
【发布时间】:2021-02-06 19:49:51
【问题描述】:

我试图在项目的不同位置创建资产文件夹,并且其中有 MS Access DB 文件。 我想使用 ucanaccess 驱动程序访问它。但它给出了文件未找到异常。

数据库连接代码。

 public static Statement getConnectionStatement(){
    try {
        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");

        String url = "jdbc:ucanaccess://.\\assets\\BC190201004.accdb";

        connection = DriverManager.getConnection(url);

        return connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                ResultSet.CONCUR_UPDATABLE);
    } catch (ClassNotFoundException | SQLException e) {
        e.printStackTrace();
        return null;
    }
}

但使用此代码,它工作正常

        String url = "jdbc:ucanaccess://C:\\Users\\kha33\\NetBeansProjects\\CS506-Assignment-3\\src\\main\\webapp\\WEB-INF\\assets\\BC190201004.accdb";

我尝试将assets文件夹放在项目主文件夹、java文件夹、webapp文件夹和WEB-INF文件夹下。

我也在 NetBeans IDE 中尝试过。

【问题讨论】:

    标签: java web tomcat intellij-idea


    【解决方案1】:

    您用来访问文件的路径.\assets\BC190201004.accdb 是相对于Tomcat 进程的工作目录的。这通常是$CATALINA_BASE,但可以是任何东西(尤其是在 IDE 下)。

    您应该以更稳定的方式给出路径,例如通过使用ServletContext#getRealPath():

    public static Statement getConnectionStatement(ServletContext ctx){
        ...
        final String realPath = ctx.getRealPath("/WEB-INF/assets/BC190201004.accdb");
        final String url = "jdbc:ucanaccess://" + realPath;
        ...
    }
    

    显然,如果您的 Tomcat 不解压缩 WAR,这将失败。但是,这种情况并不常见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      • 2017-11-24
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2022-10-09
      相关资源
      最近更新 更多