我知道有很多类似的问题,但没有一个有帮助。 我们在tomcat服务器上运行了一个GWT应用程序,它正在加载数据库连接的属性文件。
加载属性文件的代码如下所示:
private static final String DB_CONF = "com/x/monitorui/server/configuration.properties";
Properties properties = new Properties();
properties.load(DatabaseConnection.class.getClass().getResourceAsStream(DB_CONF));
这在Jetty本地开发时工作正常,但在Tomcat上部署时则不行。它似乎找不到资源。
文件本身位于war/WEB-INF/classes/com/x/monitorui/server
,尝试加载它的类位于同一个包中。
答案 0 :(得分:1)
如果属性文件与用于调用“getResourceAsStream(..)”的类位于同一目录中,那么您只需要文件名,而不需要绝对路径。 例如,假设你有:
// notice that your build should copy this from the source directory to your /WEB-INF/classes/.... directory automatically so you can do a clean build
com/x/monitorui/server/configuration.properties
和位于同一目录的类,即。在包中:
com.x.monitorui.server.DatabaseConnection
然后你可以简单地调用
Properties properties = new Properties();
properties.load(DatabaseConnection.class.getResourceAsStream("configuration.properties"));
答案 1 :(得分:0)
Wo在这里使用“Packager.class”作为同一目录中的类几乎一样;这里的想法是通过类路径找到路径,该路径适用于tomcat:
final ClassPool pool = ClassPool.getDefault( );
final Class<?> baseClass = Packager.class;
pool.insertClassPath( new ClassClassPath( baseClass ) );
final URL url = pool.find( baseClass.getName( ) );
String pathToBaseClass = url.toURI( ).getPath( );
String baseDir = pathToBaseClass.substring( 0, pathToBaseClass.indexOf( "com" ) - 1 );