为什么我无法使用 getResourceAsStream 读取位于类路径中的属性文件(在 WEB-INF/lib 下)
Why I cant read properties file using getResourceAsStream when it is in classpath (under WEB-INF/lib)
当属性文件位于 class 路径(在 WEB-INF\lib 文件夹下)时,我正在测试使用 getResourceAsStream 读取属性文件。由于某种原因它不起作用。谁能告诉我我做错了什么?
这是我的环境:操作系统是Windows7。IDE是Eclipse 4.2.3 Kepler 64位。服务器 Tomcat 6.0.37 运行ning 在 8081 端口上。
我创建了一个 Web 应用程序 MyWebProject。
我有一个 app.properties
文件,它位于 WEB-INF\lib
文件夹中。这是 app.properties
文件的内容:
DataSource=jdbc/MyDB
我创建了一个 class AppProperties
来读取这个文件。这是 class:
public final class AppProperties {
private static String DATA_SOURCE_NAME;
public static String getDataSourceName() {
return DATA_SOURCE_NAME;
}
static {
ClassLoader classLoader = null;
InputStream propertiesFile = null;
Properties properties = null;
final String PROPERTIES_FILE_NAME = "app.properties";
properties = new Properties();
classLoader = Thread.currentThread().getContextClassLoader();
System.out.println("AppProperties: Name of classLoader = " + classLoader.getClass().getName());
propertiesFile = classLoader.getResourceAsStream(PROPERTIES_FILE_NAME);
System.out.println("AppProperties: propertiesFile = " + propertiesFile);
}
}
然后我创建了一个 Servlet AppPropertiesServlet
来测试它:
public class AppPropertiesServlet extends HttpServlet {
public AppPropertiesServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String dataSourceName = null;
dataSourceName = AppProperties.getDataSourceName();
}
}
我在 Tomcat 上部署了 Web 应用程序 MyWebProject。因此,在 Tomcat 的 webapps
文件夹下,创建了一个包含所有必要文件的新文件夹 MyWebProject
。然后我 运行 servlet http://localhost:8081/MyWebProject/AppPropertiesServlet
这是 Tomcat 控制台上显示的内容:
AppProperties: Name of classLoader =
org.apache.catalina.loader.WebappClassLoader
AppProperties:
propertiesFile = null
为什么 propertiesFile 为空? app.properties
文件位于 MyWebProject
文件夹的 WEB-INF\lib
文件夹中,但 classloader 无法找到它。奇怪的。我在这里做错了什么?
谢谢
如果您希望它位于 WEB-INF/lib
下,则必须将其打包在 JAR 中。
如果您希望它像普通文件一样,它必须在 WEB-INF/classes
.
中
当属性文件位于 class 路径(在 WEB-INF\lib 文件夹下)时,我正在测试使用 getResourceAsStream 读取属性文件。由于某种原因它不起作用。谁能告诉我我做错了什么?
这是我的环境:操作系统是Windows7。IDE是Eclipse 4.2.3 Kepler 64位。服务器 Tomcat 6.0.37 运行ning 在 8081 端口上。
我创建了一个 Web 应用程序 MyWebProject。
我有一个 app.properties
文件,它位于 WEB-INF\lib
文件夹中。这是 app.properties
文件的内容:
DataSource=jdbc/MyDB
我创建了一个 class AppProperties
来读取这个文件。这是 class:
public final class AppProperties {
private static String DATA_SOURCE_NAME;
public static String getDataSourceName() {
return DATA_SOURCE_NAME;
}
static {
ClassLoader classLoader = null;
InputStream propertiesFile = null;
Properties properties = null;
final String PROPERTIES_FILE_NAME = "app.properties";
properties = new Properties();
classLoader = Thread.currentThread().getContextClassLoader();
System.out.println("AppProperties: Name of classLoader = " + classLoader.getClass().getName());
propertiesFile = classLoader.getResourceAsStream(PROPERTIES_FILE_NAME);
System.out.println("AppProperties: propertiesFile = " + propertiesFile);
}
}
然后我创建了一个 Servlet AppPropertiesServlet
来测试它:
public class AppPropertiesServlet extends HttpServlet {
public AppPropertiesServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String dataSourceName = null;
dataSourceName = AppProperties.getDataSourceName();
}
}
我在 Tomcat 上部署了 Web 应用程序 MyWebProject。因此,在 Tomcat 的 webapps
文件夹下,创建了一个包含所有必要文件的新文件夹 MyWebProject
。然后我 运行 servlet http://localhost:8081/MyWebProject/AppPropertiesServlet
这是 Tomcat 控制台上显示的内容:
AppProperties: Name of classLoader = org.apache.catalina.loader.WebappClassLoader
AppProperties: propertiesFile = null
为什么 propertiesFile 为空? app.properties
文件位于 MyWebProject
文件夹的 WEB-INF\lib
文件夹中,但 classloader 无法找到它。奇怪的。我在这里做错了什么?
谢谢
如果您希望它位于 WEB-INF/lib
下,则必须将其打包在 JAR 中。
如果您希望它像普通文件一样,它必须在 WEB-INF/classes
.