国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 淺析JAVA中過濾器、監聽器、攔截器的區別

淺析JAVA中過濾器、監聽器、攔截器的區別

2021-10-27 11:50Java教程網 Java教程

本文通過代碼分析和文字說明的方式給大家淺析JAVA中過濾器、監聽器、攔截器的區別,感興趣的朋友一起看下吧

1.過濾器:所謂過濾器顧名思義是用來過濾的,在java web中,你傳入的request,response提前過濾掉一些信息,或者提前設置一些參數,然后再傳入servlet或者struts的action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),或者在傳入servlet或者struts的action前統一設置字符集,或者去除掉一些非法字符(聊天室經常用到的,一些罵人的話)。filter 流程是線性的, url傳來之后,檢查之后,可保持原來的流程繼續向下執行,被下一個filter, servlet接收等.

2.監聽器:這個東西在c/s模式里面經常用到,他會對特定的事件產生產生一個處理。監聽在很多模式下用到。比如說觀察者模式,就是一個監聽來的。又比如struts可以用監聽來啟動。Servlet監聽器用于監聽一些重要事件的發生,監聽器對象可以在事情發生前、發生后可以做一些必要的處理。

3.java的攔截器 主要是用在插件上,擴展件上比如 hivernate spring struts2等 有點類似面向切片的技術,在用之前先要在配置文件即xml文件里聲明一段的那個東西。

下面通過代碼加文字說明給大家介紹java中過濾器、監聽器、攔截器的區別

1.過濾器

Servlet中的過濾器Filter是實現了javax.servlet.Filter接口的服務器端程序,主要的用途是過濾字符編 碼、做一些業務邏輯判斷等。其工作原理是,只要你在web.xml文件配置好要攔截的客戶端請求,它都會幫你攔截到請求,此時你就可以對請求或響應 (Request、Response)統一設置編碼,簡化操作;同時還可進行邏輯判斷,如用戶是否已經登陸、有沒有權限訪問該頁面等等工作。它是隨你的 web應用啟動而啟動的,只初始化一次,以后就可以攔截相關請求,只有當你的web應用停止或重新部署的時候才銷毀,以下通過過濾編碼的代碼示例來了解它 的使用:

 MyCharsetFilter.java 編碼過濾器  

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package ...;
import ...;
// 主要目的:過濾字符編碼;其次,做一些應用邏輯判斷等.
// Filter跟web應用一起啟動
// 當web應用重新啟動或銷毀時,Filter也被銷毀
public class MyCharsetFilter implements Filter {
  private FilterConfig config = null;
  public void destroy() {
   System.out.println("MyCharsetFilter準備銷毀...");
  }
 
