生活随笔
收集整理的這篇文章主要介紹了
过滤器filter,监听器listener
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目錄
- 1. filter過濾器
- 1.1 原理
- 1.2 配置
- 1.3 過濾掉臟話demo
- 2. listener監(jiān)聽器
- 2.1 作用
- 2.2 ServletContextListener demo
1. filter過濾器
- 作用:
- 過濾servlet,jsp,js,css,圖片對(duì)象,以及一切在服務(wù)器,客戶端想訪問的對(duì)象
- 用來設(shè)置編碼,過濾掉臟話等…
- 過濾器鏈:你有多個(gè)過濾器,你如果多個(gè)filter過濾一個(gè)servlet,配置一個(gè)servlet,那么這個(gè)多個(gè)過濾器會(huì)形成過濾器鏈。
1.1 原理
- 就像學(xué)校的圖書館,你進(jìn)學(xué)校有保安守著校門,這是一次過濾,進(jìn)學(xué)校圖書館,你得刷卡,才可自習(xí)。只是過濾器可以配置多個(gè),對(duì)不同得對(duì)象…
1.2 配置
- 比如我想創(chuàng)建一個(gè)過濾掉臟話的過濾器叫FilterDirtyTalk
- 對(duì)DirtyMsg servlet進(jìn)行過濾
<filter><filter
-name
>FilterDirtyTalk
</filter
-name
><filter
-class>filter
.FilterDirtyTalk
</filter
-class><!-- 與servlet配置相似
--></filter
><filter
-mapping
><filter
-name
>FilterDirtyTalk
</filter
-name
><url
-pattern
>/DirtyMsg
</url
-pattern
> <!-- 想進(jìn)入dirtymsg servlet 得先經(jīng)過filter
--></filter
-mapping
>
FORWARD:轉(zhuǎn)發(fā)時(shí)進(jìn)行過濾
REQUEST:瀏覽器直接請(qǐng)求時(shí)進(jìn)行過濾(默認(rèn):沒有配置dispatcher節(jié)點(diǎn)的時(shí)候)
INCLUDE:動(dòng)態(tài)包含的時(shí)候執(zhí)行過濾器
<%@ include %>:靜態(tài)包含,把被包含的頁面的源代碼拷貝過來與包含頁面一起轉(zhuǎn)譯編譯運(yùn)行;包含的過程中不能傳參
jsp:include動(dòng)態(tài)包含:包含頁面和被包含頁面分開轉(zhuǎn)譯編譯運(yùn)行,然后將結(jié)果合并到一起;包含的過程中可以傳參
ERROR:在出錯(cuò)的時(shí)候進(jìn)入過濾器
- 在web.xml <filter-mapping>加上
<dispatcher>REQUEST
</dispatcher
> <!-- 默認(rèn)對(duì)請(qǐng)求進(jìn)行過濾
--><dispatcher>FORWARD
</dispatcher
> <!-- 會(huì)檢查請(qǐng)求轉(zhuǎn)發(fā)
-->
1.3 過濾掉臟話demo
- 過濾掉臟話filter_config.txt 文本文件
你妹
=妹妹
你弟
=弟弟
你媽
=媽媽
- 拿到request對(duì)象中的用戶請(qǐng)求數(shù)據(jù),繼承HttpServletRequestWrapper
package servlet
;import java
.util
.Map
;import javax
.servlet
.http
.HttpServletRequest
;
import javax
.servlet
.http
.HttpServletRequestWrapper
;public class MyRequest extends HttpServletRequestWrapper {private Map
<String
, String
[]> map
;public MyRequest(HttpServletRequest request
) {super(request
);map
= request
.getParameterMap(); }@Overridepublic String
getParameter(String name
) {String
[] str
= map
.get(name
);if (str
.length
> 0 && str
!= null
)return str
[0];return null
;}@Overridepublic Map
<String
, String
[]> getParameterMap() {return map
;}@Overridepublic String
[] getParameterValues(String name
) {return map
.get(name
);}}
- 把臟話轉(zhuǎn)成civilized word
package filter
;import java
.io
.BufferedReader
;
import java
.io
.File
;
import java
.io
.FileReader
;
import java
.io
.IOException
;
import java
.util
.Arrays
;
import java
.util
.HashMap
;
import java
.util
.Map
;
import java
.util
.Map
.Entry
;
import java
.util
.Set
;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 servlet
.MyRequest
;public class FilterDirtyTalk implements Filter {@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest req
, ServletResponse resp
,FilterChain chain
) throws IOException
, ServletException
{HttpServletRequest hreq
= (HttpServletRequest
) req
;req
= new MyRequest(hreq
);if (hreq
.getMethod().equalsIgnoreCase("get")) { } else if (hreq
.getMethod().equalsIgnoreCase("post")) {req
.setCharacterEncoding("utf-8");}resp
.setContentType("text/html;charset=utf-8");File file
= new File("E:\\servletStudy\\Servlet3\\filter_config.txt");FileReader fr
= new FileReader(file
);BufferedReader br
= new BufferedReader(fr
);HashMap
<String, String> dirtyMap
= new HashMap<String, String>();String str
= br
.readLine();while (str
!= null
) {dirtyMap
.put(str
.split("=")[0], str
.split("=")[1]);str
= br
.readLine();} Set
<Entry
<String, String>> dirtySet
= dirtyMap
.entrySet();Map
<String
, String
[]> map
= req
.getParameterMap();Set
<Entry
<String
,String
[]>> entrySet
= map
.entrySet();for (Entry
<String
, String
[]> entry
: entrySet
) {String key
= entry
.getKey(); String
[] value
= entry
.getValue(); System
.out
.println(key
+ "\t" + Arrays
.toString(value
));for (int i
= 0; i
< value
.length
; i
++) {for(Entry
<String, String> set
: dirtySet
) {String dirty
= set
.getKey();if (dirty
.equals(value
[i
]))value
[i
] = set
.getValue();}}System
.out
.println("轉(zhuǎn)換后");System
.out
.println(key
+ "\t" + Arrays
.toString(value
));}br
.close();fr
.close();chain
.doFilter(req
, resp
);}@Overridepublic void init(FilterConfig arg0
) throws ServletException
{}}
- DirtyMsg 拿到j(luò)sp頁面過濾的值
package servlet
;import java
.io
.IOException
;import javax
.servlet
.ServletException
;
import javax
.servlet
.http
.HttpServlet
;
import javax
.servlet
.http
.HttpServletRequest
;
import javax
.servlet
.http
.HttpServletResponse
;public class DirtyMsg extends HttpServlet {private static final long serialVersionUID
= 1L
;@Overrideprotected void service(HttpServletRequest req
, HttpServletResponse arg1
)throws ServletException
, IOException
{String name1
= req
.getParameter("name1");String name2
= req
.getParameter("name2");String name3
= req
.getParameter("name3");System
.out
.println(name1
+ name2
+ name3
);}
}
2. listener監(jiān)聽器
2.1 作用
- 用來監(jiān)聽request/session/application的創(chuàng)建/銷毀/數(shù)據(jù)操作
- 講一個(gè)ServletContextListener, 用來監(jiān)聽application的創(chuàng)建和銷毀(監(jiān)聽tomcat的開啟和關(guān)閉)
2.2 ServletContextListener demo
<listener><listener
-class>test
.MyServletContextListener
</listener
-class></listener
>
package test
;import javax
.servlet
.ServletContextEvent
;
import javax
.servlet
.ServletContextListener
;public class MyServletContextListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce
) {System
.out
.println("服務(wù)器開啟啦。。。 可以初始配置文件啦...");}@Overridepublic void contextDestroyed(ServletContextEvent sce
) {System
.out
.println("服務(wù)器銷毀啦。。。");}}
- ServletContextAttributeListener,元素的移除,可得到移除信息,rbr
- request,session的套路類似
總結(jié)
以上是生活随笔為你收集整理的过滤器filter,监听器listener的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。