1. 程式人生 > >jetty處理請求路徑與tomcat的不同,圖片出不來

jetty處理請求路徑與tomcat的不同,圖片出不來

資料庫中存的路徑是/upload/2014/07/10/1404956103602.jpg

訪問時根據專案路徑拼出來的絕對路徑是http://localhost:8080/cms-0.0.1//upload/2014/07/10/1404956103602.jpg

此路徑在tomcat伺服器中訪問毫無問題,但是在jetty伺服器中此路徑無法正常訪問,將upload前的雙斜槓去掉一個後可正常訪問

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

jetty與tomcat的比較:

  1. 在web容器上,我們要與時俱進,不能只追求現在,在高併發下,我們要有相關的經驗及應對措施。
  2. NIO要優於BIO,而jetty同時也是推薦用NIO
  3. jetty的靈活小巧,載入速度快,方便除錯等都是促使我們去選擇
    tomcat公司很多不屑於用一樣,其實tomcat還是很不錯的。用tomcat支援併發2000的,也是經常乾的事。之所以選擇jetty,那原因就不多說了,jboss不給力而且又大,tomcat公司不支援,所以jetty就這樣成為專案中的不二選擇,當然他也是非常優秀的產品。
    綜上所述,在效能上tomcat與jetty差距並不大,可以說沒有。只是jetty相對來說由於其靈活性,外掛化,導致jetty某些場合(如虛擬機器、嵌入式)更節約資源,當然對於我們現在的應用可以忽略這個因素。還是多關注一下我們的SQL語句和業務邏輯程式碼吧!
附:

     IO的方式通常分為幾種,同步阻塞的BIO、同步非阻塞的NIO、非同步非阻塞的AIO

     在JDK1.4出來之前,我們建立網路連線的時候採用BIO模式,需要先在服務端啟動一個ServerSocket,然後在客戶端啟動Socket來對服務端進行通訊,預設情況下服務端需要對每個請求建立一堆執行緒等待請求,而客戶端傳送請求後,先諮詢服務端是否有執行緒相應,如果沒有則會一直等待或者遭到拒絕請求,如果有的話,客戶端會執行緒會等待請求結束後才繼續執行。

     BIO與NIO一個比較重要的不同,是我們使用BIO的時候往往會引入多執行緒,每個連線一個單獨的執行緒;而NIO則是使用單執行緒或者只使用少量的多執行緒,每個連線共用一個執行緒。

     IO的方式通常分為幾種,同步阻塞的BIO、同步非阻塞的NIO、非同步非阻塞的AIO

     在JDK1.4出來之前,我們建立網路連線的時候採用BIO模式,需要先在服務端啟動一個ServerSocket,然後在客戶端啟動Socket來對服務端進行通訊,預設情況下服務端需要對每個請求建立一堆執行緒等待請求,而客戶端傳送請求後,先諮詢服務端是否有執行緒相應,如果沒有則會一直等待或者遭到拒絕請求,如果有的話,客戶端會執行緒會等待請求結束後才繼續執行。

     BIO與NIO一個比較重要的不同,是我們使用BIO的時候往往會引入多執行緒,每個連線一個單獨的執行緒;而NIO則是使用單執行緒或者只使用少量的多執行緒,每個連線共用一個執行緒。


IO的最重要的地方是當一個連線建立後,不需要對應一個執行緒,這個連線會被註冊到多路複用器上面,所以所有的連線只需要一個執行緒就可以搞定,當這個執行緒中的多路複用器進行輪詢的時候,發現連線上有請求的話,才開啟一個執行緒進行處理,也就是一個請求一個執行緒模式。

      在NIO的處理方式中,當一個請求來的話,開啟執行緒進行處理,可能會等待後端應用的資源(JDBC連線等),其實這個執行緒就被阻塞了,當併發上來的話,還是會有BIO一樣的問題。

  HTTP/1.1出現後,有了Http長連線,這樣除了超時和指明特定關閉的http header外,這個連結是一直開啟的狀態的,這樣在NIO處理中可以進一步的進化,在後端資源中可以實現資源池或者佇列,當請求來的話,開啟的執行緒把請求和請求資料傳送給後端資源池或者佇列裡面就返回,並且在全域性的地方保持住這個現場(哪個連線的哪個請求等),這樣前面的執行緒還是可以去接受其他的請求,而後端的應用的處理只需要執行佇列裡面的就可以了,這樣請求處理和後端應用是非同步的.當後端處理完,到全域性地方得到現場,產生響應,這個就實現了非同步處理。

     BIO是一個連線一個執行緒。

   NIO是一個請求一個執行緒。

   AIO是一個有效請求一個執行緒。


     IO的方式通常分為幾種,同步阻塞的BIO、同步非阻塞的NIO、非同步非阻塞的AIO

     在JDK1.4出來之前,我們建立網路連線的時候採用BIO模式,需要先在服務端啟動一個ServerSocket,然後在客戶端啟動Socket來對服務端進行通訊,預設情況下服務端需要對每個請求建立一堆執行緒等待請求,而客戶端傳送請求後,先諮詢服務端是否有執行緒相應,如果沒有則會一直等待或者遭到拒絕請求,如果有的話,客戶端會執行緒會等待請求結束後才繼續執行。

     BIO與NIO一個比較重要的不同,是我們使用BIO的時候往往會引入多執行緒,每個連線一個單獨的執行緒;而NIO則是使用單執行緒或者只使用少量的多執行緒,每個連線共用一個執行緒。