  public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain) throws IOException, ServletException {
   // 強制類型轉換
   HttpServletRequest request = (HttpServletRequest)arg0;
   HttpServletResponse response = (HttpServletResponse)arg1;
   // 獲 取web.xm設置的編碼集,設置到Request、Response 中   request.setCharacterEncoding(config.getInitParameter("charset"));   response.setContentType(config.getInitParameter("contentType"));   response.setCharacterEncoding(config.getInitParameter("charset"));  
  // 將請求轉發到目的地
   chain.doFilter(request, response);
  }
 
  public void init(FilterConfig arg0) throws ServletException {
   this.config = arg0;
   System.out.println("MyCharsetFilter初始化...");
  }
 }

 以下是 MyCharsetFilter.java 在web.xml 中配置:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<filter>
  <filter-name>filter</filter-name>
  <filter-class>dc.gz.filters.MyCharsetFilter</filter-class>
  <init-param>
   <param-name>charset</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
  <init-param>
   <param-name>contentType</param-name>
   <param-value>text/html;charset=UTF-8</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>filter</filter-name>
  <!-- * 代表截獲所有的請求 或指定請求/test.do /xxx.do -->
  <url-pattern>/*</url-pattern>
 </filter-mapping>

以上的例子簡單的說明了Filter的使用,具體其他的應用可以看具體的場景。

2.監聽器

現在來說說Servlet的監聽器Listener,它是實現了javax.servlet.ServletContextListener 接口的服務器端程序,它也是隨web應用的啟動而啟動,只初始化一次,隨web應用的停止而銷毀。主要作用是: 做一些初始化的內容添加工作、設置一些基本的內容、比如一些參數或者是一些固定的對象等等。下面利用監聽器對數據庫連接池DataSource的初始化演 示它的使用:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
MyServletContextListener.java
 package dc.gz.listeners;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletContextListener;
 import org.apache.commons.dbcp.BasicDataSource;
 /**
 * Web應用監聽器
 */
 public class MyServletContextListener implements ServletContextListener { 
  // 應用監聽器的銷毀方法
  public void contextDestroyed(ServletContextEvent event) {
   ServletContext sc = event.getServletContext();
   // 在整個web應用銷毀之前調用,將所有應用空間所設置的內容清空
   sc.removeAttribute("dataSource");
  System.out.println("銷毀工作完成...");
  }
  // 應用監聽器的初始化方法
  public void contextInitialized(ServletContextEvent event) {
   // 通過這個事件可以獲取整個應用的空間
   // 在整個web應用下面啟動的時候做一些初始化的內容添加工作
   ServletContext sc = event.getServletContext();
   // 設置一些基本的內容;比如一些參數或者是一些固定的對象
   // 創建DataSource對象,連接池技術 dbcp
   BasicDataSource bds = new BasicDataSource();
   bds.setDriverClassName("com.mysql.jdbc.Driver");      bds.setUrl("jdbc:mysql://localhost:3306/hibernate");
   bds.setUsername("root");
   bds.setPassword("root");
   bds.setMaxActive(10);//最大連接數
   bds.setMaxIdle(5);//最大管理數
   //bds.setMaxWait(maxWait); 最大等待時間
   // 把 DataSource 放入ServletContext空間中,
   // 供整個web應用的使用(獲取數據庫連接)
   sc.setAttribute("dataSource", bds);
   System.out.println("應用監聽器初始化工作完成...");
   System.out.println("已經創建DataSource...");
  }
 }

 web.xml中配置如下,很簡單:

?
1
2
3
4
<!-- 配置應用監聽器 -->
 <listener>
  <listener-class>dc.gz.listeners.MyServletContextListener</listener-class>
 </listener>

這樣配置好了之后,以后在web應用中就可以通過ServletContext取得BasicDataSource對象,從而獲取與數據庫的連接,提高性能,方便使用。

3.攔截器

攔截器是在面向切面編程中應用的,就是在你的service或者一個方法前調用一個方法,或者在方法后調用一個方法。是基于JAVA的反射機制。攔截器不是在web.xml,比如struts在struts.xml中配置,

?
1
2
3
4
5
6
7
8
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
{
Object result = null;
System.out.println("before invoke method :" + method.getName());
result = method.invoke(this.targetObj, args);
System.out.println("after invoke method : " + method.getName());
return result;
}

 

延伸 · 閱讀

精彩推薦
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日韩精品99 | 日韩中文字幕无码一区二区三区 | 久久99国产精品久久99果冻传媒 | 久久亚洲欧美日韩精品专区 | 精品一二三区在线观看 | av免费观看网站 | 久久99精品久久久久久水蜜桃 | 伊人网网站| 亚洲成人网一区 | 亚洲国产成人av好男人在线观看 | 中国精品一区二区 | 欧美二区在线 | 一区二区三区在线 | 日韩中文字幕在线观看 | 午夜电影网站 | 亚洲av毛片一区二二区三三区 | 国产有码| 亚洲激情在线视频 | 污片在线免费看 | 99久久婷婷国产综合精品草原 | 精品一区二区三区在线观看 | 国产在线观看一区二区 | 国产日韩欧美在线 | 免费看a | 国产精品区一区二区三区 | a国产在线观看 | 久久草视频 | 成人精品动漫一区二区三区 | 国产精品久久久久久久久久免费动 | 成人av一区二区三区 | 国产精品视频区 | 午夜激情视频在线观看 | 欧美一区二区三区在线观看视频 | 精品网站www | 成年人在线观看 | 中文在线a在线 | 午夜视频在线观看一区二区三区 | 日韩高清电影 | 天堂一区| 99国产精品99久久久久久 | 欧美日韩在线一区二区三区 |