jsf 2.2 获取属性文件的路径

Posted

技术标签:

【中文标题】jsf 2.2 获取属性文件的路径【英文标题】:jsf 2.2 get the path for a propertie file 【发布时间】:2014-02-13 22:09:54 【问题描述】:

我想从我的 jsf 2.2 项目中的属性文件中读出。我使用 Eclipse 开普勒。

我尝试在包含 de.exanple 包的文件夹 src 中的 java-bean 中使用它。 bean 的文件名为 PageServiceBean.java。

属性文件位于WEB-INF/resources/prop 文件夹中。属性文件称为 config.properties。

我已经读到我可以使用javax.faces.WEBAPP_RESOUCRES_DIRECTORY 参数名称和/WEB_INF/resoucres 之类的参数值更改web.xml 文件中jsf 2.2 中的资源文件夹

但我没有得到配置文件的路径。 你能告诉我在哪里可以得到路径名。我想我必须使用相对路径名。 你能帮帮我吗?

更新

我执行你喜欢的第二个代码片段:

private Properties getProperties() 
        Properties prop = new Properties();
        try 
            //load a properties file
            prop.load(new FileInputStream("config2.properties"));
         catch(Exception e) 

        
        return prop;
    

    public void setProperty1(Integer value) 
        Properties prop = getProperties();
        prop.setProperty("ort", value.toString());
        try 
            prop.store(new FileOutputStream("config2.properties"), null);
            Properties prop2 = getProperties();                 
         catch (IOException ex) 
            Logger.getLogger(PageServiceBean.class.getName()).log(Level.SEVERE, null, ex);

        
    

有效!我使用Properties prop3 = getProperties(); 来读取属性文件config2.properties。该文件存储在 Eclipse 主路径 ECLIPSE_HOME = C:\elipse_jee\eclipse 中。我可以将路径更改为特定路径,例如WEB_INF/resources吗?

【问题讨论】:

【参考方案1】:

ServletContext#getResourceAsStream() 及其 JSF 委托人ExternalContext#getResourceAsStream() 提供 Web 内容资源。所以,应该这样做:

ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
prop.load(ec.getResourceAsStream("/WEB-INF/resources/prop/config2.properties"));

另见:

Where to place and how to read configuration resource files in servlet based application?

【讨论】:

谢谢。但是在我阅读下面的链接之后。我认为使用prop.store() 函数最好将属性文件放在类路径中。你也相信吗? 在固定磁盘文件系统路径上。 它将部署在服务器上。 我不确定你在暗示什么。当然,您会在 Web 服务器上部署 Web 应用程序。 我将项目构建为 maven 项目。我读到的属性文件存储在 src/main/resources 文件夹中。我可以使用代码读取文件 config2.properties:ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext(); prop.load(ec.getResourceAsStream("config2.properties")); 或者我需要路径吗?【参考方案2】:

我会向您展示我的方法来满足您的需求,但我不会尝试回答您的问题。

为了在 JEE 应用程序中使用属性文件,我创建了一个无状态 bean,它为应用程序的其余部分提供属性的 getter 和 setter。只有这个 EJB 会访问服务器中的属性文件,我使用 java.util.Properties。

private Properties getProperties() 
    Properties prop = new Properties();
    try 
        //load a properties file
        prop.load(new FileInputStream("config.properties"));
     catch(Exception e) 

    
    return prop;

获得特定属性的访问方法后:

public Integer getProperty1() 
    Properties prop = getProperties();
    String value = prop.getProperty("myProperty1Name");
    if(value != null) 
        return Integer.parseInt(value );
    
    return 0;


public void setProperty1(Integer value) 
    Properties prop = getProperties();
    prop.setProperty("myProperty1Name", value.toString());
    try 
        prop.store(new FileOutputStream("config.properties"), null);
     catch (IOException ex) 
        Logger.getLogger(PropertiesManager.class.getName()).log(Level.SEVERE, null, ex);
    

在这种方法中,如果文件不存在,它将被创建。不过,属性的默认值将被硬编码。对于这种方法,您的文件放置在哪里并不重要。实际位置将取决于您的 JEE 服务器配置、域配置、应用程序部署文件等。

【讨论】:

感谢您的回答。但是当我在 PageServiceBean 中执行此操作时,我在您的第一个代码片段中找不到 config.properties 文件。我的问题是路径,我写在prop.load(new FileInputStream("config.properties")); 它将在您的磁盘中的某个位置创建,关键是它放置在哪里并不重要。如果您需要进行备份,请在磁盘中运行搜索以找到它。在 glassfish 服务器中,此文件将在 docroot 参数中指定的路径中创建。 谢谢。但我使用的是 tomcat 7 服务器。 如果您实现了我的代码,只需调用 setProperty1 方法并在磁盘中的 config.properties 文件中运行搜索/定位/查找。我将查看 tomcat 7 服务器文档... 看这个关于tomcat 7配置文件的问题。它可能允许你指定一个路径:***.com/questions/7276989/…

以上是关于jsf 2.2 获取属性文件的路径的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 JSF 中的上下文路径获取基本 URL?

怎么获取一个文件夹的路径,本地的路径

如何从 JSF 的 /WEB-INF 文件夹中获取属性文件?

获取“驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置”虽然设置正确的路径

文件属性操作

JAVA获取服务器路径的方法