1. 程式人生 > >jsp四大作用域以及攔截器和過濾器分析

jsp四大作用域以及攔截器和過濾器分析

jsp中四個作用域的區別
  application 在所有應用程式中有效
  session 在當前會話中有效
  request 在當前請求中有效
  page 在當前頁面有效




首先要宣告一點,所謂"作用域"就是"資訊共享的範圍",也就是說一個資訊能夠在多大的範圍內有效。


  Web互動的最基本單位為HTTP請求。每個使用者從進入網站到離開網站這段過程稱為一個HTTP會話,一個伺服器的執行過程中會有多個使用者訪問,就是多個HTTP會話。作用域解釋如下。


  application:伺服器啟動到停止這段時間。


  session:HTTP會話開始到結束這段時間。


  request:HTTP請求開始到結束這段時間。


  page:當前頁面從開啟到關閉這段時間。


  1. application 作用域


  application作用域就是伺服器啟動到關閉的整段時間,在這個作用域內設定的資訊可以被所有應用程式使用。application作用域上的資訊傳遞是通過ServletContext實現的,它提供的主要方法如下所示:


  Object getAttribute(String name):從application中獲取資訊。


  void setAttribute(String name, Object value):向application作用域中設定資訊。


  2. session作用域


  session作用域比較容易理解,同一瀏覽器對伺服器進行多次訪問,在這多次訪問之間傳遞資訊,就是session作用域的體現。session是通過HttpSession介面實現的,它提供的主要方法如下所示。


  Object HttpSession.getAttribute(String name):從session中獲取資訊。


  void HttpSession.setAttribute(String name, Object value):向session中儲存資訊。


  HttpSession HttpServletRequest.getSession():獲取當前請求所在的session的物件。


  session的開始時刻比較容易判斷,它從瀏覽器發出第一個HTTP請求即可認為會話開始。但結束時刻就不好判斷了,因為瀏覽器關閉時並不會通知伺服器,所以只能通過如下這種方法判斷:如果一定的時間內客戶端沒有反應,則認為會話結束。Tomcat的預設值為120分鐘,但這個值也可以通過HttpSession的setMaxInactiveInterval(int interval)方法來設定,如果想主動讓會話結束,例如使用者單擊"登出"按鈕的時候,可以使用 HttpSession 的 invalidate()方法,用於強制結束當前session。


  3. request作用域


  一個HTTP請求的處理可能需要多個Servlet合作,而這幾個Servlet之間可以通過某種方式傳遞資訊,但這個資訊在請求結束後就無效了。


  Servlet之間的資訊共享是通過HttpServletRequest介面的兩個方法來實現的。


  void setAttribute(String name, Object value):將物件value以name為名稱儲存到request作用域中。


  Object getAttribute(String name):從request作用域中取得指定名字的資訊。


  JSP中的doGet()、doPost()方法的第一個引數就是HttpServletRequest物件,使用這個物件的 setAttribute()方法即可傳遞資訊。


  那麼在設定好資訊之後,要通過何種方式將資訊傳給其他的Servlet呢?這就要用到RequestDispatcher介面的forward()方法,通過它將請求轉發給其他Servlet。


  RequestDispatcher ServletContext.getRequestDispatcher(String path):取得Dispatcher以便轉發。path為轉發的目的Servlet。


  void RequestDispatcher.forward(ServletRequest request, ServletResponse response):將request和response轉發。


  因此,只需要在當前Servlet中先通過setAttribute()方法設定相應的屬性,然後使用forward()方法進行跳轉,最後在跳轉到的Servlet中通過使用getAttribute()方法即可實現資訊傳遞。


  PHP的程式設計師可能不太好理解這一段,因為PHP中沒有轉發的概念,一個請求只能由一個PHP檔案來處理,所以PHP中根本沒有request作用域的概念。而Servlet則不同,請求可以在應用程式中任意轉發,所以用request作用域在不同Servlet之間傳遞資訊。


  需要注意兩點:


  轉發不是重定向,轉發是在Web應用內部進行的。PHP支援重定向但沒有轉發。


  轉發對瀏覽器是透明的,也就是說,無論在伺服器上如何轉發,瀏覽器位址列中顯示的仍然是最初那個Servlet的地址。


  4. page作用域


  page物件的作用範圍僅限於使用者請求的當前頁面,對於page物件的引用將在響應返回給客戶端之後被釋放,或者在請求被轉發到其他地方後被釋放。對page物件的引用通常儲存在pageContext物件中。


  以上介紹的作用範圍越來越小,request和page的生命週期都是短暫的,它們之間的區別:一個request可以包含多個page頁(include,forward及filter)。

