JavaWeb編程基礎組件,Servlet核心用法總結

2020-12-14 知了V笑

一、Servlet簡介

Java編寫的伺服器端程序,具有獨立於平臺和協議的特性,主要功能在於交互式地瀏覽和生成數據,生成動態Web內容。使用Servlet,可以收集來自網頁表單的用戶輸入,呈現來自資料庫或者其他源的記錄,還可以動態創建網頁。

二、實現方式

1、繼承HttpServlet

繼承自 GenericServlet. 遵守 HTTP協議實現,以設計模式的角度看,HttpServlet擔任抽象模板角色,模板方法:由service()方法擔任。基本方法:由doPost()、doGet()等方法擔任。service()方法流程,省略了部分判斷邏輯。該方法調用七個do方法中的一個或幾個,完成對客戶端請求的響應。這些do方法需要由HttpServlet的具體子類提供,這種API封裝是典型的模板方法模式。

2、繼承GenericServlet

Servlet 接口和 ServletConfig 接口的實現類. 一個抽象類. 其中的 service 方法為抽象方法。

3、實現Servlet接口

Servlet是一個接口,其中包含init、getServletConfig、service、getServletInfo、destroy幾個核心方法。

三、生命周期

1、加載和實例化

當Servlet容器啟動或客戶端發送請求時,Servlet容器會查找是否存在該Servlet實例,若存在,則直接讀取該實例響應請求;如果不存在,就創建一個Servlet實例(屬於單例設計模式)。load-on-startup 可以配置創建時序。

2、初始化:init()

實例化後,Servlet容器將調用init方法一次,初始化當前 Servlet。

3、服務:service()

初始化後,Servlet處於響應請求的就緒狀態。當接收到客戶端請求時,調用service()的方法處理客戶端請求,HttpServlet的service()方法會根據不同的請求 調用不同的模板方法。

4、銷毀:destroy()

當Servlet容器關閉時,Servlet實例也隨時銷毀。關閉 Tomcat 服務時可以通過日誌列印看到該方法的執行。

四、Servlet核心API

1、Servlet執行流程

Servlet是JavaWeb的三大組件之一(Servlet、Filter、Listener),它屬於動態資源。Servlet的作用是處理請求,伺服器會把接收到的請求交給Servlet來處理,在Servlet中通常需要:接收請求數據;處理請求;完成響應。

2、ServletConfig接口

容器在初始化servlet時,為該servlet創建一個servletConfig對象,並將這個對象通過init()方法來傳遞並保存在此Servlet對象中。核心作用:1.獲取初始化信息;2.獲取ServletContext對象。

3、ServletContext接口

一個項目只有一個ServletContext對象,可以在多個Servlet中來獲取這個對象,使用它可以給多個Servlet傳遞數據,該對象在Tomcat啟動時就創建,在Tomcat關閉時才會銷毀!作用是在整個Web應用的動態資源之間共享數據。

4、ServletRequest接口

HttpServletRequest接口繼承ServletRequest接口,用於封裝請求信息,該對象在用戶每次請求servlet時創建並傳入servlet的service()方法,在該方法中,傳入的servletRequest將會被強制轉化為HttpservletRequest對象來進行HTTP請求信息的處理。核心作用:1.獲取請求報文信息;2.獲取網絡連接信息;3.獲取請求域屬性信息。

5、ServletResponse接口

HttpServletResponse繼承自ServletResponse,封裝了Http響應信息。客戶端每個請求,伺服器都會創建一個response對象,並傳入給Servlet.service()方法。核心作用:1.設置響應頭信息;2.發送狀態碼;3.設置響應正文;4.重定向;

五、會話跟蹤

1、場景描述

比如登錄某個購物網站,身份識別成功後,在網站下單,支付 等操作,這些操作中當前登錄用戶信息必須是共享的,這樣這些操作結果才能和登錄用戶做關聯。

2、概念簡介

可以把會話理解為客戶端與伺服器之間的一次交互,在一次交互中可能會包含多次請求和響應。在JavaWeb中,從客戶端向伺服器發出第一個請求開始,會話就開始了,直到客戶端關閉瀏覽器會話結束。在一個會話的多個請求中共享數據,這就是會話跟蹤技術。

六、Cookie用法詳解

1、核心流程

Cookie在HTTP中通常是用來辨別用戶身份,進行會話跟蹤而儲存在用戶本地終端上的數據,一般會加密處理,由用戶客戶端計算機暫時或永久保存的信息。其結構就是一個鍵和一個值構成的。隨著伺服器端的響應發送給客戶端瀏覽器。然後客戶端瀏覽器會把Cookie保存起來,當下一次再訪問伺服器時把Cookie再發送給伺服器。

Cookie是由伺服器創建,然後通過響應發送給客戶端的鍵值對。客戶端會保存Cookie,並會標註出Cookie的來源。當客戶端向伺服器發出請求時會把Cookie包含在請求中發送給伺服器,這樣伺服器就可以識別客戶端。

2、Cookie相關API

