来自非servlet的web.xml参数,在JSF生命周期之外



如何获取JSF生命周期之外和Servlet之外的web.xml参数?我所能找到的都与servlet、jsf请求或Spring或Struts等框架的特定方法有关。

在纯Java EE中从web.xml获取配置有那么难吗?

在实践中

getServletContext().getInitParameter("ContextParam");
FacesContext.getCurrentInstance().getExternalContext().getInitParameterMap();

两者都不可用。

创建一个Servlet上下文侦听器和一个类,例如带有一些静态字段的AppContext

class AppContext {
   static String param = null;
   public satitc void setParam(String p) {
        param = p;
   }
   public satitc getParam() {
        return param;
   }
}

在方法contextInitialized中读取参数并将其设置为AppContext

@Override
public void contextInitialized(ServletContextEvent arg0) {
    AppContext.setParam(arg0.getServletConext().getInitParameter("ContextParam"));
}

在任何需要的地方使用方法AppContext#getParam()

这里有一个关于这个主题的小教程。

当您的应用程序加载时,您可以从init参数中获得这些信息,并使用ServletContextListener保存以在其他时间使用,类似于以下内容:

public class TestListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        String yourVariable = servletContextEvent.getServletContext().getInitParameter("yourParameter");
        //Some code..
    }
}

在web.xml中定义此侦听器:

<web-app ...>
   <listener>
    <listener-class>
             com.fullanem.TestListener 
        </listener-class>
   </listener>
</web-app>

在web.xml中也定义您的参数:

 <context-param>  
    <description>This is a context parameter example</description>  
    <param-name>yourParameter</param-name>  
    <param-value>Your value</param-value>  
  </context-param> 

因此,您可以将它存储在您想要的位置,作为Properties或全局变量,或任何位置。

最新更新