1. 程式人生 > >將properties檔案的配置設定為整個Web應用的全域性變數

將properties檔案的配置設定為整個Web應用的全域性變數

四種作用域: Web應用中的變數存放在不同的jsp物件中,會有不一樣的作用域,四種不同的作用域排序是 pageContext < request < session < application; 1、pageContext:頁面域,僅當前頁面有效,離開頁面後,不論重定向還是轉向(即無論是redirect還是forward),pageContext的屬性值都失效; 2、request:請求域,在一次請求中有效,如果用forward轉向,則下一次請求還可以保留上一次request中的屬性值,而redirect重定向跳轉到另一個頁面則會使上一次request中的屬性值失效; 3、session:會話域,在一次會話過程中(從瀏覽器開啟到瀏覽器關閉這個過程),session物件的屬性值都保持有效,在這次會話過程,session中的值可以在任何頁面獲取; 4、application:應用域,只要應用不關閉,該物件中的屬性值一直有效,並且為所有會話所共享。

利用ServletContextListener監聽器,一旦應用載入,就將properties的值儲存到application當中 現在需要在所有的jsp中都能通過EL表示式讀取到properties中的屬性,並且是針對所有的會話,故這裡利用application作用域, 那麼什麼時候將properties中的屬性儲存到application呢?因為是將properties的屬性值作為全域性的變數以方便任何一次EL的獲取,所以在web應用載入的時候就將值儲存到application當中, 這裡就要利用ServletContextListener: ServletContextListener是Servlet API 中的一個介面,它能夠監聽 ServletContext 物件的生命週期,實際上就是監聽 Web 應用的生命週期。 當Servlet 容器啟動或終止Web 應用時,會觸發ServletContextEvent 事件,該事件由ServletContextListener 來處理。

具體步驟如下: 1、新建一個類PropertyListenter實現 ServletContextListener介面的contextInitialized方法; 2、讀取properties配置檔案,轉存到Map當中; 3、使用ServletContext物件將Map儲存到application作用域中;

/**

  • 設值全域性變數

  • @author meikai

  • @version 2017年10月23日 下午2:15:19 */ public class PropertyListenter implements ServletContextListener {

    /* (non-Javadoc)

    • @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent) */ @Override public void contextDestroyed(ServletContextEvent arg0) { // TODO Auto-generated method stub

    }

    /* (non-Javadoc)

    • @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent) */ @Override public void contextInitialized(ServletContextEvent sce) {

      /**

      • 讀取properties檔案

      */ final Logger logger = (Logger) LoggerFactory.getLogger(PropertyListenter.class);

      Properties properties = new Properties();

      InputStream in = null; try { //通過類載入器進行獲取properties檔案流 in = PropertiesUtil.class.getClassLoader().getResourceAsStream(“kenhome-common.properties”); properties.load(in);

      } catch (FileNotFoundException e) { logger.error(“未找到properties檔案”); } catch (IOException e) { logger.error(“發生IOException異常”); } finally { try { if(null != in) { in.close(); } } catch (IOException e) { logger.error(“properties檔案流關閉出現異常”); } }

      /**

      • 將properties檔案轉存到map */ Map<String, String> pros = new HashMap<String,String>((Map)properties);

      /**

      • 將Map通過ServletContext儲存到全域性作用域中 */ ServletContext sct=sce.getServletContext();

      sct.setAttribute(“pros”, pros);

    }

}

4、在web.xml中配置上面的的監聽器PropertyListenter:

<listener>
  <listener-class>com.meikai.listener.PropertyListenter</listener-class>
</listener>