我有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)
答案 0 :(得分:0)
你不应该传递一个文件。文件表示文件系统上的路径。您的配置文件应与jar / war一起捆绑在应用程序的类中,并使用类加载器加载。
您应该使用method taking a URL as argument代替,并将
返回的网址传递给它SomeClassOfYourWebApp.class.getResource(
"/the/package/where/the/file/is/hibernate.cfg.xml");
答案 1 :(得分:0)
如果您在hibernateUtil类中对值进行了硬编码,请尝试使用/resources/hibernate.cfg.xml
之类的正斜杠。如果没有尝试做这样的事情
URL url = hibernateUtil.class.getClassLoader().getResource(
"hibernate.cfg.xml");
// Now try to get the get path of the file using
url.getPath();
我认为这有助于你。
答案 2 :(得分:0)
外部文件始终是绝对路径。
答案 3 :(得分:0)
处理此问题的最佳方法是使用类加载器。
Whatever.class.getClassLoader().getResource("name");
因为这实际上会考虑类路径。
否则,相对路径名将相对于工作目录,而不是源树。
请注意,在 Eclipse ,运行配置中,您在 Arguments 标签中有一个名为工作目录的设置,默认为您的项目文件夹。对于多个运行配置,您可以使用不同的工作文件夹(这样,应用程序的不同配置)。
常见的目录布局可能是:
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
。