過濾器,是在java web中,你傳入的request,response提前過濾掉一些資訊,或者提前設定一些引數,然後再傳入servlet或者struts的 action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果使用者沒有登陸都過濾掉),或者在傳入servlet或者 struts的action前統一設定字符集,或者去除掉一些非法字元 


攔截器,是在面向切面程式設計的就是在你的service或者一個方法,前呼叫一個方法,或者在方法後呼叫一個方法比如動態代理就是攔截器的簡單實現,在你呼叫方法前打印出字串(或者做其它業務邏輯的操作),也可以在你呼叫方法後打印出字串,甚至在你丟擲異常的時候做業務邏輯的操作。


攔截器與過濾器的區別:
攔截器是基於java的反射機制的,而過濾器是基於函式回撥。
攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
攔截器可以訪問action上下文、值棧裡的物件,而過濾器不能訪問。
在action的生命週期中,攔截器可以多次被呼叫,而過濾器只能在容器初始化時被呼叫一次


執行順序:過濾前 – 攔截前 – Action處理 – 攔截後 – 過濾後。個人認為過濾是一個橫向的過程,首先把客戶端提交的內容進行過濾(例如未登入使用者不能訪問內部頁面的處理);過濾通過後,攔截器將檢查使用者提交資料的驗證,做一些前期的資料處理,接著把處理後的資料發給對應的Action;Action處理完成返回後,攔截器還可以做其他過程(還沒想到要做啥),再向上返回到過濾器的後續操作。



相關推薦

jsp四大作用以及攔截過濾器分析

jsp中四個作用域的區別   application 在所有應用程式中有效   session 在當前會話中有效   request 在當前請求中有效   page 在當前頁面有效 首先要宣告一點,所謂"作用域"就是"資訊共享的範圍",也就是說一個資訊能夠在多大的範圍內有效

struts2攔截的執行原理以及攔截過濾器的區別

struts2攔截器的執行原理:     注意:struts2.1.3以後的版中下邊這張圖中的FilterDispatcher已經改為StrutsPrepareAndExecuteFilter     1.首先伺服器接受請求,首先載入web.xml,通過核心控制器Stru

jsp四大作用九大物件

jsp四大作用域和九大物件 詳情檢視我的腦圖 四個作用域:request域、session域、application域、page域 1. request request是表示一個請求,只要發出一個請求就會建立一個request,它的作用域:僅在當前請求中有效。 應用場景

JSP四大作用九種隱式物件

JSP 會被編譯為一個Servlet類 ,執行的時候是一個Servlet例項。 1.四大作用域 1.pageContext 當前頁面    通過pageContext.setAttribute(key,value)的資料,只能在當前頁面訪問,在其他頁面就不能訪問了。

JSP九大內建物件、四大作用以及session的生命週期

JSP共有以下9種基本內建元件(可與ASP的6種內部元件相對應):  1.request物件(作用域)    客戶端的請求資訊被封裝在request物件中,通過它才能瞭解到客戶的需求,然後做出響應。它是HttpServletRequest類的例項。    方 法 說

jsp四大作用九大內建物件

jsp是執行在服務端的程式JSP有九個內建物件(又叫隱含物件),不需要預先宣告就可以在指令碼程式碼和表示式中隨意使用JSP九大內建物件分為四類:輸入輸出物件:out物件、response物件、request物件通訊控制物件:pageContext物件、session物件、ap

JSP運行過程 JSP腳本 靜態動態包含 jsp指令 jsp內置對象jsp四大作用 jsp動作元素 EL表達式 JSTL 設計模式 JSP開發模式 EL內置對象

