如何在jsp中使用属性文件

可能重复:
如何将.properties文件加载到jsp中

我试图在JSP中使用我的属性文件,但它无法正常工作并抛出错误

Error: myproperties.properties (The system cannot find the file specified) 

在这里,我试图访问我的属性文件:

 <% try { FileInputStream fis = new FileInputStream("myproperties.properties"); Properties p = new Properties(); p.load(fis); String LogFileName = p.getProperty("NameOfLogFile"); out.println(LogFileName); } catch (Exception e) {// Catch exception if any out.println(e.getMessage()); } 

我已经通过多种方式尝试访问属性文件。 我该如何解决?

在包中创建test.properties文件

 pname=xyz psurname=abc 

创建jsp文件:

 <%@ page language="java" import="java.util.*" %> <%@ page import = "java.util.ResourceBundle" %> <% ResourceBundle resource = ResourceBundle.getBundle("test"); String name=resource.getString("pname"); String surname=resource.getString("psurname"); %> <%=name %> <%=surname%> 

JSP在servlet容器中运行,因此其当前工作目录由容器定义。 通常,它是安装容器的目录或其bin目录。 在任何情况下,它不是您要存储自定义属性文件的位置。

有两种典型的方法可以满足您的需求。

如果您的文件是应用程序的一部分而您从未在部署时更改它,那么第一种方法很好。 在这种情况下,从资源中读取它:

props.load(getClass().getResourceAsStream())

甚至更好

props.load(Thread.currentThread().getContextClassLoader().getResourceAsStream())

如果要在部署环境中更改属性文件,则第二种方法很好。 在这种情况下,将它放在容器外的文件系统中的某个位置。 例如linux上或您喜欢的任何其他位置上的/opt/mycompany/conf/myproperties.properties 。 现在,您应该在创建FileInputStream时使用绝对路径。

为了使系统更易于配置,您不应该在代码中编写配置文件的路径。 更好的方法是使用系统属性将其传递给应用程序,例如,在运行应用程序服务器时添加类似-Dmycompany.conf=/opt/mycompany/myprops.properties参数。 如果要读取文件,请执行以下操作:

new FileInputStream(System.getProperties("mycompany.conf"))

现在,您的系统配置可以由部署者独立控制。

尝试更改FileInputStream fis = new FileInputStream("myproperties.properties"); to FileInputStream fis = new FileInputStream(new File("myproperties.properties"));

此外,请确保已在jsp文件中导入您正在使用的类。 也就是说,

 <%@ page import="java.io.FileInputStream" %> <%@ page import="java.io.File" %>