小菜毛毛技術分享

          與大家共同成長

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks
          http://blog.csdn.net/wjp553650958/archive/2009/08/30/4499540.aspx
          讀取容器配置參數---context-param和init-param區別

          web.xml里面可以定義兩種參數:
          (1)application范圍內的參數,存放在servletcontext中,在web.xml中配置如下:  <context-param>
                     <param-name>context/param</param-name>
                     <param-value>avalible during application</param-value>

                     <param-name>name1</param-name>
                     <param-value>value1</param-value>
            </context-param>


          (2)servlet范圍內的參數,只能在servlet的init()方法中取得,在web.xml中配置如下:

           <servlet>
              <servlet-name>MainServlet</servlet-name>
              <servlet-class>com.wes.controller.MainServlet</servlet-class>
              <init-param>
                 <param-name>param1</param-name>
                 <param-value>avalible in servlet init()</param-value>
              </init-param>
              <load-on-startup>0</load-on-startup>
           </servlet>


          在servlet中可以通過代碼分別取用:

          package com.wes.controller;

          import javax.servlet.ServletException;
          import javax.servlet.http.HttpServlet;

          public class MainServlet extends HttpServlet ...{

              public MainServlet() ...{
                  super();
               }
              public void init() throws ServletException ...{
                   System.out.println("下面的兩個參數param1是在servlet中存放的");
                   System.out.println(this.getInitParameter("param1"));
                   System.out.println("下面的參數是存放在servletcontext中的");
                   System.out.println(getServletContext().getInitParameter("context/param"));
                }
          }

          第 一種參數在servlet里面可以通過getServletContext().getInitParameter("context/param")得 到?(在servlet的init()方法中通過this.getInitParameter("param1")取得)


          第二種參數只能在servlet的init()方法中通過this.getInitParameter("param1")取得

          ---------------------------------------------------------------------


          ServletContextListener實現讀取web.xml中context-param信息      2009年03月27日 星期五 22:37
            用部署文件來存儲配置參數在Java中是一種很流行的做法。

          配置參數一般存放在context-param元素中,每一個context-param元素代表了一個鍵值對。

          我 們可以通過實現ServletContextListener接口讀取該鍵值對中的值,在web應用程序初始化的時候,調用 ServletContextListener的contextInitialized()方法,所以我們我們可以重寫該方法,實現讀取操作。可以這樣實 現:

          public class AppListener implements ServletContextListener {


          public void contextInitialized(ServletContextEvent sce) {
             try {
                    
                      MyConfig config = new MyConfig();//存放配置信息,用Map實現
                      Enumeration parameters =  sce.getServletContext().getInitParameterNames();
                     
                      while(parameters.hasMoreElements()){
                         String name =  (String) parameters.nextElement();
                         config.addKeyTValue(name, sce.getServletContext().getInitParameter(name));
                      } 

                  //相應的鍵值對存到map中
                    config.addKeyValue(parameter, sc.getInitParameter(parameter));
              }
             } catch(Exception e) {
              System.out.println("com.shou error:" + e.getMessage());
             }
          }

          public void contextDestroyed(ServletContextEvent arg0) {

          }
          }

           MyConfig類:(Singleton Config)
          package com.myapp;

          import java.util.Collection;
          import java.util.HashMap;
          import java.util.Map;
          import java.util.Set;

          /**
           *
           * @author Administrator
           */

          public class MyConfig{
              public static MyConfig myconfig;
             
              public static HashMap config = new HashMap();

              public static HashMap getConfig() {
                  return config;
              }
             
              public static MyConfig getInstance(){
                  if(myconfig==null){
                      myconfig = new MyConfig();
                     
                  }
                  return myconfig;
              }
              public static void setConfig(HashMap config) {
                 
                  MyConfig.config = config;
              }

               public HashMap addKeyTValue(String name,String value){
                     this.config.put(name, value);
                     return this.config;
                    
               }
          }

          接著,必須在web.xml中配置相應的監聽類,才能在初始化的時候,自動調用該方法。如:

          <listener>
          <listener-class>com.myapp.MyListener</listener-class>
          </listener>

          這樣就可以在任何一個JSP頁面,通過EL表達式或JSTL讀到context-param中的內容。

          有的網友說在web.xml內定義<listener>元素時得注意下列兩點:
          <listener>元素必須出現在任何Context起始參數(由<context-param>元素所定義)之后。
          <listener>元素必須出現在任何Servlet實體(由<servlet>元素所定義)之前。

          但是我在TOMCAT5.5 + J2EE 5下配置web.xml并沒有按照上述的嚴格限制也能成功讀取信息。

          難道是版本的問題嗎。

          在Struts 1.X下,通過一個自定義的Singleton Config類,可以讓web.xml中的配置參數在整個應用程序里都能被共享。


          posted on 2010-09-30 16:38 小菜毛毛 閱讀(4059) 評論(0)  編輯  收藏 所屬分類: 面試java定時器servlet
          主站蜘蛛池模板: 麻阳| 岗巴县| 乌鲁木齐县| 蕲春县| 哈巴河县| 富宁县| 长岭县| 大悟县| 保亭| 富锦市| 呼玛县| 休宁县| 蓬莱市| 九江市| 汉川市| 兴安县| 江孜县| 浏阳市| 晋江市| 江城| 成安县| 开远市| 白山市| 洞头县| 元朗区| 新野县| 灵寿县| 蓝山县| 镇坪县| 宁国市| 石棉县| 新宾| 敦化市| 兰州市| 建湖县| 长泰县| 舟山市| 南京市| 安阳县| 海宁市| 九台市|