對於該階段學習的一部分總結

破玉發表於2016-04-19

一、對於servlet3.0特性的總結:

 

Servlet 3.0 作為 Java EE 6 規範體系中一員,隨著 Java EE 6 規範一起釋出。該版本在前一版本(Servlet 2.5)的基礎上提供了若干新特性用於簡化 Web 應用的開發和部署。

 

  1. 非同步處理支援:  有了該特性,Servlet 執行緒不再需要一直阻塞,直到業務處理完畢才能再輸出響應,最後才結束該 Servlet 執行緒。在接收到請求之後,Servlet 執行緒可以將耗時的操作委派給另一個執行緒來完成,自己在不生成響應的情況下返回至容器。針對業務處理較耗時的情況,這將大大減少伺服器資源的佔用,並且提高併發處理速度。
  2. 新增的註解支援:該版本新增了若干註解,用於簡化 Servlet、過濾器(Filter)和監聽器(Listener)的宣告,這使得 web.xml 部署描述檔案從該版本開始不再是必選的了。
  3. 可插性支援:熟悉 Struts2 的開發者一定會對其通過外掛的方式與包括 Spring 在內的各種常用框架的整合特性記憶猶新。將相應的外掛封裝成 JAR 包並放在類路徑下,Struts2 執行時便能自動載入這些外掛。現在 Servlet 3.0 提供了類似的特性,開發者可以通過外掛的方式很方便的擴充已有 Web 應用的功能,而不需要修改原有的應用。

 

           下面主要探討一下servlet3.0用註解的方式,配置servlet、listener、filter

       1.配置servlet:

首先,我們用eclipse建立servlet:如下圖

 在Servlet3.0中,可以使用@WebServlet註解將一個繼承於javax.servlet.http.HttpServlet的類標註為可以處理使用者請求的Servlet。

@WebServlet註解的相關屬性
NO. 屬性名 描述
1 asyncSupported 宣告Servlet是否支援非同步操作模式
2 description Servlet的描述資訊
3 displayName Servlet的顯示名稱
3 initParams Servlet的初始化引數
5 name Servlet的名稱
6 urlPatterns Servlet的訪問URL
7 value Servlet的訪問URL

  Servlet的訪問URL是Servlet的必選屬性,可以選擇使用urlPatterns或者value定義。
  像上面的Servlet3Demo可以描述成@WebServlet(name="Servlet3Demo",value="/Servlet3Demo")。
  也定義多個URL訪問:
  如@WebServlet(name="Servlet3Demo",urlPatterns={"/Servlet3Demo","/Servlet3Demo2"})
  或者@WebServlet(name="AnnotationServlet",value={"/Servlet3Demo","/Servlet3Demo2"})

2.如何配置listener:

3.配置filter

但是當我們使用@WebFilter註解的時候發現註解裡面沒有提供可以控制執行順序的引數

     @WebFilter 的屬性
屬性名型別描述
filterName String 指定過濾器的 name 屬性,等價於 <filter-name>
value String[] 該屬性等價於 urlPatterns 屬性。但是兩者不應該同時使用。
urlPatterns String[] 指定一組過濾器的 URL 匹配模式。等價於 <url-pattern> 標籤。
servletNames String[] 指定過濾器將應用於哪些 Servlet。取值是 @WebServlet 中的 name 屬性的取值,或者是 web.xml 中 <servlet-name> 的取值。
dispatcherTypes DispatcherType 指定過濾器的轉發模式。具體取值包括: ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。
initParams WebInitParam[] 指定一組過濾器初始化引數,等價於 <init-param> 標籤。
asyncSupported boolean 宣告過濾器是否支援非同步操作模式,等價於 <async-supported> 標籤。
description String 該過濾器的描述資訊,等價於 <description> 標籤。
displayName String 該過濾器的顯示名,通常配合工具使用,等價於 <display-name> 標籤。

 

通過實踐發現如果想要控制filer的執行順序可以通過控制filter的檔名來控制

比如:

       UserLoginFilter.java 和 ApiLog.java 這兩個檔案裡面分別是“使用者登入檢查過濾器”和“介面日誌過濾器”,因為這兩個檔案的首字母A排U之前,導致每次執行的時候都是先執行“介面日誌過濾器”再執行“使用者登入檢查過濾器”,所以我們現在修改兩個檔案的名稱分別為

Filter0_UserLogin.java

Filter1_ApiLog.java

這樣就能先執行“使用者登入檢查過濾器”再執行“介面日誌過濾器”

 

參考部落格:

使勁點我呀

          

 

相關文章