<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    java學(xué)習(xí)

    java學(xué)習(xí)

     

    web.xml加載過程

    當(dāng)我們?nèi)右粋€ WEB 項(xiàng)目的時(shí)候, 容器(包括 JBoss, Tomcat 等)首先會去讀項(xiàng)目的 web.xml 配置文件里面的信息, 

    當(dāng)這一步驟沒有出錯并且完成之后, 項(xiàng)目才能正常的被啟動起來。

    1> 首先是, 容器會先讀 <context-param></context-param> 節(jié)點(diǎn), 并創(chuàng)建一個 ServletContext 實(shí)例, 以節(jié)點(diǎn)的 name 作為鍵, value 作為值, 

       存儲到上下文環(huán)境中。

    2> 接著, 容器會去讀 <listener></listener> 節(jié)點(diǎn), 根據(jù)配置的 class 類路徑來創(chuàng)建監(jiān)聽。

    3> 接著, 容器去讀 <filter></filter> 節(jié)點(diǎn), 根據(jù)指定的類路徑來實(shí)例化過濾器。

    以上都是在 WEB 項(xiàng)目還沒有完全啟動起來的時(shí)候就已經(jīng)完成了的工作。如果系統(tǒng)中有用到 Servlet, 則 Servlet 是在第一次發(fā)起請求的時(shí)候被實(shí)例化的,

    且一般不會被容器銷毀, 它可以服務(wù)于多個用戶的請求。所以, Servlet 的初始化都要比上面提到的那幾個要遲。

    總的來說, web.xml 的加載順序是: context-param --> listener --> filter --> servlet

    其中, 如果 web.xml 中出現(xiàn)了相同的節(jié)點(diǎn), 則是按照在配置文件中出現(xiàn)的先后順序來加載的。

    下面引入一個小列子來說明:

      
    <?xml version="1.0" encoding="UTF-8"?>
      
      <listener>
        <listener-class>net.yeah.fancydeepin.listener.AppStartListener</listener-class>
      </listener>
      
      <!-- 為了更好的說明, 特意將 context-param 放在 listener 后面 -->
      <context-param>
        <param-name>technology</param-name>
        <param-value>java,javascript,ajax,css,html</param-value>
      </context-param>
      
      <filter>
        <filter-name>ReDespatcherFilter</filter-name>
        <filter-class>net.yeah.fancydeepin.filter.ReDespatcherFilter</filter-class>
        <init-param>
          <param-name>it</param-name>
          <param-value>android, python, c</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>ReDespatcherFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
      
      <filter>
        <filter-name>ReDespatcherFilter2</filter-name>
        <filter-class>net.yeah.fancydeepin.filter.ReDespatcherFilter2</filter-class>
        <init-param>
          <param-name>mail</param-name>
          <param-value>fancydeepin@yeah.net</param-value>
        </init-param>
      </filter>

    </web-app>
      

     

      
    package net.yeah.fancydeepin.listener;

    import java.util.Arrays;
    import java.util.List;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;

    public class AppStartListener implements ServletContextListener{

        public void contextInitialized(ServletContextEvent contextEvent) {
            System.out.println("********************************************");
            ServletContext context = contextEvent.getServletContext();
            List<String> params = Arrays.asList(context.getInitParameter("technology").split(","));
            for(String param : params){
                System.out.print(param + "\t");
            }
            System.out.println("\n********************************************");
        }

        public void contextDestroyed(ServletContextEvent contextEvent) {
            
        }

    }
      

     

      
    package net.yeah.fancydeepin.filter;

    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;

    public class ReDespatcherFilter implements Filter {
        
        public void init(FilterConfig filterConfig) throws ServletException {

            System.out.println("============================================");
            System.out.println(filterConfig.getInitParameter("it"));
            System.out.println("============================================");
        }
        
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException{
            
            chain.doFilter(request, response);
        }
        
        public void destroy() {
            
        }
    }
      

     

      
    package net.yeah.fancydeepin.filter;

    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;

    public class ReDespatcherFilter2 implements Filter {
        
        public void init(FilterConfig filterConfig) throws ServletException {

            System.out.println("++++++++++++++++++++++++++++++++++++++++++++");
            System.out.println(filterConfig.getInitParameter("mail"));
            System.out.println("++++++++++++++++++++++++++++++++++++++++++++");
        }
        
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException{
            
            chain.doFilter(request, response);
        }
        
        public void destroy() {
            
        }
    }
      


    后臺啟動輸出結(jié)果:

    posted on 2013-04-01 20:48 楊軍威 閱讀(214) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 一级毛片免费播放试看60分钟| 18禁无遮挡无码国产免费网站| 国产av无码专区亚洲av桃花庵| 精品一区二区三区无码免费视频| 亚洲www在线观看| 国产精品亚洲高清一区二区| 亚洲熟妇成人精品一区| 美女被免费喷白浆视频| 美女又黄又免费的视频| 内射少妇36P亚洲区| 免费va在线观看| 亚洲网站在线免费观看| 一本大道一卡二大卡三卡免费| 亚洲酒色1314狠狠做| 亚洲中久无码不卡永久在线观看| 最近中文字幕免费2019| 色婷婷综合缴情综免费观看| 亚洲神级电影国语版| 国产L精品国产亚洲区久久| 青苹果乐园免费高清在线| 国色精品va在线观看免费视频| 亚洲AV永久无码天堂影院| 亚洲精品天天影视综合网| 亚洲av日韩av欧v在线天堂| 国产桃色在线成免费视频 | 国产亚洲漂亮白嫩美女在线 | 国产免费一区二区三区免费视频| 亚洲中文字幕无码一去台湾 | 免费人成视频在线观看视频| 中文字幕天天躁日日躁狠狠躁免费| 一进一出60分钟免费视频| 亚洲欧美国产欧美色欲 | 成人精品视频99在线观看免费| 亚洲色大成网站www| 亚洲宅男永久在线| 亚洲色WWW成人永久网址| 亚洲av麻豆aⅴ无码电影| 国产美女无遮挡免费网站| 曰曰鲁夜夜免费播放视频| 最近2018中文字幕免费视频 | 97久久免费视频|