淺談Servlet和Filter的區別以及兩者在Struts2和Springmvc中的應用

来源:http://www.cnblogs.com/yuluenghisa/archive/2017/08/04/7286571.html
-Advertisement-
Play Games

在javaweb開發中,Servlet和Filter是很重要的兩個概念,我們平時進行javaweb開發的時候,會經常和Servlet和Filter打交道,但我們真的瞭解Servlet和Filter嗎? 一、基本概念 Servlet: Servlet 是在WEB伺服器上運行的程式。這個詞是在 Java ...


在javaweb開發中,Servlet和Filter是很重要的兩個概念,我們平時進行javaweb開發的時候,會經常和Servlet和Filter打交道,但我們真的瞭解Servlet和Filter嗎?

一、基本概念

Servlet:

       Servlet 是在WEB伺服器上運行的程式。這個詞是在 Java applet的環境中創造的,Java applet 是一種當作單獨文件跟網頁一起發送的小程式,它通常用於在客戶端運行,結果得到為用戶進行運算或者根據用戶互作用定點陣圖形等服務。

       伺服器上需要一些程式,常常是根據用戶輸入訪問資料庫的程式。這些通常是使用公共網關介面(Common Gateway Interface,CGI)應用程式完成的。然而,在伺服器上運行 Java,這種程式可使用 Java 編程語言實現。在通信量大的伺服器上,JavaServlet 的優點在於它們的執行速度更快於 CGI 程式。各個用戶請求被激活成單個程式中的一個線程,而無需創建單獨的進程,這意味著伺服器端處理請求的系統開銷將明顯降低。

        Servlet創建並返回一個包含基於客戶請求性質的動態內容的完整的html頁面;
        創建可嵌入到現有的html頁面中的一部分html頁面(html片段);
        讀取客戶端發來的隱藏數據;
        讀取客戶端發來的顯示數據;
        與其他伺服器資源(包括資料庫和java的應用程式)進行通信;
        通過狀態代碼和響應頭向客戶端發送隱藏數據。

Filter:

        filter是一個可以復用的代碼片段,可以用來轉換HTTP請求、響應和頭信息。Filter不像Servlet,它不能產生一個請求或者響應,它只是修改對某一資源的請求,或者修改從某一的響應。

 二、生命周期:
 
        1、servlet:servlet的生命周期始於它被裝入web伺服器的記憶體時,併在web伺服器終止或重新裝入servlet時結束。servlet一旦被裝入web伺服器,一般不會從web伺服器記憶體中刪除,直至web伺服器關閉或重新結束。
        (1)、裝入:啟動伺服器時載入Servlet的實例;
        (2)、初始化:web伺服器啟動時或web伺服器接收到請求時,或者兩者之間的某個時刻啟動。初始化工作有init()方法負責執行完成;
        (3)、調用:從第一次到以後的多次訪問,都是只調用doGet()或doPost()方法;
        (4)、銷毀:停止伺服器時調用destroy()方法,銷毀實例。 
 
        2、filter:(一定要實現javax.servlet包的Filter介面的三個方法init()、doFilter()、destroy(),空實現也行)
        (1)、啟動伺服器時載入過濾器的實例,並調用init()方法來初始化實例;
        (2)、每一次請求時都只調用方法doFilter()進行處理;

        (3)、停止伺服器時調用destroy()方法,銷毀實例。

三、職責
 
       1、servlet:
 
        創建並返回一個包含基於客戶請求性質的動態內容的完整的html頁面;
        創建可嵌入到現有的html頁面中的一部分html頁面(html片段);
        讀取客戶端發來的隱藏數據;
        讀取客戶端發來的顯示數據;
        與其他伺服器資源(包括資料庫和java的應用程式)進行通信;
        通過狀態代碼和響應頭向客戶端發送隱藏數據。
 
       2、filter:
 
        filter能夠在一個請求到達servlet之前預處理用戶請求,也可以在離開servlet時處理http響應:
        在執行servlet之前,首先執行filter程式,併為之做一些預處理工作;
        根據程式需要修改請求和響應;
        在servlet被調用之後截獲servlet的執行

四、區別:

        1,servlet 流程是短的,url傳來之後,就對其進行處理,之後返回或轉向到某一自己指定的頁面。它主要用來在 業務處理之前進行控制.
        2,filter 流程是線性的, url傳來之後,檢查之後,可保持原來的流程繼續向下執行,被下一個filter, servlet接收等,而servlet 處理之後,不會繼續向下傳遞。filter功能可用來保持流程繼續按照原來的方式進行下去,或者主導流程,而servlet的功能主要用來主導流程。
filter可用來進行字元編碼的過濾,檢測用戶是否登陸的過濾,禁止頁面緩存等

五、執行流程圖:

         1、servlet:

               

          2、filter:

           

javaweb開發我們常用到的後臺框架有Struts2和Springmvc。其中Struts2的入口filter,而Springmvc的入口是servlet;

我們在使用Struts2進行開發時,web.xml中的核心控制器是這樣配置的

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

而使用Springmvc進行開發時,其web.xml是這樣配置的

<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 閱讀目錄 Checkbutton Radiobutton LabelFrame checkbutton : 說明:多選框控制項,用於在程式中提供多項選擇框,但是處理“多選一”的問題,還是交給 Radiobutton 或 Listbox 組件來實現吧。 用法:使用 Checkbutton,你必須創建一個 ...
  • 作者:溫學良 鏈接:https://www.zhihu.com/question/21416727/answer/82511153 來源:知乎 著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。 Web伺服器習慣處理靜態頁面,所以需要一個程式來幫忙處理動態請求(如當前時間)。Web ...
  • 學了數組之後,感覺有好多操作需要經常去寫,很不方便,因此自己做了一個工具類,方便調用,方法可能不全,希望大家可以添加,讓我使用也方便一點兒。 ...
  • 前言 本文章整理了鏈表排序的三種方法,分別是快速排序、插入排序、歸併排序。為適應不同用途,先給出常用的int版本,再在此基礎上抽象出類模板。 目錄 一、針對整數的版本(常用) 二、模板版本(適用性廣泛) 總結 參考文章 一、針對整數的版本(常用) 文中鏈表定義: 鏈表相關操作: 三種排序方法: 完整 ...
  • 在HttpServlet中重寫service方法的代碼如下: 什麼是”Last-Modified”?和 If-Modified-Since? 在瀏覽器第一次請求某一個URL時,伺服器端的返回狀態會是200,內容是你請求的資源,同時有一個Last-Modified的屬性標記此文件在服務期端最後被修改的 ...
  • 進行了一些Python基礎知識的學習後,將這些知識進行綜合,實現了名片管理小系統,可以進行數據的增刪改查。 ...
  • 今天,公司里有一個萌萌的妹子問我java 中的comparator是怎麼回事。參數分別是什麼,返回值又是什麼,為此,我寫了一個簡單的程式告訴了她: 執行結果: 通過這個執行結果,我們可以看出一下幾點: 以compare(a1, a2)為例: 1)其中a1 是要添加的數數據, a2是從集合中取出來的與 ...
  • 1.第一個Python程式: print("Hello,world !") #雖然簡單,但是必須寫,為什麼?儀式感 2.python中的變數: 變數就是為了存儲,存儲就是為了後面的過程中的調用。 怎麼來定義變數? name(變數名)= “Gao Han” (值) 變數定義的規則:①變數名只能是 字母 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...