java之servlet學習基礎(一)

這一陣子在學java三大框架。卻在學習過程當中發現前面的知識已經忘記了。因此決定寫一篇博客來總結回顧以前的學習。html


 

1.Servlet是什麼?java

  servlet是一個運行在服務器端的小應用程序。經過HTTP協議接受和相應來自Web客戶端的請求。web

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

2.HTTP協議設計模式

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

    (1)請求部分緩存

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

      請求消息行:安全

         請求方式  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); 參數表示要跳轉到那裏去。其實質就是請求轉發。注意不是重定向。

相關文章
相關標籤/搜索