如何将.properties文件加载到jsp中

时间:2009-07-16 22:26:14

标签: java jsp servlets

我已经达到了这个目标:

private Properties logoUrls = new Properties();
logoUrls.load(new FileInputStream("channelLogos.properties"));

其中channelLogos.properties与我的JSP位于同一目录中。我得到一个FileNotFound异常。我的应用程序实际上认为我的意思是“channelLogos.properties”,如果不是与JSP相同的目录?如何确定加载属性文件的正确路径?

6 个答案:

答案 0 :(得分:10)

这将完成这项工作:

<%@page import="java.io.InputStream" %>
<%@page import="java.util.Properties" %>

<%
    InputStream stream = application.getResourceAsStream("/some.properties");
    Properties props = new Properties();
    props.load(stream);
%>

无论如何,我真的认为你应该在 classpath 中拥有属性文件并使用servlet

答案 1 :(得分:6)

我想高度推荐阅读Model 2 Servlets。我向那些仍在使用Model 1 Servlet的人推荐它,也就是说,在JSP中做“真正的工作”。

关于你的问题:首先,在属性路径中抛出属性文件,然后使用getResourceAsSttream读取文件:

Thread.currentThread().getContextClassLoader().getResourceAsStream("channelLogos.properties");

当然,有很多选择,每个人都会有自己喜欢的选择。

答案 2 :(得分:4)

当你说“与JSP相同的目录”时,你到底是什么意思?您的JSP位于某个位置,例如/mywebapp/somefolder/my.jspmywebapp是您的应用程序根目录,您的属性文件是/mywebapp/somefolder/channelLogos.properties

如果是这样,那么很可能他们不在同一个目录中。 JSP已经编译,它实际所在的位置可能因servlet容器而异。您最好的选择是使用 pkaeding 建议的ServletContext.getRealPath(),并将相对于webapp上下文的属性文件路径作为参数。使用上面的例子:

private Properties logoUrls = new Properties();
logoUrls.load(new FileInputStream(servletContext.getRealPath("/somefolder/channelLogos.properties")));

尽管如此,请记住,如果您坚持将您的属性放在与JSP相同的文件夹中,您应该注意限制它不能公开访问(除非是这样)。

答案 3 :(得分:3)

看看ServletContext.getRealPath()。这应该为您提供属性文件的完整路径。

答案 4 :(得分:0)

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之类的参数。当您想读取文件时,请执行以下操作:

新的FileInputStream(System.getProperties(“ mycompany.conf”))

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

答案 5 :(得分:0)

在属性文件中,属性列出如下:

     label.esme.interface.dependenciesDelete = "Dependencies present. Cannot delete."

如果您使用的是Struts框架,它可以出现在struts-config.xml中,例如:

    <message-resources parameter="pathToApplcnRsrc"/>

或struts.properties,例如:

    struts.custom.i18n.resources = ApplicationResource

使用如下JSP中的属性文件中的属性:

    '<s:text name="label.esme.interface.dependenciesDelete" />'