setMaxAge():設置 cookie 過期的時間,秒為單位。默認情況cookie 只會在當前 session 會話中有效。

getMaxAge():獲取 cookie 的最大生存周期。

getName():獲取 cookie 的名稱。名稱在創建後不能改變。

getValue():獲取與 cookie 關聯的值。

setValue(String value):設置與cookie關聯的value值。相同的name多次設置會覆蓋。

七、Session 跟蹤

1、Session簡介

會話管理,當用戶在應用程式的Web頁之間跳轉時,存儲在Session對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。Servlet中可以把一個會話內需要共享的數據保存到HttSession對象中。四大域對象:PageContext、ServletRequest、HttpSession、ServletContext。

2、Session運行原理

首次使用首次使用session時,伺服器端要創建session,session是保存在伺服器端,數據是保存在session中,sessionId通過Cookie發送給客戶端,且只在瀏覽器本次會話中存在,也就是說如果用戶關閉了瀏覽器,那麼這個Cookie就丟失。

客戶端訪問客戶端再次訪問伺服器時,在請求中會帶上sessionId,伺服器會通過sessionId找到對應的session,而無需再創建新的session。

時效性當一個session長時間沒人使用的話,伺服器會把session刪除了,這個時長在Tomcat中配置是30分鐘,可以在${CATALANA}/conf/web.xml找到這個配置,也可以在的web.xml中覆蓋這個配置!

3、相關API用法

getSesssion():當前會話已經存在session對象那麼直接返回,如果當前會話還不存在,創建session對象並返回 。

getAttribute(String name):返回該 session 會話中具有指定名稱的對象 。

getId():分配給該 session 會話的唯一標識符的字符串。

setAttribute(String name,Object value):使用指定的名稱綁定一個對象到該 session 會話。

removeAttribute(String name):從該 session 會話移除指定名稱的對象。

八、Listener監聽器

1、概念簡介

JavaWeb三大組件:Servlet,Listener,Filter。監聽器就是指在應用程式中監聽相關對象狀態變化的組件。

2、事件源對象

指被監聽對象。

ServletContextServletContextListener生命周期監聽,它有兩個方法,出生時調用contextInitialized(),銷毀時調用contextDestroyed();

ServletContextAttributeListener屬性監聽,它有三個方法,添加屬性attributeAdded(),替換屬性attributeReplaced(),移除屬性時attributeRemoved()。

HttpSessionHttpSessionListener生命周期監聽:它有兩個方法,出生時調用sessionCreated(),銷毀時調用sessionDestroyed();

HttpSessioniAttributeListener屬性監聽:它有三個方法,添加屬性attributeAdded(),替換屬性attributeReplaced(),移除屬性attributeRemoved()。

ServletRequestServletRequestListener生命周期監聽:它有兩個方法,出生時調用requestInitialized(),銷毀時調用requestDestroyed();

ServletRequestAttributeListener屬性監聽:它有三個方法,添加屬性attributeAdded(),替換屬性attributeReplaced(),移除屬性attributeRemoved()。

九、Filter過濾器

1、過濾器簡介

客戶端請求Servlet時,先執行相關Filter,如果Filter通過,則繼承執行請求的Servlet;如果Filter不通過,則不會執行用戶請求的Servlet。過濾器可以動態地攔截請求和響應。

2、Filter接口

Filter接口定義了三個核心方法。

init():應用程式啟動時,伺服器實例化Filter對象,並調用其init方法,讀取web.xml配置,完成對象的初始化加載。

doFilter():實際的過濾操作,請求達到伺服器時,Servlet容器將先調用過濾器的doFilter方法。

destroy():容器在銷毀過濾器前調用該方法,釋放過濾器佔用的資源。

十、Interceptor攔截器

Spring框架中的攔截器Interceptor類似於Servlet中的過濾器Filter,主要用於攔截用戶請求並作相應的處理。例如通過攔截器可以進行權限驗證、記錄請求信息的日誌、判斷用戶是否登錄等。請求轉發不執行攔截、過濾;重定向執行攔截和過濾。

