第五天:JavaWeb核心之Servlet

一、Servlet簡介

1、什麼是Servlet

servlet是運行在服務端的Java小程序,是sun公司提供的一套規範,用來處理客戶端請求、響應給瀏覽器的動態資源

Servlet是Javaweb三大組件之一(Servlet、Filter、Listener),且最重要

2、Servlet的作用

用來處理從客戶端發送過來的請求,並對該請求作出響應

Servlet的任務有:

<1>獲取請求數據

<2>處理請求

<3>完成響應

3、Servlet的入門

<1>準備工作

    Servlet規範要求:Servlet程序需要編寫實現類,並在web.xml進行配置

    實現類:通常繼承javax.servlet.http.HttpServlet類,並複寫doGet和doPost方法

        doGet()方法用於處理get請求

        doPost()方法用於處理post請求

        配置信息:在web.xml進行配置

<2>編寫步驟

①創建類,繼承HttpServlet,複寫doGet()和doPost()方法

a0cc61be125285ef3555b209ebb45dd1.jpg                32f810b5bca3c9b0f4db166a6a7881c1.jpg

②在web.xml中編寫配置文件

d4256d1b1fd7b226d3ce6341bdd2489a.jpg        bae661f857c05de91e19fd5585664908.jpg

③瀏覽器訪問

    在瀏覽器中地址欄輸入:http://localhost:8080/day13/hello

    瀏覽器顯示空白頁

    f5ee8e6558246e465ef76013b52dc394.jpg

    控制打印信息

    b2d1b67434a14e7e10f4842c1706fefe.jpg

<3>Servlet執行的流程

bef0b05ccc9d8cbc0a62ed3f138143b9.png

4、Request接受請求參數

<1>Request接收請求參數的概述

971b6ce8798b0b1a434db50cf516030a.jpg 

5fd9b2959cc766a6dade77076e1c64c4.jpg

<2>Request接收請求參數入門

編寫步驟

①編寫表單,提供表單字段:username、password、hobby。以post方式提交

abf0a1bb22c4e80552aa1ecaba7fde4c.jpg

9b102fa4a7e59d6a0c8be3c4956af728.jpg

②編寫Servlet實現類,使用對應方法獲得請求參數,並處理POST中文亂碼

9f9bb7d4a0ed21d3b7795d198498119e.jpg

893c3f82a2e06b0752497ad0028a7123.jpg

b496ac10b06d5bc2d0e6773e42c5b0a0.jpg

③編寫Servlet,配置文件

07cc97e02372065b3068c493c9cb03d6.jpg

④測試,訪問“http://localhost:8080/day13/02.request.html”,並提交表單,控制檯顯示

c37844eda8bc68ef14a851f2da49640d.jpg

⑤servlet訪問過程

37343188f04e0d595570e3f70a6bc682.png

5、案例:登錄功能的實現

<1>案例分析

af5b9a95862780d3c5112b7dc7b098b7.jpg<2>代碼實現

82cd373445a5fd39427c71dffebb8d69.jpg

f0348c6d9e6365080112c107da56b5cf.jpg

4e373bc2700e59e78746461da21cab54.jpg

cf306c1be707334017cef3aff15515fa.jpg

018fedd0012d04f07f26a8ec47d5cae1.jpg

二、Servlet的生命週期

<1>Servlet規範規定,所有的servlet必須實現javax.servlet.Servlet接口

690c45c5d92a2beae907f7c8c3594d29.jpg

①第一次調用時,將執行初始化方法:init(ServletConfig)

②每一次調用,都將執行service(ServletRequest,ServletResponse)方法

③服務器關閉,或項目移除:destroy()方法

<2>JavaEE規範中提供Servlet接口實現類

①GenericServlet:通用servlet實現,沒有實現service

②HttpServlet:與Http協議有關的實現,實現service方法,完成與http協議有關的操作

      request.getMethod()    獲得請求方式(get、post)

          如果是get,將調用doGet()

          如果是post,將調用doPost()

<3>生命週期就是一個對象從創建到銷燬的過程

Servlet生命週期:servlet從創建到銷燬的過程

①何時創建:用戶第一次訪問Servlet創建Servlet的實例(單實例)

②何時銷燬:當項目從服務器中移除的時候,或者關閉服務器的時候

用戶第一次訪問Servlet的時候,服務器會創建一個Servlet的實例,那麼Servlet中init方法就會執行。

