將properties文件的配置設置爲整個Web應用的全局變量。

四種做用域:java

Web應用中的變量存放在不一樣的jsp對象中,會有不同的做用域,四種不一樣的做用域排序是 pageContext < request < session < application;web

一、pageContext:頁面域,僅當前頁面有效,離開頁面後,不論重定向仍是轉向(即不管是redirect仍是forward),pageContext的屬性值都失效;瀏覽器

二、request:請求域,在一次請求中有效,若是用forward轉向,則下一次請求還能夠保留上一次request中的屬性值,而redirect重定向跳轉到另外一個頁面則會使上一次request中的屬性值失效;session

三、session:會話域,在一次會話過程當中(從瀏覽器打開到瀏覽器關閉這個過程),session對象的屬性值都保持有效,在此次會話過程,session中的值能夠在任何頁面獲取;app

四、application:應用域,只要應用不關閉,該對象中的屬性值一直有效,而且爲全部會話所共享。jsp

 

利用ServletContextListener監聽器,一旦應用加載,就將properties的值存儲到application當中ide

如今須要在全部的jsp中都能經過EL表達式讀取到properties中的屬性,而且是針對全部的會話,故這裏利用application做用域,spa

那麼何時將properties中的屬性存儲到application呢?由於是將properties的屬性值做爲全局的變量以方便任何一次EL的獲取,因此在web應用加載的時候就將值存儲到application當中,code

這裏就要利用ServletContextListener:xml

ServletContextListenerServlet API 中的一個接口,它可以監聽 ServletContext 對象的生命週期,實際上就是監聽 Web 應用的生命週期。

Servlet 容器啓動或終止Web 應用時,會觸發ServletContextEvent 事件,該事件由ServletContextListener 來處理。

 

  具體步驟以下:

  一、新建一個類PropertyListenter實現 ServletContextListener接口的contextInitialized方法

  二、讀取properties配置文件轉存到Map當中

  三、使用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:

<!-- 全局變量監聽器,讀取properties文件,設值爲全局變量 -->
    <listener>
      <listener-class>com.meikai.listener.PropertyListenter</listener-class>
    </listener>

 

配置好後,運行Web應用,就能在全部的jsp頁面中用EL表達式獲取到properties中的屬性值了。

相關文章
相關標籤/搜索