相關焦點

  • Servlet知識點總結
    第一、Servlet中的核心API?1.API1:javax.servlet.Servlet【接口】(1)該接口中定義了所有servlet都必須實現的方法。(4)為了實現該接口,可以繼承javax.servlet.GenericServlet也可以繼承javax.servlet.http.HttpServlet.
  • Servlet3 異步原理與實踐
    」對了,如果大家假期沒有出行計劃,也不妨看看這個:SpringBoot+SpringSecurity+Vue+微人事視頻教程一、什麼是 Servletservlet 是基於 Java 的 Web 組件,由容器進行管理,來生成動態內容。
  • Javaweb開發學習路線及Java三大框架分享
    ,類,抽象類,接口,內部類等概念3: java核心編程,如輸入輸出流,多線程,集合,XML,正則表達式等4:java圖形化編程,如awt,swing5:java網絡編程,Applet,Socket,TCP/IP,NIO等6:java高級特性,
  • smart-servlet v0.1.0 首發,籌備了 3 年的開源 Servlet 伺服器
    1個月前,開源 smart-servlet。在 smart-http 的基礎上實現 servlet 3.1 規範。項目特色 零學習成本,素未謀面,卻已相知。保留用戶原有的 Tomcat、Undertow 使用習慣。
  • 黑馬程式設計師:Javaweb應用中filter的執行順序解密
    1.引言我們在編寫javaweb程序的時候,時常會用filter這個組件,它能將我們一些通用邏輯抽取出來,在servlet執行業務邏輯之前運行,達到簡化代碼和復用的目的.比如最常用的場景全站編碼和登錄驗證功能.
  • 解析Flex組件中Label組件的用法
    解析Flex組件中Label組件的用法 本文向大家介紹一下Flex組件中Label組件的用法,Label組件是一個單行和不可編輯文本標籤,支持HTML標記,歡迎大家一起來學習Flex組件。
  • JavaEE基礎必會關於Tomcat和Servlet的面試題
    簡單總結:只要訪問Servlet,service()就會被調用。init()只有第一次訪問Servlet的時候才會被調用。destroy()只有在Tomcat關閉的時候才會被調用。Servlet是單例的嗎?
  • 南京課工場:自學Java編程如何進大廠?
    入門要學好一開始肯定要了解一波Java語言的特性,很多人都關注一開始看什麼資料,對於初學者尤其是沒有一點編程基礎的人來說,要渡過這個從零到一的過程,往其實是非常艱難的,挫敗感會非常強。如果有人領路,或者選擇一門優質的課程,效果會好的很多。
  • Python核心技術系列 43 篇總結
    》專欄,一共43篇,我看後覺得不錯,從技術到實踐,目前已有2萬1千多人購買,下面是專欄詳情:這幾年,程式語言多了,很多人都說「學不動」了。包括自稱 Python 「老鳥」的我,也有分不清「列表」「元組」「字典」「集合」用法的時候,也曾苦苦鑽研面向對象的理念,卻在被要求設計一個稍複雜點的系統時束手無策……說到底,還是方法不對。
  • 三千字詳解說明,入門Servlet
    稍稍做一個知識點的總結: 昨天全面地對Tomcat以及JavaWeb 而要解決上述問題,就要引入servlet的概念了。 servlet,翻譯過來就是小服務程序,它是Java制定的一個規範。Java裡提到規範,第一反應就是接口。
  • Knative 核心概念介紹:Build、Serving和Eventing 三大核心組件
    Knative 主要由 Build、Serving 和 Eventing 三大核心組件構成。Knative 正是依靠這三個核心組件,驅動著 Knative 這艘 Serverless 巨輪前行。下面讓我們來分別介紹一下這三個核心組件。
  • 最近才知道,原來JavaWeb工程師要學的東西有這麼多!
    系列文章介紹本文是《五分鐘學Java》系列文章的一篇本系列文章主要圍繞Java程式設計師必須掌握的核心技能,結合我個人三年多的Java學習和工作經歷,總結和沉澱下來的方法論,希望能讓Java學習這件事變得更簡單,作者目前在阿里做Java,忙裡偷閒分享一些技術文章
  • servlet生命周期
    1.servlet是運行在服務端的java程序2.servlet的生命周期主要有三個方法:init()初始化階段初始化階段:Servlet容器加載Servlet,加載完成後,Servlet容器會創建一個Servlet實例並調用init()方法,init()方法只會調用一次Servlet容器會在一下幾種情況裝載Servlet:Servlet容器啟動時自動裝載某些servlet
  • 詳解vue組件三大核心概念
    本文原載於SegmentFault專欄「前端工匠公眾號」作者:浪裡行舟整理編輯:SegmentFault本文主要介紹屬性、事件和插槽這三個vue基礎概念、使用方法及其容易被忽略的一些重要細節。一、屬性1.自定義屬性propsprop 定義了這個組件有哪些可配置的屬性,組件的核心功能也都是它來確定的。
  • javaweb學習之過濾器(Filter)的使用
    servlet作為請求,向瀏覽器寫入一串中文字符,發生亂碼是意料之中的事情:package servlet;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest
  • Java編程:過濾器和攔截器有啥區別,這次會了!
    其實之前面試完就去學習了一波,只不過那個時候沒及時總結,現在總結一下,以免日後遇到這類問題又給忘咯。要理解這類問題,光靠死記硬背可能當時有用,過一陣子就差不多忘了。要想真的牢記,我們必須要實操一下。Filter的使用首先,要使用Filter,必須實現javax.servlet.Filter接口:init和destroy是default方法,實現類可以不用實現。
  • Servlet聲明和mapping替換你的Web
    Servlet聲明和mapping替換你的Web 本文介紹Servlet聲明和mapping替換你的Web,以及在apach5.x中改變servlet的上下文。
  • 深入理解v-model之自定義組件用法
    根據上一篇《深入理解 v-model 之表單用法》基本對 v-model 有了比較深的理解,接下來我們看看它如何在自定義組件中使用。首先,我們知道下面兩個用法等價的:<input v-model="msg" /><!