任何一次請求服務器都會創建一個新的線程訪問Servlet中的service的方法,在service方法內部根據請求方式的不同調用doXXX的方法。(get請求調用doGet,post請求調用doPost())當Servlet中服務器移除掉,或者關閉服務器,Servlet的實例就會被銷燬,那麼destroy方法就會執行

三、Servlet的相關配置

1、基本配置

16b5770391ab66a86d2de5870562cd21.png

    其中url-pattern的配置方式:

    1)完全匹配:訪問的資源與配置的資源完全相同時才能訪問到

    21e2465ac5f9d45d9a714b871d855aec.png

    2)目錄匹配:格式:/虛擬的目錄../*   *代表任意

    9b357cd764b59f2c101a4588a60c2ce6.png

    3)擴展名匹配:格式:*.擴展名

    d0471ec49cfd87679a69b58fac3fab00.png

    注意:第二種與第三種不要混用 /aaa/bbb/*.abcd(錯誤的)

2、服務器啓動時實例化Servlet配置

    servlet何時創建:默認第一次訪問時創建

    爲什麼是默認?

    當在servlet的配置時,加上一個<load-on-startup>配置,servlet對象在服務器啓動時就創建

3、缺省Servlet

    可以將url-pattern配置一個/,代表該servlet是缺省的servlet

    什麼是缺省的servlet?

    當你訪問資源地址所有的servlet都不匹配時,缺省的servlet負責處理

    其實,web應用中所有的資源的響應都是servlet負責,包括靜態資源

4、歡迎頁面

6ee78702df08095dc688a7d75a28b098.png

四、ServletContext對象

1、什麼是ServletContext對象

    ServletContext代表一個web應用的環境(上下文)對象,ServletContext對象內部封裝的是該web     應用的信息,ServletContext對象一個web應用只有一個

2、ServletContext對象的生命週期

    創建:該web應用被加載(服務器啓動或發佈web應用(前提,服務器啓動狀態))

    銷燬:web應用被加載(服務器關閉,移除該web應用)

3、怎樣獲得ServletContext對象

    <1>ServletContext servletContext=config.getServletContext();

    <2>ServletContext servletContext=this.getServletContext();

4、ServletContext的作用

<1>獲得web應用全局的初始化參數

   web.xml中配置初始化參數

   2199f67ca841792db71ff4246690f37f.png

   通過context對象獲得參數

   16c37811d5b20519bc46f74adf8ca1fd.png 

<2>獲得web應用中任何資源的絕對路徑

   方法:String path=context.getRealPath(相當於該web應用的相對地址)

<3>Servletontext是一個域對象

   Servlet域對象的作用範圍:整個web應用(所有的web應用資源都可以隨意向servletcontext域中存                             取數據,數據可以共享)

   域對象通用的方法:

   setAttribute(String name,Object obj);    存放數據

   getAttribute(String name);    獲得數據

   removeAttribute(String name);    刪除數據

<4>案例:記錄網站的登錄成功的人數

①分析:

5d9049e2eb907f1877d5f3471364c11b.jpg

②代碼實現

2229a9076099c84df470b3b3f82edc64.jpg

24cc708895956e4f13fb316a7919f3d6.jpg

c61dc4de6db9f9f894665ec3386400ba.jpg

be04eb92420a5327f247e7a3afc991f6.jpg

<5>ServletContext讀取Web資源

   在實際開發中,有時候可能會需要讀取Web應用中的一些資源文件,比如配置文件,圖片等。爲此,在ServletContext接口中定義了一些讀取Web資源的方法,這些方法是依靠Servlet容器來實現的。Servlet容器根據資源文件名相對於Web應用的路徑,返回關聯資源文件的IO流,資源文件在文件系統的絕對路徑等。

a199b3fe7fd3645e06cda593039bea1c.jpg   

   代碼實現

   ①加載配置文件  

f5254fdffef55251660f77bf28e47285.jpg

3e90b865bdf530f76b4ad76cc947ae20.jpg

   ②開發者需要獲取的是資源的絕對路徑。接下來,通過使用getRealPath(String path)方法獲取資源      文件的絕對路徑

e82c1bf589192a2f3ea23f8604100cec.jpg

<6>類加載器讀取文件

0fff15461f1af264e52217d4ad7f7890.jpg  

<7>Servlet模板

package ${enclosing_package};
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ${primary_type_name} extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.getWriter().write("hello haohao...");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章