servlet 過濾器與監聽器
1、過濾器
過濾器物件放置在javax.servlet包中,名稱為Filter,是一個介面。與過濾器相關的物件還有FilterConfig物件與FilterChain物件,一樣為介面。
過濾器的建立與配置:
- 登陸過濾器例子
java程式碼
package com.topinfo.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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.topinfo.component.common.bean.UserBean;
/**
*
*@Description:TODO
*@Author:pand
*@Since:2016年7月5日下午2:35:45
*/
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException{
System.out.println ("init");
}
@Override
public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain chain) throws IOException,ServletException{
System.out.println ("doFilter");
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpSession session = request.getSession ();
UserBean user = (UserBean)session.getAttribute ("user");
String[] uri = request.getRequestURI ().split ("/");
if("login.do".equals (uri[uri.length - 1])){
chain.doFilter(request, response);
}else{
if(null != user) {
chain.doFilter(request, response);
}else{
response.sendRedirect ("index.html");
}
}
}
@Override
public void destroy(){
System.out.println ("destroy");
}
}
web.xml配置
<filter-name>login</filter-name>
<filter-class>com.topinfo.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>login</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
- 計數攔截器
java程式碼
package com.topinfo.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
/**
*@Description:TODO
*@Author:pand
*@Since:2016年7月5日下午2:34:04
*/
public class CountFilter implements Filter {
private int count;
@Override
public void init(FilterConfig filterConfig) throws ServletException{
String param = filterConfig.getInitParameter ("count");
count = Integer.valueOf (param);
}
@Override
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException{
count++;
HttpServletRequest req = (HttpServletRequest)request;
ServletContext context = req.getSession ().getServletContext ();
context.setAttribute ("count", count);
chain.doFilter (request, response);
}
@Override
public void destroy(){
}
}
web.xml配置:
<filter-name>CountFilter</filter-name>
<filter-class>com.topinfo.filter.CountFilter</filter-class>
<init-param>
<param-name>count</param-name>
<param-value>5000</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CountFilter</filter-name>
<url-pattern>/login.do</url-pattern>
</filter-mapping>
2、監聽器
監聽器的作用是監聽web容器的有效期事件,由容器管理。有八個listener介面。
- ServletContextListener
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
*
*@Description:監聽上下文servletContext物件的建立,刪除。
*@Author:pand
*@Since:2017年7月5日下午3:54:44
*/
public class ServletContextDemoListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce){
// 通知監聽物件,應用程式已經被載入
}
@Override
public void contextDestroyed(ServletContextEvent sce){
// 通知監聽物件,應用程式已經被載出,即關閉
}
}
- ServletContextAttributeListener
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
/**
*
*@Description:監聽ServletContext屬性的增加,刪除和修改
*@Author:pand
*@Since:2017年7月5日下午3:58:34
*/
public class ServletAttributeDemoListener implements ServletContextAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent scab){
// 當有物件加入application時,通知正在監聽的物件
}
@Override
public void attributeRemoved(ServletContextAttributeEvent scab){
// 當有物件移除application時,通知正在監聽的物件
}
@Override
public void attributeReplaced(ServletContextAttributeEvent scab){
// 當有物件取代另一個物件時,通知正在監聽的物件
}
}
- ServletRequestListener
package com.topinfo.listener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
/**
*
*@Description:servlet請求監聽,可以獲取客戶端請求,對請求進行統一處理,可以與ServletRequestAttributeListener儀器使用
*@Author:pand
*@Since:2017年7月5日下午3:11:39
*/
public class RequestListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent sre){
// 通知正在監聽的物件,servletRequest已經唄載入以及初始化
}
@Override
public void requestInitialized(ServletRequestEvent sre){
// 通知正在監聽的物件,servletRequest已經載出,即關閉
}
}
- ServletRequestAttributeListener
package com.topinfo.listener;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
/**
*
*@Description:servlet請求監聽,可以獲取客戶端請求,對請求進行統一處理
*@Author:pand
*@Since:2017年7月5日下午3:10:57
*/
public class RequestAttributeListener implements ServletRequestAttributeListener {
@Override
public void attributeAdded(ServletRequestAttributeEvent srae){
// 當有物件加入request範圍時,通知監聽物件
}
@Override
public void attributeRemoved(ServletRequestAttributeEvent srae){
// 當有物件移除request範圍時,通知監聽物件
}
@Override
public void attributeReplaced(ServletRequestAttributeEvent srae){
// 當有物件取代另一個物件時,通知監聽物件
}
}
- HttpSessionListener
package com.topinfo.listener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
*
*@Description:監聽HTTP會話建立,銷燬
*@Author:pand
*@Since:2016年7月5日下午2:39:17
*/
public class SessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se){
System.out.println ("session 建立");
//根據自己的業務需求寫
}
@Override
public void sessionDestroyed(HttpSessionEvent se){
System.out.println ("session 銷燬");
//根據自己的業務需求寫
}
}
- HttpSessionActivationListener
package com.topinfo.listener;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;
/**
*
*@Description:實現HTTP會話active和passivate
*@Author:pand
*@Since:2017年7月5日下午3:13:08
*/
public class SessionActivationListener implements HttpSessionActivationListener {
@Override
public void sessionWillPassivate(HttpSessionEvent se){
// TODO Auto-generated method stub
}
@Override
public void sessionDidActivate(HttpSessionEvent se){
// TODO Auto-generated method stub
}
}
- HttpSessionBindingListener
package com.topinfo.listener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
/**
*
*@Description:實現監聽HTTP會話物件的繫結,唯一一個不需要在web.xml中設定的listener
*@Author:pand
*@Since:2017年7月5日下午3:05:29
*/
public class SessionBingingListener implements HttpSessionBindingListener{
@Override
public void valueBound(HttpSessionBindingEvent event){
// 當有物件加入session的範圍時會自動呼叫
}
@Override
public void valueUnbound(HttpSessionBindingEvent event){
// 當有物件移除session的範圍時會自動呼叫
}
}
- HttpSessionAttributeListener
package com.topinfo.listener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
/**
*
*@Description:實現監聽HTTP會話中屬性的設定請求
*@Author:pand
*@Since:2017年7月5日下午3:06:00
*/
public class SessionAttributeListener implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent se){
// 當有物件加入session的範圍時,通知正在監聽的物件
}
@Override
public void attributeRemoved(HttpSessionBindingEvent se){
// 當有物件移除session的範圍時,通知正在監聽的物件
se.getName ();
se.getSession ();
se.getValue ();
}
@Override
public void attributeReplaced(HttpSessionBindingEvent se){
// 當有物件去帶領一個物件時,通知正在監聽的物件
}
}
- 監聽器除了HttpSessionBindingListener不要要在web.xml中配置監聽,其他都需要配置,配置方式:
<listener>
<listener-class>com.topinfo.listener.SessionListener</listener-class>
</listener>
- session監聽器,可以通過
<session-config>
<session-timeout>30</session-timeout>
</session-config>
設定session超時時間,預設30分鐘。為了測試方便可以改為1分鐘超時。
3、說明
工作中用到session監聽器,順便總結一下,以後再有用到方便查詢。僅供學習參考。
相關推薦
servlet 過濾器與監聽器
1、過濾器 過濾器物件放置在javax.servlet包中,名稱為Filter,是一個介面。與過濾器相關的物件還有FilterConfig物件與FilterChain物件,一樣為介面。 過濾器的建立與配置: 登陸過濾器例子 java程式碼 pa
Servlet中的過濾器與監聽器
-過濾器? 1.Servlet2.3規範中定義的一種小型的,可插入的Web元件。 2.用來攔截Servlet容器的請求和響應過程,以便檢視,提取或以某種方式操作正在客戶機和伺服器之間交換的資料。 3.通常是一些封裝一些功能的Web元件,這些功能很重要,但對於處理客戶端請求或傳送響應來說不受決
過濾器與監聽器知識總結
mapping rem setattr 處理 event 節點 create 增加 多個 過濾器 什麽是過濾器? 過濾器是servlet2.3規範中定義的一種小型的、可插入的Web組件。用來攔截Servlet容器的請求和響應過程。以便查看、提取或以某種方式操作正在客戶機和服
JAVA Web基礎4-過濾器與監聽器
javax 數組 patch param object servle on() .get 監聽器 一.過濾器1.定義:過濾器是指定義在服務器端的一段程序, 可以截獲客戶端發來的請求, 並根據一定規則進行過濾和攔截。2.過濾器的生命周期: 1.服務器啟動:先通過
Java Servlet 過濾器與 springmvc 攔截器的區別?
結果 dap ber 如果 exce 流程 @override clas 出錯 前言:在工作中,遇到需要記錄日誌的情況,不知道該選擇過濾器還是攔截器,故總結了一下。 servlet 過濾器 定義 java過濾器能夠對目標資源的請求和響應進行截取。過濾器的工作方式分為
java中攔截器、過濾器與監聽器的區別
一、攔截器 interceptor:java裡的攔截器是動態攔截Action呼叫的物件。它提供了一種機制可以使開發者可以定義在一個action執行的前後執行的程式碼,也可以在一個action執行前阻止其執行,同時也提供了一種可以提取action中可重用部分的
從零學springboot—— servlet,過濾器,監聽器,攔截器
自定義servlet @WebServlet(urlPatterns = "/myServlet/*") public class MyServlet extends HttpServlet { @Override protected void doGet(Http
servlet過濾器、監聽器、struts2攔截器的區別
1.過濾器 Servlet中的過濾器Filter是實現了javax.servlet.Filter介面的伺服器端程式,主要的用途是過濾字元編碼、做一些業務邏輯判斷等。其工作原理是,只要你在web.xml檔案配置好要攔截的客戶端請求,它都會幫你攔截到請求,此時你就可以對請求
servlet過濾器和監聽器
Filter的配置和Servlet相似。 <filter> <filter-name>SessionFilter</filter-name> <filter-class>alan.filter.SessionFilter</filter-class&g
Servlet、過濾器、監聽器與攔截器
概念 Servlet Servlet是一種運行於伺服器端的Java應用程式,具有獨立於平臺和協議的特性,並且可以動態的生成Web頁面,它工作在客戶端請求與伺服器響應的中間層,具有跨平臺與可移植性強等優點。 Filter Filter是一個
Servlet、過濾器、監聽器對象的實例化和銷毀的優先級
servlet優先級實例化時:監聽器-->過濾器-->Servlet銷毀時:過濾器-->Servlet-->監聽器Servlet實例化的順序:若設置了loadOnStartUp屬性值≥0,則在Wed容器開啟的時候就實例化,否則訪問時實例化;如果Servlet是在Web.xml文件中配置
Java基礎——Servlet(七)過濾器&監聽器 相關
計數器 cti inf width 正在 tab implement eve login 一、過濾器簡介 Filter 位於客戶端和請求資源之間,請求的資源可以是 Servlet Jsp html (img,javascript,css)等。用於攔截瀏覽器發給服務器的請求(
總結過濾器,監聽器,servlet的異同點,已經執行順序。
dex code 客戶 blog -name 執行順序 銷毀 pat 固定 1.過濾器 Servlet中的過濾器Filter是實現了javax.servlet.Filter接口的服務器端程序,主要的用途是過濾字符編碼、做一些業務邏輯判斷等。其工作原理是,只要你在web.
Servlet初始配置 監聽器和過濾器
https cal 認證 缺省 Coding wrapper oot comm 是否 ServletContext:application範圍內的參數 此所設定的參 來源: http://note.sdo.com/my 數,在JSP網頁中可以使用下列方法來取得:
Filter過濾器與listener監聽器的簡單使用
Filter過濾器是一種對客戶端訪問的過濾技術,簡單來說就是我們瀏覽器訪問伺服器檔案時,如果設定了特定的過濾配置,則會先經過過濾器,然後再將請求放給伺服器去執行,最常見的就是我們過濾使用者是否登入的使用。 listener監聽器,見名得意,他就是起到一個監聽的作用,主要是用來監聽web應用的建立
context-param、init-param、監聽器、過濾器與攔截器
1.context-param 相當於全域性變數,針對容器中所有的servlet都有效,均可獲取該引數,與監聽器無任何必然關係,緊設定的引數可在監聽器中監控使用而已; 2.init-param相當於區域性變數,只針對在xml中宣告的servlet中有效; 3.監聽器Lis
Servlet的過濾器和監聽器
過濾器 作用:對伺服器資源進行統一處理; 如:設定編碼格式,session管理、許可權管理、和諧詞彙 使用: 建立一個實現了Filter介面 的普通java類 覆寫Filter介面的方法 init方法:伺服器啟
JavaWeb-Servlet技術的監聽器-解析與例項-網站線上使用者資訊與網頁點選量
轉載請註明出處: http://blog.csdn.net/qq_26525215 本文源自 在Web專案中,我們對下面這幾個監聽器必須熟練的使用,它們的作用真的很大。熟練的使用後,可以使我們少繞彎路,少寫很多程式碼、 事件源
Servlet、過濾器、監聽器、攔截器的區別
下面從幾個方面闡述一下題目中四個概念的區別與聯絡: 1、概念 2、生命週期 3、職責 4、執行過程 一、概念: 1、servlet:servlet是一種執行伺服器端的java應用程
filter過濾器與servlet的異同
簡述servlet與filter的異同點相同點 :都需要建立類去繼承介面,都有init初始化方法,都需要通過配置WEB-INxmlF/web.xml不同點:1). filter在servlet容器初