forward 器) ram 什麽 重復 上下文 腳本元素 沒有 控制 Day38 JSP JSP的運行過程具體如下: (1)客戶端發出請求,請求訪問JSP文件。 (2)JSP容器先將JSP文件轉換成一個Java源文件(Java Servlet源程序),在轉換過程中,如果發

JSP——四大作用

pageContext 作用於當前頁面 生命週期太短,不常用 request 作用於一次請求 1,ajax 不會打斷一次請請求 2,JSP:forword不會打斷一次請求 3,伺服器內部的跳轉不會打斷一次請求 1,a標籤會打斷一次請求 2,使用者執行的操作引起頁面跳轉會打斷一次請求

servlet三大作用 jsp四大作用 jsp九個內建物件 el表示式11個隱藏物件

Servlet三個作用域 *request -->表示一個請求,只要發出一個請求就會建立一個request,它的作用域:僅在當前請求中有效。 *session -->伺服器會為每個會話建立一個session物件,所以session中的資料可供當前會話中所有servlet共享。會話

jsp四大作用

JSP四大作用域 application 作用域 如果把變數放到application裡,就說明它的作用域是application,它的有效範圍是整個應用。整個應用是指從應用啟動,到應用結束。 Object getAttribute(String name)  //從ap

Servlet中獲得JSP四大作用的方法

JSP中的四大作用域分別為pageContext、request、session、application 那麼在servlet中如何獲得這四個物件呢?方法如下: 1.pageContext: PageContext  pageContext  =  JspFactory.g

JSP四大作用、七大動作指令、九大內建物件

學習JSP必須掌握的基礎知識,JSP的精髓所在。 JSP四大作用域 pageContext:頁面域 request:請求域 session:會話域 application: 應用

黑馬程式設計師-OC學習筆記-點方法、成員變數作用以及set方法get方法@property的綜合題

------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! ------- 1.  OC建立物件的拓展: Frac

jsp頁面作用以及使用說明

簡潔明瞭闡述jsp是大作用域在實際開發中很有用   JSP有4個作用域,分別是  pageContext當前頁面儲存資料使用 requestContext 一次請求 ,轉發到某個頁面使用sessio

springMVC攔截過濾器總結

cal .org 文件 bat system als request ping blog 攔截器: 用來對訪問的url進行攔截處理 用處: 權限驗證,亂碼設置等 spring-mvc.xml文件中的配置: <beans xmlns="http://www.sprin

攔截過濾器的區別

str span line 實現 沒有 內部 不依賴 resp left 攔截器和過濾器都可以用來實現橫切關註功能,其區別主要在於: 1、攔截器是基於java反射機制的,而過濾器是基於函數回調的。 2、過濾器依賴於servlet容器,而攔截器不依賴於servlet容器。 3

攔截過濾器區別

his view uri servlet容器 des owa acc long nlog 比如動態代理就是攔截器的簡單實現, public Object invoke(Object proxy, Method method, Object[] args) throws Th

Struts2攔截過濾器的區別?

tex ext struts 依賴 上下 生命周期 action 上下文 區別 ①過濾器依賴於Servlet容器,而攔截器不依賴於Servlet容器。 ②Struts2 攔截器只能對Action請求起作用,而過濾器則可以對幾乎所 有請求起作用。 ③攔截器可以訪問 Actio

面試題:struts 攔截過濾器

編程 att url face 三種方式 來看 字符 struts 規範 攔截器和過濾器的區別 過濾器是servlet規範中的一部分,任何java web工程都可以使用。 攔截器是struts2框架自己的,只有使用了struts2框架的工程才能用。 過濾器在url-patt

SpringMVC_第五章(攔截過濾器

1:什麼是過濾器(Filter) 過濾器Filter:過濾器通過實現Filter介面,實現了過濾器的三個方法,分別是初始化方法,dofilter方法和銷燬方法,隨著容器的啟動和銷燬而初始化和銷燬,依賴於servlet容器,過濾器攔截的是位址列請求,過濾器實在進入容器後執行的servlet之前後執