0

私はsrcフォルダーを持っており、その中には多くのパッケージがあり、そのうちの1つはhibernate.utilです。

以前はhibernate.cfg.xmlをsrcフォルダーに配置し、その絶対パスを指定していましたが、このアプリをデプロイする必要があるため、絶対パスで問題が発生します。

新しいリソースフォルダーをソースフォルダーとして追加し、ソースフォルダーに含め、クラスパスに追加しようとしましたが、giveファイルが見つからないたびに

EclipseIDEを使用しています

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

これを処理する最良の方法は、クラスローダーを使用することです。

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

これは実際にはクラスパスを考慮に入れるためです。

それ以外の場合、相対パス名は、ソースツリーではなく、作業ディレクトリからの相対パスになります。

Eclipseでは、 [引数]タブに[作業ディレクトリ]という設定があり、デフォルトでプロジェクトフォルダーに設定されていることに注意してください。複数の実行構成の場合、さまざまな作業フォルダーを使用できます(このように、アプリケーションのさまざまな構成)。

一般的なディレクトリレイアウトは次のとおりです。

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

作業フォルダsite1またはに設定しますsite2

于 2012-07-09T12:31:27.830 に答える
0

あなたはそれにファイルを渡すべきではありません。ファイルは、ファイルシステム上のパスを表します。構成ファイルは、アプリのクラスと一緒に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.xmlhibernateUtilクラスの値をハードコーディングした場合のように、スラッシュを使用してみてください。そうでない場合は、このようなことをしてみてください

    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 に答える