《《JSP過濾器》PPT課件.ppt》由會員分享,可在線閱讀,更多相關《《JSP過濾器》PPT課件.ppt(38頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、servlet過濾器與servlet監(jiān)聽器,1、servlet過濾器 2、 servlet監(jiān)聽器,1、servlet過濾器,1.1、什么是servlet過濾器 1.2、servlet過濾器的開發(fā)步驟 1.3、實例 1.4、servlet過濾器的深入使用,1.1、什么是jsp監(jiān)聽器,servlet 過濾器( Filter )是小型的 Web 組件,它們攔截請求和響應,以便查看、提取或以某種方式操作正在客戶機和服務器之間交換的數(shù)據(jù)。 實現(xiàn)過濾器只須在web.xml中設定相關設定,不需要修改Servlet、JSP和其他靜態(tài)頁面。因此開發(fā)者可以輕易的加入Filter機制。,過濾器是通常封裝了一些功能的
2、 Web 組件,這些功能雖然很重要,但是對于處理客戶機請求或發(fā)送響應來說不是決定性的。 過濾器在Web開發(fā)中的一些主要應用: 對用戶請求進行統(tǒng)一認證。 對用戶的訪問請求進行記錄和審核。 對用戶發(fā)送的數(shù)據(jù)進行過濾或替換。 轉換圖象格式。 對響應內容進行壓縮,減少傳輸量。 對請求或響應進行加解密處理 觸發(fā)資源訪問是事件。,1.2、servlet過濾器的開發(fā)步驟,開發(fā)Servlet過濾器的步驟如下: 1.2.1 編寫實現(xiàn)Filter接口的Servlet類。 1.2.2 在web.xml中配置Filter。,1.2.1 編寫實現(xiàn)Filter接口的Servlet類,開發(fā)一個過濾器需要實現(xiàn)Filter接口
3、,F(xiàn)ilter接口定義了以下方法: (1)public void init(FilterConfig filterConfig)throws ServletException 由Web容器調用,初始化此Filter。 (2) public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws java.io.IOException,ServletException 具體過濾處理代碼。 (3)public void destroy() 由Web容器調用,在過濾器被銷毀之前調用。
4、,,doFilter(): 與 servlet 擁有一個 service() 方法(這個方法又調用 doPost() 或者 doGet() )來處理請求一樣,過濾器擁有單個用于處理請求和響應的方法doFilter() 。 這個方法接受三個輸入?yún)?shù):一個 ServletRequest 、 ServletResponse和一個 FilterChain 對象。,package com.wgw.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import
5、 javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class SimpleFilter implements Filter private FilterConfig filterConfig; public void init(FilterConfig config) throws ServletException this.filterConfi
6、g = config; ,public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException,ServletException System.out.println(Within SimpleFilter1:Filtering the Request...1); //以上是請求資源之前進行攔截后的操作 chain.doFilter(request, response); //提交給相應資源 //以上是響應到客戶端之
7、前攔截后的操作 System.out .println(Within SimpleFilter1:Filtering the Response...1); public void destroy() this.filterConfig = null; ,1.2.2 在web.xml中配置Filter, filter1 com.wgw.filter.SimpleFilter1 filter1 /* ,效果,輸入網(wǎng)址http://127.0.0.1:8080/try/index.jsp,1.3、實例,實例一 記錄所有用戶訪問try網(wǎng)站的信息。,package com.wgw.filter; im
8、port java.io.IOException; import javax.servlet.*; import java.util.*; import javax.servlet.http.*; public class SimpleFilter implements Filter private FilterConfig filterConfig; public void init(FilterConfig config) throws ServletException this.filterConfig = config; public void destroy() this.fi
9、lterConfig = null; ,public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException,ServletException HttpServletRequest req = (HttpServletRequest) request; ServletContext application = filterConfig.getServletContext(); application.log(req.getRem
10、oteHost() + tried to access + req.getRequestURL() + on + new Date() + .); chain.doFilter(request, response); ,效果,,實例二 用于設置HTTP請求字符編碼的過濾器,通過過濾器參數(shù)encoding指明使用何種字符編碼,用于處理HtmlForm請求參數(shù)的中文問題,package com.wgw.filter; import javax.servlet.*; import java.io.IOException; public class CharacterEncodingFilter im
11、plements Filter protected FilterConfig filterConfig = null; protected String encoding = ; public void init(FilterConfig filterConfig) throws ServletException this.filterConfig = filterConfig; this.encoding = filterConfig.getInitParameter(encoding); ,public void doFilter(ServletRequest servletRequest
12、, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException if(encoding != null) servletRequest.setCharacterEncoding(encoding); filterChain.doFilter(servletRequest, servletResponse); public void destroy() filterConfig = null; encoding = null; ,Web.xml Charac
13、terEncodingFilter com.wgw.filter.CharacterEncodingFilter encoding gbk CharacterEncodingFilter /* ,,實例三 創(chuàng)建Servlet過濾器“IPFilter.java”,它可以過濾用戶的IP地址,以進行訪問控制。,(1)源代碼 public class IPFilter implements Filter protected FilterConfig filterConfig; protected String filterIP;//需要過濾的IP地址 /*初始化過濾器*/ public void
14、init(FilterConfig config) throws ServletException this.filterConfig=config; filterIP=config.getInitParameter(filterIP); //獲取被過濾的IP地址 if(filterIP==null)filterIP=; ,/*過濾操作*/ public void doFilter(ServletRequest reg, ServletResponse res, FilterChain chain) throws IOException, ServletException Request
15、Dispatcher reqDispatcher=reg.getRequestDispatcher(error.jsp); String remoteIP=reg.getRemoteAddr();//獲取本地IP地址 if(remoteIP.equals(filterIP))//如果該IP地址被過濾,將轉向錯誤頁面 reqDispatcher.forward(reg, res); else //否則將請求轉發(fā)給過濾器鏈中的其他資源 chain.doFilter(reg, res); /*銷毀過濾器*/ public void destroy() th
16、is.filterConfig=null; ,(2)在web.xml文件中配置IPFilter過濾器,在配置文件中定義了一個名為filterIP的參數(shù),它的值為192.168.70.82,表示IP地址為192.168.70.82的用戶將被拒絕訪問。在web.xml文件中配置過濾器如下: IPFilter sunyang.IPFilter filterIP 192.168.70.82 IPFilter /* ,(3)建立測試IPFilter過濾器的JSP頁面“success.jsp”和“error.jsp”。, 歡迎頁面 歡迎 , 拒絕訪問 對不起,您的IP地址
17、禁止訪問該網(wǎng)站 ,success.jsp,error.jsp,,,1.4、servlet過濾器的深入使用,1.4.1 servlet的串聯(lián) 1.4.2 2.4版本下的servlet,2 Servlet監(jiān)聽器,2.1 Servlet監(jiān)聽器工作原理 2.2 Servlet監(jiān)聽器類型 2.3 應用實例,2.1 Servlet監(jiān)聽器原理,Servlet監(jiān)聽器是Web應用程序事件模型的一部分,當Web應用中的某些狀態(tài)發(fā)生改變時,Servlet容器就會產(chǎn)生相應的事件,比如創(chuàng)建ServletContext對象時觸發(fā)ServletContextEvent事件,創(chuàng)建HttpSession對象時觸發(fā)HttpSes
18、sionEvent事件,Servlet監(jiān)聽器可接收這些事件,并可以在事件發(fā)生前、發(fā)生后可以做一些必要的處理。,返回,根據(jù)監(jiān)聽對象的不同,Servlet2.4規(guī)范將Servlet監(jiān)聽器劃分為以下3種:,ServletContext事件監(jiān)聽器:用于監(jiān)聽應用程序環(huán)境對象。 HttpSession事件監(jiān)聽器:用于監(jiān)聽用戶會話對象。 ServletRequest事件監(jiān)聽器:用于監(jiān)聽請求消息對象。,2.2 Servlet監(jiān)聽器類型,1ServletContext事件監(jiān)聽器,對ServletContext對象進行監(jiān)聽的接口有ServletContextAttributeListener和ServletCon
19、textListener,其中ServletContextAttributeListener用于監(jiān)聽ServletContext對象中屬性的改變,包括增加屬性、刪除屬性和修改屬性。ServletContextListener用于監(jiān)聽ServletContext對象本身的改變,例如ServletContext對象的創(chuàng)建和銷毀。,ServletContext事件監(jiān)聽器中的接口和方法如表所示:,2HttpSession事件監(jiān)聽器,對會話對象進行監(jiān)聽的接口有HttpSessionAttributeListener、HttpSessionListener、HttpSessionActivationLis
20、tener和HttpSessionBindingListener。 其中HttpSessionAttributeListener用于監(jiān)聽HttpSession對象中屬性的改變,例如屬性的增加、刪除和修改。 HttpSessionListener用于監(jiān)聽HttpSession對象的改變,例如HttpSession對象的創(chuàng)建與銷毀。 HttpSessionActivationListener用于監(jiān)聽HttpSession對象的狀態(tài),例如HttpSession對象是被激活還是被鈍化。HttpSessionBindingListener用于監(jiān)聽HttpSession對象的綁定狀態(tài),例如添加對象和移除對
21、象。,HttpSession事件監(jiān)聽器中的接口和方法如表所示:,3ServletRequest事件監(jiān)聽器,對請求消息對象進行監(jiān)聽的接口有ServletRequestListener和ServletRequestAttributeListener, 其中ServletRequestListener用于監(jiān)聽ServletRequest對象的變化,例如ServletRequest對象的創(chuàng)建和銷毀。 ServletRequestAttributeListener用于監(jiān)聽ServletRequest對象中屬性的變化,例如屬性的增加、刪除和修改。,返回,ServletRequest事件監(jiān)聽器的接口和方法如
22、表所示:,2.3 Servlet監(jiān)聽器應用,創(chuàng)建Servlet監(jiān)聽器OnlineListener,OnlineListener監(jiān)聽器用于監(jiān)聽網(wǎng)站的在線人數(shù),代碼如下:,,import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class OnlineListener implements HttpSessionListener private int onlineCount;//定義一個代表在線人數(shù)的變量 public OnlineListener()
23、onlineCount=0; public void sessionCreated(HttpSessionEvent sessionEvent) //會話創(chuàng)建時的處理 onlineCount++; sessionEvent.getSession().getServletContext().setAttribute(online,new Integer(onlineCount)); public void sessionDestroyed(HttpSessionEvent sessionEvent) //會話銷毀時的處理 onlineCount--; sessionEvent.getSession().getServletContext().setAttribute(online,new Integer(onlineCount)); ,(2)在web.xml文件中配置OnlineListener監(jiān)聽器,相關代碼如下:,(3)創(chuàng)建JSP頁面“online.jsp”,測試OnlineListener監(jiān)聽器,代碼如下:, 使用監(jiān)聽器監(jiān)聽在線人數(shù)的例子 當前的在線人數(shù): , sunyang.OnlineListener ,