1. 程式人生 > >JAVA--Servlet複習

JAVA--Servlet複習

1.Servlet是什麼?

  servlet是一個執行在伺服器端的小應用程式。通過HTTP協議接受和相應來自Web客戶端的請求。

  提到web客戶端的請求和對web客戶端的響應,必須瞭解HTTP協議。

2.HTTP協議

  HTTP協議用於定義web瀏覽器(客戶端)和web伺服器(伺服器端)之間交換資料的過程以及交換的資料的格式。

    (1)請求部分

      請求部分包括請求訊息行、請求訊息頭以及訊息正文。

      請求訊息行:

         請求方式  URI  協議/版本

         [GET|POST]  uri   http/1.1

      請求訊息頭

        Accept-[Charset|Encoding|Language]:告訴伺服器瀏覽器可接受的MIME型別(即客戶端能接受什麼型別的檔案)。

        Accept-Charset:客戶端瀏覽器支援哪種字符集

        Accept-Encoding:客戶端瀏覽器能進進行解碼的資料編碼方式。eg.gzip

        Accept-Language:客戶端瀏覽器希望接受的語言種類。

        Host:初始URL中的主機和埠號

        Referer:包含一個url,使用者從該url代表的頁面出發訪問當前請求的頁面。

        Content-Type:內容型別。告訴伺服器,客戶端瀏覽器傳輸資料的MIME型別(檔案傳輸型別).eg.application/x-www-form-urlencoded;

        User-Agent:瀏覽器型別;IE,Chrome

        Content-Length:請求訊息正文的長度

        Connection:表示是否需要持久連線。預設為Keep-Alive(持久連線)。

        Cookie:設定伺服器使用Set-Cookie傳送的http cookie。

        Date:請求時間

      訊息正文:

        當請求方式是POST時,才能看到訊息正文

    (2)響應部分

      響應部分包括響應訊息行、響應訊息頭和響應正文

        響應訊息行:

         協議/版本  響應狀態碼  對響應狀態碼的描述

         HTTP/1.1  200      OK

         響應狀態碼包括:

           200  正常

           302/307  重定向

           304  未修改(表示當前客戶端快取的版本是最新版) 

           404  伺服器上不存在客戶端請求的資源

           500  伺服器內部錯誤

        響應訊息頭:(常用)

          Location:指示新的資源的位置。通常和302/307一起使用完成請求重定向

          Server:apache tomcat指示伺服器的型別

          Content-Encoding:gzip伺服器傳送的資料採用的編碼型別

          Content-Length:80 告知客戶端瀏覽器響應正文的長度

          Content-Language:zh-cn 伺服器傳送的文字的語言

          Content-Type:text/html;charset=GB2312伺服器傳送的內容的MIME型別(檔案的傳輸型別)

          Refresh:1;url=http://www.xxx.com指示客戶端重新整理的頻率,單位為秒。可用於還剩幾秒跳轉頁面。

          Content-Dispositation:attachment;filename=aaa.zip 告訴客戶端這是要下載的檔案

          Set-Cookie:xx=xx 伺服器端傳送的Cookie

        響應正文:

          在網頁右鍵檢視原始碼即可檢視

3.Servlet生命週期

    例項化-》初始化-》服務-》銷燬

 出生:(例項化new-》初始化init)第一次訪問servlet時出生

 活著:(服務service)應用活著,servlet就活著

 死亡:(銷燬)應用解除安裝了,servlet就銷燬。

注:可通過在註解@WebServlet中配置load-on-startup,使servlet在伺服器啟動時就建立

 

4.Servlet的三種建立方式

  (1)實現javax.servlet.Servlet介面

  (2)繼承javax.servlet.GenericServlet類(介面卡模式)重寫service方法

      介面卡模式,GenericSelvlet是個抽象類,只有service方法是抽象方法,其餘的都已經實現了servlet的方法

  (3)繼承javax.servlet.http.HttpServlet類(模板方法設計模式) 常用。但注意不要重寫servic()方法。只重寫doGet()和doPost()即可。因為HttpServlet的service方法中使用的是doget和dopost方法

 

5.Serlvet配置url-pattern

    匹配規則:

      優先順序:絕對匹配 > /開頭匹配 > 副檔名方式匹配

      絕對匹配是指沒有使用萬用字元*,*代表任意字串。

      /* 任意字元都能識別

      *.字串  以*.字串結尾的請求都可以訪問。

      /action/*   以/action開頭的請求都可以訪問

      如果url-pattern的值是/,表示執行預設對映。所有的資源都可以訪問。

 

6.Servlet的執行緒安全

    Servlet只建立一次,銷燬一次。每次訪問都是多執行緒。所以有執行緒安全問題。所以不要寫全域性變數,只寫區域性變數,使用者不共用變數。

 

7.ServletConfig的使用

作用1:獲取Servlet的配置資訊。

作用2:獲得ServletContext物件

 

 

 1 第一種方式獲得配置資訊,其實就是獲得web.xml裡面servlet標籤下的init-param標籤內的param-value
 2     private ServletConfig config;
 3     @Override
 4     public void init(ServletConfig config) throws ServletException {
 5         this.config = config;
 6     }
 7 第二種方式獲得config配置資訊*/
 8       String encoding = this.getServletConfig().getInitParameter("encoding");
 9  
10 第三種方式獲得配置資訊
11     String encoding = this.getInitParameter("encoding");//為什麼能使用this.get...是因為該類是繼承了httpservlet,httpservlet繼承了GenericServlet
12                                                          //然後GenericServlet的getIniParameter()返回servletconfig內的getinitParameter方法,所以
13                                                          //就可以直接呼叫。
  

 

 

 

 1 獲取ServletContext物件 2 String name = (String) this.getServletContext().getAttribute("name"); 

 

8.ServletContext

    ServletContext代表的是整個應用。一個應用只有一個ServletContext物件。單例項。ServletContext物件實際上就是一個Map(setAttribute和getAttribute)。

常用方法:

  域物件:setAttribute(sString , Object ) ,getAttribute(String ) ,rmoveAttribute(String)

  獲取全域性配置資訊:getInitParameter(String )  根據配置檔案中<context-param>標籤下的name得到value

  獲取資源路徑:getRealPath(String path)  根據資源名稱得到資源的絕對路徑。可以得到當前應用任何位置的任何資源。

  實現servlet的轉發:getRequestDispatcher(String path); 引數表示要跳轉到那裡去。其實質就是請求轉發。注意不是重定向。