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

我已经达到了这个目的:

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

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

这将完成工作:

 <%@page import="java.io.InputStream" %> <%@page import="java.util.Properties" %> <% InputStream stream = application.getResourceAsStream("/some.properties"); Properties props = new Properties(); props.load(stream); %> 

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

强烈建议您阅读有关Model 2 Servlets的内容 。 我推荐给那些仍然在做模型1 Servlet的人,也就是说,在JSP中做“真正的工作”。

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

 。Thread.currentThread()getContextClassLoader()的getResourceAsStream( “channelLogos.properties”);

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

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

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

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

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

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

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”))

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