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

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

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

    張慧的博客

    張慧的博客

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      45 Posts :: 0 Stories :: 24 Comments :: 0 Trackbacks

    置頂隨筆 #

    對于Servlet的生命周期,主要圍繞著init()、service()和destroy()三個回調方法展開的。什么是回調方法?通俗的說就是這三個方法定義完后由web容器負責在特定時間(需要的時候)調用。

    Servlet容器,如Tomcat一般會在用戶第一次請求Servlet的時候實例化該對象。另一種情況是在服務器啟動時立即加載并實例化,但這需要在web.xml文件中對Servlet進行load-on-startup的配置。

    當第一個用戶請求到來時,服務器根據部署描述符找到所訪問的Servlet類,并查找當前容器,發現沒有此類的實例,說明是第一次訪問此Servlet,所以容器開始加載Servlet,并實例化此對象,實例化之后會立即調用init()方法,而且init()方法由始至終只被調用一次,所以比較適合進行對象的初始化工作,比如讀取配置文件,初始化屬性等。當調用完init()方法后,Servlet實例處于ready狀態,這時開始調用其service()方法,并等待著下一次請求的到來。

    service()方法是服務方法,只要再有請求到來,服務器都會產生一個新的線程,調用service()方法,進行相關的服務。service()方法會檢查HTTP請求的類型(GET、POST等),來相應的調用doGet()、doPost()等。GET請求起因于正常URL請求,或沒有指定Method的HTML表單;Post請求起因于將Method定為Post的HTML表單。從圖中可見,service()方法可以被調用多次,因為之后用戶每一次訪問該Servlet,都會觸發服務器調用service()方法。

    如果實例長時間未被訪問,或者web服務器關閉,則容器會負責調用destroy()方法,該方法可以將一些資源釋放,destroy()方法也是只被調用一次,之后Servlet實例將被JVM回收空間。這樣通過init()-->service()-->destroy(),完成了Servlet的一個生命周期。

    上圖是UML中的狀態圖,形象的描述了一個對象在不同事件觸發時,其內部狀態的變更過程。實心的圓圈代表初始狀態,代表Servlet剛剛被實例化:中間寫Ready的橢圓形代表就緒狀態,最下面的圓圈代表結束,這時對象已被JVM的GC回收。圖中的另外一個分支,代表在執行init()操作時拋出了異常,造成無法調用service()方法,生命周期提前終止。

    posted @ 2012-07-08 23:33 張慧 閱讀(1416) | 評論 (0)編輯 收藏

    這是在一個opensource項目中看到的獲取訪問者ip的方法: 
    /**
          * 獲取訪問者IP
          * 
          * 在一般情況下使用Request.getRemoteAddr()即可,但是經過nginx等反向代理軟件后,這個方法會失效。
          * 
          * 本方法先從Header中獲取X-Real-IP,如果不存在再從X-Forwarded-For獲得第一個IP(用,分割),
          * 如果還不存在則調用Request .getRemoteAddr()。
          * 
          * 
    @param request
          * 
    @return
          
    */
         public static String getIpAddr(HttpServletRequest request) {
             String ip = request.getHeader("X-Real-IP");
             if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
                 return ip;
             }
             ip = request.getHeader("X-Forwarded-For");
             if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
                 // 多次反向代理后會有多個IP值,第一個為真實IP。
                 int index = ip.indexOf(',');
                 if (index != -1) {
                     return ip.substring(0, index);
                 } else {
                     return ip;
                 }
             } else {
                 return request.getRemoteAddr();
             }
         }
    posted @ 2012-07-08 23:31 張慧 閱讀(2983) | 評論 (0)編輯 收藏

    在java中經常需要獲取一些系統信息,如系統的資源空間等。下面就是一些Runtime的應用:


    public static void main(String[] a){
             Runtime runtime 
    = Runtime.getRuntime();
             
    long freeMemoery = runtime.freeMemory();
             
    long totalMemory = runtime.totalMemory();
             
    long usedMemory = totalMemory - freeMemoery;
             
    long maxMemory = runtime.maxMemory();
             
    long useableMemory = maxMemory - totalMemory + freeMemoery;
             
             System.out.println(
    "當前時間:"+runtime);
             System.out.println(
    "系統閑置空間:"+freeMemoery);
             System.out.println(
    "系統總空間:"+totalMemory);
             System.out.println(
    "系統被用的空間:"+usedMemory);
             System.out.println(
    "系統最大空間:"+maxMemory);
             System.out.println(
    "系統可用空間:"+useableMemory);
         }

    運行效果:


    當前時間:java.lang.Runtime@c3c749
     系統閑置空間:
    4873672
     系統總空間:
    5177344
     系統被用的空間:
    303672
     系統最大空間:
    66650112
     系統可用空間:
    66346440

     

    posted @ 2012-07-08 23:30 張慧 閱讀(746) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲国产精品毛片av不卡在线| 免费看国产精品3a黄的视频| 国产亚洲av片在线观看18女人| 亚洲AV无码一区二区三区久久精品 | 特级毛片aaaa免费观看| 破了亲妺妺的处免费视频国产 | 95老司机免费福利| 精品无码一区二区三区亚洲桃色| 久久成人无码国产免费播放| 亚洲va无码va在线va天堂| 日韩精品免费视频| 精品日韩亚洲AV无码一区二区三区| 日韩中文字幕免费视频| 亚洲日本国产乱码va在线观看| 一个人免费观看在线视频www| 亚洲国产精品日韩av不卡在线| 免费在线观看中文字幕| 国产99久久久久久免费看| 亚洲av无码一区二区三区不卡| 30岁的女人韩剧免费观看| 亚洲依依成人亚洲社区| 亚洲精品成a人在线观看| 最近免费中文字幕中文高清 | 亚洲国产精品一区二区久久hs| 久久青草国产免费观看| 91情国产l精品国产亚洲区| 最近免费中文字幕大全视频| MM1313亚洲精品无码久久| 国产国拍精品亚洲AV片| 中文字幕在线观看免费视频| 亚洲人成网站18禁止| 亚洲成片观看四虎永久| 久久久久免费精品国产小说| 亚洲精品精华液一区二区| 区三区激情福利综合中文字幕在线一区亚洲视频1| 99精品免费视品| 国产精品亚洲一区二区麻豆| 亚洲精品一级无码中文字幕| 120秒男女动态视频免费| 国产亚洲综合久久| 亚洲永久永久永久永久永久精品|