0

我有 src 文件夹,里面有很多包,其中之一是 hibernate.util。

早些时候我将 hibernate.cfg.xml 放在 src 文件夹中并给出了它的绝对路径,现在因为我必须部署这个应用程序,所以绝对路径给我带来了问题。

我尝试添加一个新的资源文件夹作为源文件夹,将其包含在源文件夹中,将其添加到类路径中,但每次找不到它的文件

我正在使用 Eclipse IDE

SEVERE: Allocate exception for servlet sandbox
java.io.FileNotFoundException: .\resources\hibernate.cfg.xml (The system cannot find the path specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(Unknown Source)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2216)
    at dal.utils.HibernateUtils.buildSessionFactory(HibernateUtils.java:25)
    at dal.utils.HibernateUtils.<clinit>(HibernateUtils.java:19)
    at dal.service.CalcDataMapper.load(CalcDataMapper.java:17)
    at com.renturduniya.www.sandbox.init(sandbox.java:41)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1206)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:827)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Unknown Source)
4

4 回答 4

0

你不应该给它传递一个文件。File 表示文件系统上的路径。您的配置文件应与应用程序的类一起捆绑在 jar/war 中,并使用类加载器加载。

您应该使用将URL 作为参数的方法,并将返回的 URL 传递给它

SomeClassOfYourWebApp.class.getResource(
    "/the/package/where/the/file/is/hibernate.cfg.xml");
于 2012-07-09T12:21:39.457 回答
0

尝试使用正斜杠/resources/hibernate.cfg.xml,以防您在 hibernateUtil 类中对值进行了硬编码。如果不尝试做这样的事情

    URL url = hibernateUtil.class.getClassLoader().getResource(
                    "hibernate.cfg.xml");
   // Now try to get the get path of the file using 
    url.getPath();

我认为这对你有帮助。

于 2012-07-09T12:22:18.300 回答
0

外部文件始终是绝对路径。

于 2012-07-09T12:24:17.680 回答
0

处理这个问题的最好方法是使用类加载器。

Whatever.class.getClassLoader().getResource("name");

因为这实际上会考虑到类路径。

否则,相对路径名将与您的工作目录相关,而不是与您的源代码树相关。

请注意,在EclipseRun Configurations中,您在Arguments选项卡中有一个名为Working directory的设置,默认为您的项目文件夹。对于多个运行配置,您可以使用不同的工作文件夹(这样,您的应用程序可以使用不同的配置)。

常见的目录布局可能是:

bin/     compiled classes, in classpath
src/     source files, not used at runtime
site1/   configuration for running site 1
site2/   configuration for running site 2

然后将文件放入:

site1/resources/hibernate.cfg.xml
site2/resources/hibernate.cfg.xml

并将工作文件夹设置为site1or site2

于 2012-07-09T12:31:27.830 回答