Servlet

快速入門

  • 編寫一個類,實現Servlet接口,重寫5個方法。
    • 編寫一個類,繼承GenericServlet類,重寫一個方法。
  • 配置文件,配置Servlet信息。
    <!-- 先配置Servlet信息 -->
    <servlet>
        <!-- 配置Servlet名稱,名稱必須唯一 -->
        <servlet-name>ServletDemo1</servlet-name>
        <!-- 配置Servlet的完全路徑(包名+類名) -->
        <servlet-class>cn.itcast.servlet.ServletDemo1</servlet-class>
    </servlet>

    <!-- 配置Servlet映射(訪問路徑) -->
    <servlet-mapping>
        <!-- 配置Servlet名稱,和上面的名稱必須相同 -->
        <servlet-name>ServletDemo1</servlet-name>
        <!-- 配置虛擬路徑(訪問路徑) -->
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>

Servlet的生命周期

生命周期:實例被創建,對外提供服務,銷毀。

  • Servlet被創建后,調用init方法進行初始化(不是服務器一啟動實例就被創建,第一次請求訪問時servlet實例才被創建)
    void init(ServletConfig config)
  • 從客戶端發送所有的請求是service方法進行處理的。(有一次請求就調用一次service方法)
    void service(ServletRequest req, ServletResponse res)
  • 從服務器中移除服務,調用destroy方法。(服務器關閉,手動移除時調用,所以只調用一次)
    void destroy()

Servlet的生命周期:第一次請求的時候,Servlet實例被創建,立即調用init方法進行初始化。實例通過service方法提供服務。服務器關閉或者移除服務時,調用destroy方法進行銷毀。

Servlet自動加載

  • Servlet默認是第一次訪問時候創建實例。通過配置,服務器啟動,創建實例。

  • init做初始化的操作,非常消耗時間的。

  • 在<servlet>標簽下
    <load-on-startup>3</load-on-startup>

  • 值是正整數

    • 如果值越小,優先級越高。

配置虛擬路徑(訪問路徑)

<servlet-mapping>
    <url-pattern>/demo5</url-pattern>
</servlet-mapping>
* 完全路徑匹配
    * 以/開頭的         /demo5      /servlet/demo5
    * 訪問:http://localhost/day09/demo5
* 目錄匹配
    * 以/開頭的         /*
    * 訪問:http://localhost/day09/demo5可以訪問
* 擴展名匹配
    * 不能以/開頭的       *.do    *.action
    * 訪問:http://localhost/day09/demo5.do

* 優先級:完全路徑匹配    > 目錄匹配 > 擴展名匹配(*****)

WEB開發中路徑的問題

* 相對路徑
    * 一個文件相對于另一個文件的位置的關系。
    * 不能以/開頭    寫法: ./demo等價于demo(當前目錄)   ../demo(上一級目錄)

    * 訪問1.html: http://localhost/day09/1.html
    * 訪問demo5:  http://localhost/day09/demo5
    * 從1.html中去訪問demo5:./demo5  demo5

    * 訪問2.html: http://localhost/day09/html/2.html
    * 訪問demo5:  http://localhost/day09/demo5
    * 從2.html訪問demo5:../demo5

* 絕對路徑(推薦使用)
    * 以/開頭的
    * 訪問demo5:  http://localhost/day09/demo5
    * 從1.html使用絕對路徑訪問demo5:http://localhost/day09/demo5
    * 簡寫方式:/day09/demo5

    * 客戶端絕對路徑
        * /day09/demo5  需要寫項目名

    * 服務器絕對路徑
        * /demo5    不能寫項目名

ServletConfig對象和配置文件相關

  • 配置初始化參數

    • 需要在<servlet></servlet>標簽下配置。
    • 如果要是配置在某個servlet的標簽下,那么只能在該servlet中獲取初始化參數。
      <init-param>
      <param-name>username</param-name>
      <param-value>root</param-value>
      </init-param>
  • String getServletName() 獲取配置文件中servlet的名稱

  • String getInitParameter(String name) 獲取初始化參數

  • Enumeration getInitParameterNames() 獲取初始化參數的名稱們

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 測試ServletConfig對象的ApplicationContext
    // 先獲取ServletConfig對象
    ServletConfig config = getServletConfig();
    // 獲取配置文件中Servlet的名稱
    System.out.println("Servlet的名稱"+config.getServletName());
    // 獲取初始化的參數
    String username = config.getInitParameter("username");

    Enumeration<String> e = config,getInitParameterNames();
    while(e.hasMoreElements()){
        String name = e.nextElement();
        String value = config.getInitParameter(name);
        System.out.println(name+" : "+value);
    }
}

ServletContext對象(域對象)

* 定義:WEB容器在啟動時,它會為每個WEB應用程序都創建一個對應的ServletContext對象,它代表當前web應用。
一個WEB應用對應一個ServletContext對象
一個WEB應用下有多個Servlet程序
所有的servlet程序都共享同一個ServletContext對象

demo1存入內容   ServletContext  demo2中取出來  實現數據共享

* 作用:
    * 獲取WEB應用全局初始化參數
        * 在web.xml中配置
            <context-param>
                <param-name>encoding</param-name>
                <param-value>GBK</param-value>
            </context-param>

        String getInitParameter(String name)      
        getInitParameterNames()                     

    * 實現數據的共享(*****)
        void setAttribute(String name, Object object)   存入數據
        void removeAttribute(String name)               刪除數據
        Object getAttribute(String name)                獲取數據

    * 讀取資源文件(*****)
        InputStream getResourceAsStream(String path)    通過文件的地址獲取輸入流
        String getRealPath(String path)         通過文件的地址獲取文件的絕對磁盤路徑

HTTP的協議

  • 請求

    • referer 記住當前網頁的來源
    • user-agent 瀏覽器版本信息
    • if-modefied-since
  • 響應

    • 響應頭
    • location 和302一起來完成重定向的操作
    • refresh 頁面的定時刷新
    • last-modefied 和 if-modefied-since和304狀態碼一起來控制緩存。

web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>OneServlet</servlet-name>
        <servlet-class>PackageName.ServletName</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>OneServlet</servlet-name>
        <url-pattern>/foo</url-pattern>
    </servlet-mapping>
</web-app>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,106評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,441評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,211評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,736評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,475評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,834評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,009評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,559評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,306評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,516評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,728評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,132評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,443評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,249評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,484評論 2 379

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,826評論 18 139
  • 0 系列目錄# WEB請求處理 WEB請求處理一:瀏覽器請求發起處理 WEB請求處理二:Nginx請求反向代理 本...
    七寸知架構閱讀 14,019評論 22 190
  • Servlet Interface 是Java Servlet API的核心抽象。所有的servlets都直接或者...
    Lucky_Micky閱讀 1,719評論 2 2
  • 簡介 Servlet(Server Applet)是Java Servlet的簡稱,稱為小服務程序或服務連接器,用...
    寒橋閱讀 2,277評論 0 10
  • 本文包括: Servlet簡介關于Servlet的一些類 Servlet生命周期 ServletConfig獲得初...
    廖少少閱讀 3,891評論 1 67