【发布时间】:2012-04-11 03:47:36
【问题描述】:
我有一个 servlet,它在 init() 上读取 .properties 文件。如果我在 web.xml 中设置了上下文参数,我的代码(不是下面的代码)可以工作,但我读到上下文参数是全局可访问的,我不希望这样,因为这个 servlet 只是一个更大的Web应用程序。我只是希望能够使用 init-param 标签来做到这一点 我试过这个:
public void init(ServletConfig config) throws ServletException {
try {
String fileName = config.getInitParameter("configFile");
System.out.println(fileName);
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
p = new Properties();
p.load(fis);
} catch (IOException e) {
e.printStackTrace();
}
}
但我不断收到文件未找到异常。我搜索了互联网,但大多数人使用 servlet 上下文。如果不在 web.xml 中包含 context-param 标记,我还能如何加载我的属性文件?
谢谢!
编辑:
java.io.FileNotFoundException: C:\WEB-INF\classes\myapp.properties (The system cannot find the path specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
at java.io.FileInputStream.<init>(FileInputStream.java:79)
at ipadService.ProxyServlet.init(ProxyServlet.java:53)
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(Thread.java:662)
【问题讨论】:
-
既然您打印的是 fileName 参数的名称 (
configFile),会发生这种情况吗?您是否看到您在 web.xml 中指定的参数?如果是这样,则该参数似乎有效,并且问题出在您尝试加载文件的方式中。你能添加你得到的异常吗? -
是的,它会正确打印出文件名。错误是''
-
是的,谢谢。我现在明白为什么这不起作用了。我试过'p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName));'但我仍然遇到同样的错误