java怎么监听多个组件,java web(五):java web三大组件之另外两个和八大监听器
java的三大組件指Servlet、Filter、Listener。八大監聽器指八個接口。前面介紹了Servlet,現在介紹一下Filter攔截器以及攔截地址的設置,
Listener監聽那些事件。
java web的cookie和session機制有篇博客講的很好,有興趣的博友可以去看看。地址:https://www.cnblogs.com/whgk/p/6422391.html
一:Filter
1.基本概念
Filter稱之為過濾器,是用來做一些攔截的任務, 在Servlet接受請求之前,做一些事情,如果不滿足限定,可以拒絕進入Servlet。
一個web項目中可以配置多個filter過濾器,瀏覽器訪問靜態資源如html、jsp、css或者訪問動態資源servlet都會經過filter過濾器,滿足條件,過濾器放行,否則直接返回。
2.使用
filter有很多用處,網上一搜,在filter層,來獲取用戶的身份,可以考慮在filter層做一些常規的校驗(如參數校驗,referer校驗等),可以在filter層做
穩定性相關的工作(如全鏈路打點,可以在filter層分配一個traceId;也可以在這一層做限流等)。我最常見的是spring中的編碼過濾器。我們通過編碼過濾器認識filter。
代碼:
package com.briup.servlet.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* Servlet Filter implementation class EncodingFilter
* 編碼過濾器
*/
public class EncodingFilter implements Filter {
private String encoding;
public EncodingFilter() {}
public void destroy() {}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//設置編碼格式【只對post方式有效】;
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
//放行;
chain.doFilter(request, response);
System.out.println("servlet執行完畢,返回到filter");
}
public void init(FilterConfig fConfig) throws ServletException {
//我們把編碼設置在web.xml中,如果需要改編碼在配置文件中更改而不需要更改代碼
encoding = fConfig.getInitParameter("encoding");
}
}
web.xml:
EncodingFilter
EncodingFilter
com.briup.servlet.filter.EncodingFilter
encoding
utf-8
EncodingFilter
/*
訪問:http://127.0.0.1:7778/StudyServlet/HelloWorld或者http://127.0.0.1:7778/StudyServlet/success.html,控制臺都會輸出一句:"servlet執行完畢,返回到filter"。
3.攔截地址的配置
filter我主要想說的就是攔截地址如何配置了。
第一種 【匹配任意】
/*
第二種 【精確匹配】
/test_servlet
表示此攔截器只會攔截/test_servlet這一個路徑
第三種 【擴展名匹配】
*.html
表示此攔截器只會攔截后綴名是.html的路徑
第四種 【路徑匹配】
/test/*
表示此攔截器攔截/test路徑下的所有資源
注意:服務器內部跳轉不會攔截,只會攔截瀏覽器發送的地址。
二:監聽器
Servlet監聽器的作用是監聽Web容器的有效期事件,可以監聽由于Web應用中狀態改變而引起的Servlet容器產生的相應事件,然后接受并處理這些事件。
下面簡單介紹這8個接口和其中的方法。
監聽ServletContent(應用上下文)
1.ServletContentListener接口
Servlet的上下文監聽,它主要實現監聽ServletContext的創建和刪除
(1)contextInitialized(ServletContextEvent event); //通知正在收聽的對象,應用程序已經被加載和初始化。
(2)contextDestroyed(ServletCotextEvent event);? // 通知正在收聽的對象,應用程序已經被載出,即關閉。
2.ServletContextAttributeListener接口
應用上下文存、移除、更改數據進行監聽。
(1)attributeAdded(ServletContextAttributeEvent event); //應用上下文存數據的時候觸發【調用setAttribute方法】
(2)attributeRemoved(ServletContextAttributeEvent event); //ServletContent對象調用removeAttribute方法觸發。
(3)attributeReplaced(ServletContextAttributeEvent event);? //當存數據的時候,key值已經存在,value值被替換的時候觸發。
監聽session接口
3.HttpSessionListener接口
(1)sessionCreated(HttpSessionEvent even); //session被創建的時候觸發。
(2)sessionDestroyed(HttpSessionEvent event); //session過期失效觸發
4.HttpSessionAttributeListener
用法和ServletContextAttributeListener接口類似。
監聽request接口
5.ServletRequestListener
6.ServletRequestAttributeListener
用法和上面類似。
7.HttpSessionActivationListener;
該接口實現監聽HTTP會話active和passivate。
(1)attributeAdded(HttpSessionBindingEvent event); // 當有對象加入session的范圍時,通知正在收聽的對象
(2)attributeReplaced(HttpSessionBindingEvent event); //當在session的范圍有對象取代另一個對象時,通知正在收聽的對象。
(3)attributeRemoved(HttpSessionBindingEvent event);? //當有對象從session的范圍有對象取代另一個對象時,通知正在收聽的對象 。
其中HttpSessionBindingEvent類主要有三個方法:getName()、getSession()和getValue()
8.HttpBindingListener;
接口實現監聽HTTP會話中對象的綁定信息。
(1)alueBound(HttpSessionBindingEvent event);?? //當有對象加入session的范圍時會被自動調用
(2)valueUnBound(HttpSessionBindingEvent event);? //當有對象從session的范圍內移除時會被自動調用
注:本文一部分是參考網上資料的。
java基礎 五 java注釋 關鍵字 標識符
一:java有三大注釋: 1:當行注釋: 使用://開始進行注釋. 2:多行注釋: /**/? 在/*和*/之間的內容 會被編譯器忽略. 3:文檔注釋: /***/? /**注釋信息*/和多行注釋是一 ...
Java基礎(五)-Java序列化與反序列化
.output_wrapper pre code { font-family: Consolas, Inconsolata, Courier, monospace; display: block !i ...
java web 三大組件
JavaWeb三大組件 Servlet,Filter,Listener. Servlet Servlet的作用 在Java web b/s架構中,servlet扮演了重要的角色,作為一個中轉處理的容器 ...
java Web三大組件--過濾器
參考博客:http://www.cnblogs.com/coderland/p/5902878.html https://www.cnblogs.com/HigginCui/p/5772514.htm ...
JAVA首選五款開源Web開發框架
Spring Spring是一個開源的Java/Java EE全功能棧應用程序框架,在JavaEE社區中非常受歡迎,以Apache許可證形式發布,也有.NET平臺上的移植版本. Struts2 Str ...
Java Web(五) JSP詳解(四大作用域九大內置對象等)
前面講解了Servlet,了解了Servlet的繼承結構,生命周期等,并且在其中的ServletConfig和ServletContext對象有了一些比較詳細的了解,但是我們會發現在Servlet中編 ...
Java Web之Servlet的三大作用域對象
Servlet的作用域是干嘛的?答案就是共享數據而存在的,如圖: 下面通過代碼演示來具體講解一下三大作用域 我們新建兩個類 package main.com.vae.scope; import jav ...
用 Java 技術創建 RESTful Web 服務--轉載
簡介 JAX-RS (JSR-311) 是為 Java EE 環境下的 RESTful 服務能力提供的一種規范.它能提供對傳統的基于 SOAP 的 Web 服務的一種可行替代. 在本文中,了解 JAX ...
Java和PHP在Web開發方面的比較
比較 PHP和JSP這兩個Web開發技術,在目前的情況是其實是比較PHP和Java的Web開發.以下是我就幾個主要方面進行的比較: 一. 語言比較 PHP是解釋執行的服務器腳本語言,首先php有簡單容 ...
隨機推薦
完美解決,瀏覽器下拉顯示網址問題 | 完美解決,使用原生 scroll 寫下拉刷新
在 web 開發過程中我們經常遇到,不想讓用戶下拉看到我的地址,也有時候在 div 中沒有慣性滾動,就此也出了 iScroll 這種關于滾動條的框架,但是就為了一個體驗去使用一個框架好像又不值得,今天 ...
iOS進階篇索引,標記和自定義的table
一.帶索引目錄的表視圖 ①效果圖 圖1 帶索引的列表 ② 數據源 本想獲取通訊錄中得名字,但為了用模擬器調試方便,就寫死了數據,所以也只寫了部分字母,總之有那么點意思就成 @interface Vie ...
zabbix監控模式、分布式、自動化
適用場景: 1.監控主機多,性能瓶頸 2.多機房,防火墻 zabbix監控模式 針對agent來說 - 被動模式 - 主動模式(主動匯報服務端) 1)當監控主機超過300臺,建議使用主動模式 2)當隊 ...
整除的尾數[HDU2099]
整除的尾數 Time Limit: 1000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
Web版RSS閱讀器(二)——使用dTree樹形加載rss訂閱分組列表
在上一邊博客中已經講過如何讀取rss訂閱文件了.這次就把訂閱的文件讀取到頁面上,使用樹形結構進行加載顯示. 不打算使用 ...
poj 2828 線段樹
http://poj.org/problem?id=2828 學到的思維: 1.變化的或者后來的優先影響前面的,那么從最后一個往前看,最后一個就成了 確定的, 而且后來的也能夠確定----假設從前往后 ...
雜記-python
1.在cmd輸入python -V顯示當前python的版本信息,一定是大寫的V 2.輸入python,進入python解釋器里面 3.在解釋器中,輸入exit()或者quit()會退出,一定要加括號 ...
linux 時間和時區設置
在linux中與時間相關的文件有 /etc/localtime /etc/timezone 其中,/etc/localtime是用來描述本機時間,而 /etc/timezone是用來描述本機所屬的時區 ...
Spring的IOC/DI使用到的技術
一.了解Spring IOC/DI 1:Spring有兩大核心技術,控制反轉(Inversion of Control, IOC)/依賴注入(Dependency Injection,DI)和面向切面 ...
總結
以上是生活随笔為你收集整理的java怎么监听多个组件,java web(五):java web三大组件之另外两个和八大监听器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php redis删除所有key,PHP
- 下一篇: java major version: