2013年10月15日

               摘要: PL/SQL Developer version 9.0.6.1665 無限用戶注冊碼激活碼 1 Product Code: 46jw8l8ymfmp2twwbuur8j9gv978m2q2du 2 serial Number:307254 3 password:xs374ca 4 License Numbe...  閱讀全文

          posted @ 2013-10-15 09:02 志成中國 閱讀(4036) | 評論 (1)編輯 收藏


          2013年1月5日

               摘要:  認(rèn)識ExtJSextjs是使用javascript、css和html等技術(shù)實現(xiàn)的主要用于創(chuàng)建用戶界面,且與后臺技術(shù)無關(guān)的前端ajax框架。extjs來源于yui,開發(fā)理念來源于傳統(tǒng)的桌面軟件開發(fā)。1.下載extjs,解壓,得到目錄結(jié)構(gòu)o builds:是extjs壓縮后的代碼,體積更小,加載更快o docs :extjs的文檔o examples...  閱讀全文

          posted @ 2013-01-05 17:04 志成中國 閱讀(1198) | 評論 (2)編輯 收藏


          2012年11月9日

               摘要: 不同概率的抽獎今天為大家寫個小程序。工作中有遇到一些抽獎的活動,但是你懂得,抽獎物品的概率肯定不是一樣,你會發(fā)現(xiàn)好的東西很難抽到,經(jīng)常抽到一些垃圾的東西,嘿嘿,這就是本文要說的,我們要控制抽獎物品的概率。還有順便說一句,網(wǎng)上這種小程序幾乎沒有,很多都是等概率的抽獎balabala…需求很簡單,為了更加形象,這里我們列一個表格來顯示我們抽獎的物品和對應(yīng)的概率(沒有邊框,大家湊合著看看吧,...  閱讀全文

          posted @ 2012-11-09 16:03 志成中國 閱讀(487) | 評論 (2)編輯 收藏

          Java中static、this、super、final用法

          親:本文具體講解了Java中static的用法,具體內(nèi)容有static的靜態(tài)方法、靜態(tài)變量、靜態(tài)類。(⊙o⊙),你們覺得如何?
          一、static
          請先看下面這段程序:
          public class Hello{
          public static void main(String[] args){ //(1)
          System.out.println("Hello,world!"); //(2)
          }
          }
           
          看過這段程序,對于大多數(shù)學(xué)過Java 的從來說,都不陌生。即使沒有學(xué)過Java,而學(xué)過其它的高級語言,例如C,那你也應(yīng)該能看懂這段代碼的意思。它只是簡單的輸出“Hello,world”,一點別的用處都沒有,然而,它卻展示了static關(guān)鍵字的主要用法。
          在1處,我們定義了一個靜態(tài)的方法名為main,這就意味著告訴Java編譯器,我這個方法不需要創(chuàng)建一個此類的對象即可使用。你還得你是怎么運行這個程序嗎?一般,我們都是在命令行下,打入如下的命令(加下劃線為手動輸入):
           
          javac Hello.java
          java Hello
          Hello,world!
           
          這就是你運行的過程,第一行用來編譯Hello.java這個文件,執(zhí)行完后,如果你查看當(dāng)前,會發(fā)現(xiàn)多了一個Hello.class文件,那就是第一行產(chǎn)生的Java二進(jìn)制字節(jié)碼。第二行就是執(zhí)行一個Java程序的最普遍做法。執(zhí)行結(jié)果如你所料。在2中,你可能會想,為什么要這樣才能輸出。好,我們來分解一下這條語句。(如果沒有安裝Java文檔,請到Sun的官方網(wǎng)站瀏覽J2SE API)首先,System是位于java.lang包中的一個核心類,如果你查看它的定義,你會發(fā)現(xiàn)有這樣一行:public static final PrintStream out;接著在進(jìn)一步,點擊PrintStream這個超鏈接,在METHOD頁面,你會看到大量定義的方法,查找println,會有這樣一行:
           
          public void println(String x)
           
          好了,現(xiàn)在你應(yīng)該明白為什么我們要那樣調(diào)用了,out是System的一個靜態(tài)變量,所以可以直接使用,而out所屬的類有一個println方法。
          靜態(tài)方法
          通常,在一個類中定義一個方法為static,那就是說,無需本類的對象即可調(diào)用此方法。如下所示:
          class Simple{
          static void go(){
          System.out.println("Go...");
          }
          }
          public class Cal{
          public static void main(String[] args){
          Simple.go();
          }
          }
           
          調(diào)用一個靜態(tài)方法就是“類名.方法名”,靜態(tài)方法的使用很簡單如上所示。一般來說,靜態(tài)方法常常為應(yīng)用程序中的其它類提供一些實用工具所用,在Java的類庫中大量的靜態(tài)方法正是出于此目的而定義的。
          靜態(tài)變量
          靜態(tài)變量與靜態(tài)方法類似。所有此類實例共享此靜態(tài)變量,也就是說在類裝載時,只分配一塊存儲空間,所有此類的對象都可以操控此塊存儲空間,當(dāng)然對于final則另當(dāng)別論了。看下面這段代碼:
           
          class Value{
          static int c=0;
          static void inc(){
          c++;
          }
          }
          class Count{
          public static void prt(String s){
          System.out.println(s);
          }
          public static void main(String[] args){
          Value v1,v2;
          v1=new Value();
          v2=new Value();
          prt("v1.c="+v1.c+" v2.c="+v2.c);
          v1.inc();
          prt("v1.c="+v1.c+" v2.c="+v2.c);
          }
          }
           
          結(jié)果如下:
           
          v1.c=0 v2.c=0
          v1.c=1 v2.c=1
           
          由此可以證明它們共享一塊存儲區(qū)。static變量有點類似于C中的全局變量的概念。值得探討的是靜態(tài)變量的初始化問題。我們修改上面的程序:
           
          class Value{
          static int c=0;
          Value(){
          c=15;
          }
          Value(int i){
          c=i;
          }
          static void inc(){
          c++;
          }
          }
          class Count{
          public static void prt(String s){
          System.out.println(s);
          }
          Value v=new Value(10);
          static Value v1,v2;
          static{
          prt("v1.c="+v1.c+" v2.c="+v2.c);
          v1=new Value(27);
          prt("v1.c="+v1.c+" v2.c="+v2.c);
          v2=new Value(15);
          prt("v1.c="+v1.c+" v2.c="+v2.c);
          }
          public static void main(String[] args){
          Count ct=new Count();
          prt("ct.c="+ct.v.c);
          prt("v1.c="+v1.c+" v2.c="+v2.c);
          v1.inc();
          prt("v1.c="+v1.c+" v2.c="+v2.c);
          prt("ct.c="+ct.v.c);
          }
          }
           
          運行結(jié)果如下:
          v1.c=0 v2.c=0
          v1.c=27 v2.c=27
          v1.c=15 v2.c=15
          ct.c=10
          v1.c=10 v2.c=10
          v1.c=11 v2.c=11
          ct.c=11
           
          這個程序展示了靜態(tài)初始化的各種特性。如果你初次接觸Java,結(jié)果可能令你吃驚。可能會對static后加大括號感到困惑。首先要告訴你的是,static定義的變量會優(yōu)先于任何其它非static變量,不論其出現(xiàn)的順序如何。正如在程序中所表現(xiàn)的,雖然v出現(xiàn)在v1和v2的前面,但是結(jié)果卻是v1和v2的初始化在v的前面。在static{后面跟著一段代碼,這是用來進(jìn)行顯式的靜態(tài)變量初始化,這段代碼只會初始化一次,且在類被第一次裝載時。如果你能讀懂并理解這段代碼,會幫助你對static關(guān)鍵字的認(rèn)識。在涉及到繼承的時候,會先初始化父類的static變量,然后是子類的,依次類推。非靜態(tài)變量不是本文的主題,在此不做詳細(xì)討論,請參考Think in Java中的講解。
          靜態(tài)類
          通常一個普通類不允許聲明為靜態(tài)的,只有一個內(nèi)部類才可以。這時這個聲明為靜態(tài)的內(nèi)部類可以直接作為一個普通類來使用,而不需實例一個外部類。如下代碼所示:
           
          public class StaticCls{
          public static void main(String[] args){
          OuterCls.InnerCls oi=new OuterCls.InnerCls();
          }
          }
          class OuterCls{
          public static class InnerCls{
          InnerCls(){
          System.out.println("InnerCls");
          }
          }
          }
           
          輸出結(jié)果會如你所料。

          posted @ 2012-11-09 16:01 志成中國 閱讀(216) | 評論 (0)編輯 收藏

          java try catch 誰先執(zhí)行問題,你能說明白嗎
          問題1 
           try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執(zhí)行,什么時候被執(zhí)行,在return前還是后? 
          也許你的答案是在return之前,但往更細(xì)地說,我的答案是在return中間執(zhí)行,請看下面程序代碼的運行結(jié)果: 
          public  class Test {
          public static void main(String[] args) {
          System.out.println(new Test().test());;
          }
          static int test()
          {
          int x = 1;
          try
          {
          return x;
          }
          finally
          {
          ++x;
          }
          }
          }
          ---------執(zhí)行結(jié)果是什么  為什么 ---------
          問題2
          下面的程序代碼輸出的結(jié)果是多少?
          public class  smallT
          {
          public static void  main(String args[])
          {
          smallT t  = new  smallT();
          int  b  =  t.get();
          System.out.println(b);
          }
          public int  get()
          {
          try
          {
          return 1 ;
          }
          finally
          {
          return 2 ;
          }
          }
          }
                 2012-6-19 16:23 滿意回答 輸出是1和2,
          20705080 回答的很好了,只有幾點補充下,首先代碼例子用的是基本數(shù)據(jù)類型,他們進(jìn)行傳值就是傳值,其次finally的用途是用來回收系統(tǒng)資源的,沒有catch也是正常的使用(不catch,把異常throw回調(diào)用方法),再有finally和return是有關(guān)系的,而且經(jīng)常有人提,就是finally的代碼在return前運行,這就是我為什么先說你的例子是基本數(shù)據(jù)類型的原因,因為return x(1);被放入stack中,stack是后進(jìn)先出的,等待finally運行完再運行,但他已經(jīng)被賦值了就是1,如果你把代碼改成這樣試試看
          public Something getSome(){
                   Something s = new Something("Dog");
                   try{
                        return s;
                  }finally{
                       s.name ="cat";
                   }}
          加個類
          class Something{
                  public String name ;
                  something(String name){
                         this.name = name;}
          }
          因為相對于基本數(shù)據(jù)類型,引用傳值傳的值是個地址,return s(地址);放入stack中,又被取出時地址不變但地址那邊的數(shù)據(jù)已經(jīng)是cat了贊同0| 評論 
          第1個
          有finally的話
          try 里的return    是先保存x的結(jié)果   等待finally走完   雖然x變2了  但是return的值還是1  
          因為到return的時候已經(jīng)把x的值取出來  等待finally走完  不管x怎么變  之前的1是不會變的
          第2個
          return     等待finally走完   但是finally里return了   所以返回的是2
              贊同0| 評論                2012-6-19 14:54 暢捷通丶稀飯 | 五級 
          第一個是1,因為 x=1 try里面返回的是1 后面又執(zhí)行了finally 后。X 是2 但是沒有返回。所以 還是1
          第二個是2,因為finally最后執(zhí)行,返回的是2. 贊同0| 評論                2012-6-19 14:56 java2000_net | 
          finally中的語句是一定要執(zhí)行的,這點是肯定的。finally中的語句執(zhí)行在try之后。通常try是要和catch(不捕獲異常try就沒意義了)。一般的用法是:
          try{
          1想要執(zhí)行的代碼
          }catch(Exception e){
           2異常處理
          }finally{
          3最終執(zhí)行的代碼
          }
          1中代碼沒錯執(zhí)行的順序就是1->3
          1中代碼有錯執(zhí)行的順序是2->3
          finally中的代碼和return是沒關(guān)系的,你可以把return寫在任何地方。它只和try、catch有關(guān)。假如你把問題一種finally的代碼寫成:
          finally{
          return ++x;
          }那么結(jié)果就是2了。
          finally一定會執(zhí)行,且在try或catch之后執(zhí)行。
          不知道這么說能明白嗎~~~
          不明白可以問,我再回答~~~ 贊同0| 評論                2012-6-19 15:22 黑夜也明亮 | 四級 
          問題1:答案 1。因為return的值在執(zhí)行finally之前已經(jīng)確定下來了。所以即使在finally里怎么該值它始終是1,除非在finally里在return ++x重新修改返回的值。return x它不會直接返回值回去而是等程序執(zhí)行完finaly后才返回。
          你因該有聽過有finaly的程序一定會執(zhí)行finaly代碼吧。
          問題2:答案 2。根據(jù)一的結(jié)論二也是成立的。 贊同0| 評論                2012-6-19 16:41 iedgtg | 五級 
          第一個問題:輸出的是1,因為finally總是在try-catch執(zhí)行之后執(zhí)行,而且,一定是在return之前執(zhí)行。第一個問題里應(yīng)該是在return x;之前執(zhí)行,但是,此時return的值已經(jīng)固定了,就是說finally再執(zhí)行也改變不了return的值,當(dāng)然x的值成了2,但是return的值已經(jīng)固定為1了。
          第二個問題:輸出的是2,因為finally一定是在return之前執(zhí)行,本來程序return的值是1,即將要return了,但是有finally,所以finally先執(zhí)行,所以return的值是2。
          但是第二種情況不建議使用,就是說finally里不建議用return,因為這樣finally就沒有正常的執(zhí)行完畢,這是不推薦的。 贊同0| 評論         

          posted @ 2012-11-09 16:00 志成中國 閱讀(201) | 評論 (0)編輯 收藏

          GET與Post提交問題: ---------------------------------------------- 運行l(wèi)ogin.jsp點登陸時調(diào)用兩次toLoginAction /WEB-INF/jsp/main/main.jsp /WEB-INF/jsp/user/login_form.jsp 所以取得結(jié)果在toLoginAction的execute里運行兩次 String pass = iuserDao.findPassWordByEmail(email); System.out.println(email); System.out.println(pass); 也輸出兩次:條件不同,輸出內(nèi)容不同 當(dāng)login_form.jsp里的表單 使用post方式提交時,控制臺輸出如下: root@root.com root null null 當(dāng)login_form.jsp里的表單 使用get方式提交時,控制臺輸出如下: root@root.com root root@root.com root 解決方案一:加struts的token攔截器,只讓表單提交一次。 解決方案二:轉(zhuǎn)一個action,就是把他自動提交的那個請求通過action的轉(zhuǎn)發(fā)取消掉。 問題: 為什么get和post的默認(rèn)請求后取到的值會不同? 為什么在window的電腦里沒有問題? ---------------------------------------------- 在window下,正常輸出如下: root@root.com root ---------------------------------------------- 緩存問題(服務(wù)器緩存或者瀏覽器緩存或者瀏覽器bug),導(dǎo)致提交兩次,與操作系統(tǒng)、程序、js提交是沒關(guān)系! get:通過URL路傳參,當(dāng)頁面再次提交,還會把URL中的值傳遞給action,所有屬性再次被填充就不出現(xiàn)null值 post:URL路徑?jīng)]有信息,當(dāng)再次提交,就出現(xiàn)屬性就出現(xiàn)null值 你在學(xué)生機器上,把在tomcat中work目錄刪除、在把\webapps 中項目刪除,把web容器緩存清空下! 或者把學(xué)生機器重新啟動下,把服務(wù)器緩存徹底清除下! ---------------------------------------------- ---------------------------------------------- 圖片:struts-user.xml配置如下: ---------------------------------------------- ToLoginAction類如下 : ---------------------------------------------- 進(jìn)入主頁面的URL如: ---------------------------------------------- 登陸的URL如: ---------------------------------------------- 登陸界面: ---------------------------------------------- windwo系統(tǒng)下提交輸出如圖: ---------------------------------------------- Linux系統(tǒng)下,采用get提交時 ---------------------------------------------- Linux系統(tǒng)下,采用post提交時 ---------------------------------------------- 最后在學(xué)生電腦上又試了幾次,get方式提交正常和window系統(tǒng)下一樣了,post方式 提交還是沒改變,不知道為什么。 ---------------------------------------------- 郵件內(nèi)容如下: 發(fā)件人:賈東坡 發(fā)送時間: 2012-11-08 09:37 收件人:zhaozq 主題: dang_get_post 趙老師: 您好。學(xué)生的程序有點問題,想聽一下您的理解。問題描述如下: 進(jìn)入當(dāng)當(dāng)網(wǎng)的main頁面,點登陸輸入用戶名,密碼后,點登陸會請求ToLoginAction, 進(jìn)入main頁面。在ToLoginAction里打印了email和pass,登陸之后輸出結(jié)果在linux 系統(tǒng)下與window下不同。window系統(tǒng)下正常輸出,而在linux系統(tǒng)下有輸出兩次,并且 login_form.jsp時表單提交方法為get時,兩次都能正常輸出;當(dāng)提交方式為post里,第 二次為null。例如: 在window系統(tǒng)下: 我們在輸入框,輸入用戶名:root@qq.com 密碼root,會輸出如下: root@qq.com root 在linux系統(tǒng)下 當(dāng)login_form.jsp的表單提交為get時,輸出root@qq.comroot時, 輸出如下: root@qq.com root root@qq.com root 當(dāng)login_form.jsp的表單提交為post時,輸入root@qq.comroot時, 輸出如下: root@qq.com root null null 原因分析:首先想的是submit按鈕在使用js時,有自動提交功能,可是也沒使用js啊, 還有在linux系統(tǒng)有自己的form機制。還有一個是程序有問題。 解決方案:我給這個action加了個token表單攔截器就可以。說明是表單提交兩次。 問題是:1.為什么表單會提交兩次,而在window下只提交一個。 2.為什么在linux下用get和post提交方式第二次取到的值會不一樣。 3. form提交時在linux系統(tǒng)下與window有什么不一樣。 附件內(nèi)是程序源碼,謝謝您的寶貴時間。 祝: 身體健康,工作順利! 賈東坡北方區(qū) 北方基地項目部 項目經(jīng)理 E-mail: jiadp@tarena.com.cn Address: 北京市昌平區(qū)北七家鎮(zhèn)宏富創(chuàng)業(yè)園科技園綜合樓3層 Mobile: 18301442726 Fax: 86-10-82823773 Website: www.tarena.com.cn ---------------------------------------------- 發(fā)件人:zhaozq 發(fā)送時間: 2012-11-08 11:21 收件人:jiadp 主題: 回復(fù): dang_get_post 賈老師: 您好! 你們班的學(xué)生機器是不是采用的是云服務(wù)器? zhaozq ---------------------------------------------- 趙老師: 您好。我們班的機器都是普通主機,linux系統(tǒng)的,不是用核的,也不是云服務(wù)器。 謝謝您的寶貴時間。 ---------------------------------------------- 賈老師: 您好! 緩存問題(服務(wù)器緩存或者瀏覽器緩存或者瀏覽器bug),導(dǎo)致提交兩次,與操作系統(tǒng)、程序、js提交是沒關(guān)系! get:通過URL路傳參,當(dāng)頁面再次提交,還會把URL中的值傳遞給action,所有屬性再次被填充就不出現(xiàn)null值 post:URL路徑?jīng)]有信息,當(dāng)再次提交,就出現(xiàn)屬性就出現(xiàn)null值 你在學(xué)生機器上,把在tomcat中work目錄刪除、在把\webapps 中項目刪除,把web容器緩存清空下! 或者把學(xué)生機器重新啟動下,把服務(wù)器緩存徹底清除下! zhaozq ---------------------------------------------- 趙老師: 您好。您的分析很有道理,可是我用另外幾臺電腦,試了也不行,所以不該是緩存問題。 瀏覽器bug,這個還沒測試,因為所有學(xué)生的電腦都是同樣的系統(tǒng),同樣的瀏覽器,都是這個 情況。要是緩存問題,怎么可能用token攔截了,攔截下的是緩存的,還是我自己提交的,以及 在哪地方緩存。還有個問題就是,在web學(xué)習(xí)的時候也有表單提交,為什么就沒有這種情況,是 不是和struts有關(guān)。 謝謝,您的寶貴時間。 ---------------------------------------------- 趙老師回復(fù): 您好。您的分析很有道理,可是我用另外幾臺電腦,試了也不行,所以不該是緩存問題。 瀏覽器bug,這個還沒測試,因為所有學(xué)生的電腦都是同樣的系統(tǒng),同樣的瀏覽器,都是這個 情況。要是緩存問題,怎么可能用token攔截了,攔截下的是緩存的,還是我自己提交的,以及 token不是攔截了,而是令牌值相同不在提交,不是在window 系統(tǒng)提交沒問題嗎?那就與程序無關(guān)了,那就是系統(tǒng) 緩存或者瀏覽器緩存中,正常當(dāng)瀏覽器關(guān)閉,緩存中數(shù)據(jù)就清除,但是如果機房比較熱、服務(wù)器處于長期運營等情況都會導(dǎo)致緩存信息無法清空,而影響程序執(zhí)行 在哪地方緩存。還有個問題就是,在web學(xué)習(xí)的時候也有表單提交,為什么就沒有這種情況,是 緩存 不是和struts有關(guān)。 和struts沒有關(guān)系,而是與計算機硬件設(shè)備有關(guān),這個影響具體什么時候會造成,這個都不能預(yù)計,這種情況一般比較少見。 祝: 身體健康,工作順利! ---------------------------------------------- 趙老師: 您好。謝謝您的詳細(xì)解答,真是受益匪淺,這個問題可以劃上句話了。同學(xué)們都很喜歡聽 您講課,風(fēng)趣幽默、也易于接受,期待您更多的講解。 謝謝,您的精神講解。您辛苦了。 祝: 身體健康,工作順利! ---------------------------------------------- ---------------------------------------------- Debug linux系統(tǒng)下截圖如下: ---------------------------------------------- get方式時:正常情況下:輸出和win一樣了。 root@root.com root ---------------------------------------------- post方式時:輸出如下: root@root.com root null null -------------------------------------------------------------------------------------------

          posted @ 2012-11-09 15:49 志成中國 閱讀(1207) | 評論 (0)編輯 收藏


          2012年10月20日

           大多數(shù)程序員都知道Servlet的生命周期,簡單的概括這就分為四步:servlet類加載--->實例化--->服務(wù)--->銷 毀。對這個過程只是膚淺了解下,對于servlet何時被銷毀,還是不太情楚。下面我們描述一下Tomcat與Servlet是如何工作的,首先看下面的 時序圖.

          1、Web Client 向Servlet容器(Tomcat)發(fā)出Http請求

          2、Servlet容器接收Web Client的請求

          3、Servlet容器創(chuàng)建一個HttpRequest對象,將Web Client請求的信息封裝到這個對象中

          4、Servlet容器創(chuàng)建一個HttpResponse對象

          5、Servlet容器調(diào)用HttpServlet對象的service方法,把HttpRequest對象與HttpResponse對象作為參數(shù)

               傳給 HttpServlet對象

          6、HttpServlet調(diào)用HttpRequest對象的有關(guān)方法,獲取Http請求信息

          7、HttpServlet調(diào)用HttpResponse對象的有關(guān)方法,生成響應(yīng)數(shù)據(jù)

          8、Servlet容器把HttpServlet的響應(yīng)結(jié)果傳給Web Client

           

          對于Servlet容器(Tomcat)與HttpServlet是怎樣進(jìn)行交互的呢,看下類圖

          Servlet的框架是由兩個Java包組成的:javax.servlet與javax.servlet.http。在javax.servlet包中 定義了所有的Servlet類都必須實現(xiàn)或者擴(kuò)展的通用接口和類。在javax.servlet.http包中定義了采用Http協(xié)議通信的 HttpServlet類。Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必須實現(xiàn)這個接口。

          在Servlet接口中定義了5個方法,

          其中3個方法代表了Servlet的生命周期:

          1、init方法:負(fù)責(zé)初始化Servlet對象。

          2、service方法:負(fù)責(zé)響應(yīng)客戶的請求。

          3、destroy方法:當(dāng)Servlet對象退出生命周期時,負(fù)責(zé)釋放占用的資源。

           

          一、創(chuàng)建Servlet對象的時機

          1、Servlet容器啟動時:讀取web.xml配置文件中的信息,構(gòu)造指定的Servlet對象,創(chuàng)建ServletConfig對象,同時將ServletConfig對象作為參數(shù)來調(diào)用Servlet對象的init方法。

          2、在Servlet容器啟動后:客戶首次向Servlet發(fā)出請求,Servlet容器會判斷內(nèi)存中是否存在指定的Servlet對象,如果沒有則創(chuàng)建 它,然后根據(jù)客戶的請求創(chuàng)建HttpRequest、       HttpResponse對象,從而調(diào)用Servlet

               對象的service方法。

          3、Servlet的類文件被更新后,重新創(chuàng)建Servlet

                Servlet容器在啟動時自動創(chuàng)建Servlet,這是由在web.xml文件中為Servlet設(shè)置的<load-on-startup>屬性決定

                的。從中我們也能看到同一個類型的Servlet對象在Servlet容器中以單例的形式存在。

          二、銷毀Servlet對象的時機

          1、Servlet容器停止或者重新啟動:Servlet容器調(diào)用Servlet對象的destroy方法來釋放資源。以上所講的就是Servlet對象的生命周期。那么Servlet容器如何知道創(chuàng)建哪一個Servlet對象?

          Servlet對象如何配置?實際上這些信息是通過讀取web.xml配置文件來實現(xiàn)的。

          我們來看一下web.xml文件中的Servlet對象的配置節(jié)信息

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

          <servlet>

              <servlet-name>action<servlet-name>

              <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

              <init-param>

                  <param-name>config</param-name>

                  <param-value>/WEB-INF/struts-config.xml</param-value>

              </init-param>

              <init-param>

                  <param-name>detail</param-name>

                  <param-value>2</param-value>

              </init-param>

              <init-param>

                  <param-name>debug</param-name>

                  <param-value>2</param-value>

              </init-param>

              <load-on-startup>2</load-on-startup>

          </servlet>

          <servlet-mapping>

              <servlet-name>action</servlet-name>

              <url-pattern>*.do</url-pattern>

          </servlet-mapping>

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

          下面對上面的配置節(jié)信息進(jìn)行解析

          servlet-name:Servlet對象的名稱

          servlet-class:創(chuàng)建Servlet對象所要調(diào)用的類

          param-name:參數(shù)名稱

          param-value:參數(shù)值

          load-on-startup:Servlet容器啟動時加載Servlet對象的順序

          servlet-mapping/servlet-name:要與servlet中的servlet-name配置節(jié)內(nèi)容對應(yīng)

          url-pattern:客戶訪問的Servlet的相對URL路徑

           

                 當(dāng)Servlet容器啟動的時候讀取<servlet>配置節(jié)信息,根據(jù)<servlet-class>配置節(jié)信息創(chuàng)建 Servlet對象,同時根據(jù)<init-param>配置節(jié)信息創(chuàng)建HttpServletConfig對象,然后執(zhí)行Servlet對象 的init方法,并且根據(jù)<load-on-startup>配置節(jié)信息來決定創(chuàng)建Servlet對象的順序,如果此配置節(jié)信息為負(fù)數(shù)或者沒 有配置,那么在Servlet容器啟動時,將不加載此Servlet對象。當(dāng)客戶訪問Servlet容器時,Servlet容器根據(jù)客戶訪問的URL地 址,通過<servlet-mapping>配置節(jié)中的<url-pattern>配置節(jié)信息找到指定的Servlet對象,并 調(diào)用此Servlet對象的service方法。

           

          為了驗證下,我新建了一個web app工程,新建一個Servlet,如下:

          Java代碼  收藏代碼
          1. package com.tdt.servlet;  
          2.   
          3. import java.io.IOException;  
          4. import java.io.PrintWriter;  
          5. import javax.servlet.ServletException;  
          6. import javax.servlet.http.HttpServlet;  
          7. import javax.servlet.http.HttpServletRequest;  
          8. import javax.servlet.http.HttpServletResponse;  
          9.   
          10. public class TestServlet extends HttpServlet {  
          11.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
          12.             throws ServletException, IOException {  
          13.         this.doPost(request, response);  
          14.     }  
          15.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
          16.             throws ServletException, IOException {  
          17.   
          18.         response.setContentType("text/html");  
          19.         PrintWriter out = response.getWriter();  
          20.         out.println("Hello,this is a test");  
          21.       
          22.         out.flush();  
          23.         out.close();  
          24.     }  
          25.   
          26.     public void destroy() {  
          27.         System.err.println(getServletName()+"生命周期結(jié)束");;  
          28.     }  
          29.       
          30.     public void init() throws ServletException {  
          31.         System.out.println(getServletName()+"執(zhí)行初始化");  
          32.     }  
          33. }  

           當(dāng)servlet被銷毀時會在控制臺上打印提示語句,不過我發(fā)現(xiàn)在tomcat中,只要不停止web容器,servlet是不會被銷毀的。有沒有什么方 法,當(dāng)service方法執(zhí)行完畢就銷毀這個servlet呢,我問了下老師,他說寫一個監(jiān)聽器,不過我不知道怎么去實現(xiàn)它,如果有朋友知道實現(xiàn)的過程, 還請賜教。

          posted @ 2012-10-20 13:01 志成中國 閱讀(260) | 評論 (0)編輯 收藏

               摘要: Oracle學(xué)習(xí)共享、基礎(chǔ)加強學(xué)習(xí)  閱讀全文

          posted @ 2012-10-20 12:57 志成中國 閱讀(64) | 評論 (0)編輯 收藏


          僅列出標(biāo)題  

          posts - 9, comments - 5, trackbacks - 0, articles - 0

          Copyright © 志成中國

          主站蜘蛛池模板: 庐江县| 太仓市| 孝感市| 南岸区| 卢氏县| 阿拉善右旗| 景宁| 宿州市| 葫芦岛市| 曲麻莱县| 天峨县| 资源县| 天柱县| 新乡县| 通城县| 新丰县| 新干县| 临湘市| 清流县| 怀远县| 大宁县| 舟山市| 石台县| 河津市| 衢州市| 连南| 成武县| 闽侯县| 嵩明县| 德州市| 怀宁县| 台湾省| 喜德县| 岱山县| 金沙县| 江华| 托里县| 获嘉县| 襄城县| 驻马店市| 龙山县|