assets folder is not accessible in java class Tomcat Web Project Built in Maven

Tags: , , ,



I have tried to make assets folder in different locations in the project and I have MS Access DB file in it. I want to access it using ucanaccess driver. but it gives file not found exception.

DB connectivity code.

 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;
    }
}

but with this code, it is working fine

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

I tried to put assets folder under the project main folder, java folder, webapp folder and WEB-INF folder.

I also tried in NetBeans IDE.

Answer

The path .assetsBC190201004.accdb you use to access your file is relative to the working directory of Tomcat’s process. That is usually $CATALINA_BASE, but can be anything (especially under an IDE).

You should give the path in a more stable way, e.g. by using ServletContext#getRealPath():

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

Obviously this will fail if your Tomcat does not unpack WARs. However, that is not a common situation.



Source: stackoverflow