日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

JavaEE基础(05):过滤器、监听器、拦截器,应用详解

發(fā)布時(shí)間:2025/3/16 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaEE基础(05):过滤器、监听器、拦截器,应用详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文源碼:GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里

一、Listener監(jiān)聽器

1、概念簡(jiǎn)介

JavaWeb三大組件:Servlet,Listener,Filter。監(jiān)聽器就是指在應(yīng)用程序中監(jiān)聽相關(guān)對(duì)象狀態(tài)變化的組件。

2、事件源對(duì)象

指被監(jiān)聽對(duì)象。

  • ServletContext

ServletContextListener生命周期監(jiān)聽,它有兩個(gè)方法,出生時(shí)調(diào)用contextInitialized(),銷毀時(shí)調(diào)用contextDestroyed();

ServletContextAttributeListener屬性監(jiān)聽,它有三個(gè)方法,添加屬性attributeAdded(),替換屬性attributeReplaced(),移除屬性時(shí)attributeRemoved()。

  • HttpSession

HttpSessionListener生命周期監(jiān)聽:它有兩個(gè)方法,出生時(shí)調(diào)用sessionCreated(),銷毀時(shí)調(diào)用sessionDestroyed();

HttpSessioniAttributeListener屬性監(jiān)聽:它有三個(gè)方法,添加屬性attributeAdded(),替換屬性attributeReplaced(),移除屬性attributeRemoved()。

  • ServletRequest

ServletRequestListener生命周期監(jiān)聽:它有兩個(gè)方法,出生時(shí)調(diào)用requestInitialized(),銷毀時(shí)調(diào)用requestDestroyed();

ServletRequestAttributeListener屬性監(jiān)聽:它有三個(gè)方法,添加屬性attributeAdded(),替換屬性attributeReplaced(),移除屬性attributeRemoved()。

3、編碼案例

  • 相關(guān)監(jiān)聽器

TheContextListener

public class TheContextListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent servletContextEvent) {System.out.println("初始化:TheContextListener");ServletContext servletContext = servletContextEvent.getServletContext() ;servletContext.setAttribute("author","cicada");}@Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {System.out.println("銷毀:TheContextListener");} }

TheRequestListener

public class TheRequestListener implements ServletRequestListener {@Overridepublic void requestDestroyed(ServletRequestEvent servletRequestEvent) {System.out.println("初始化:TheRequestListener");}@Overridepublic void requestInitialized(ServletRequestEvent servletRequestEvent) {System.out.println("銷毀:TheRequestListener");} }

TheSessionListener

public class TheSessionListener implements HttpSessionListener {@Overridepublic void sessionCreated(HttpSessionEvent httpSessionEvent) {System.out.println("初始化:TheSessionListener");}@Overridepublic void sessionDestroyed(HttpSessionEvent httpSessionEvent) {System.out.println("銷毀:TheSessionListener");} }

RequestAttributeListener

public class RequestAttributeListener implements ServletRequestAttributeListener {@Overridepublic void attributeAdded(ServletRequestAttributeEvent evt) {System.out.println("Request添加屬性:"+evt.getName()+";"+evt.getValue());}@Overridepublic void attributeRemoved(ServletRequestAttributeEvent evt) {System.out.println("Request移除屬性:"+evt.getName()+";"+evt.getValue());}@Overridepublic void attributeReplaced(ServletRequestAttributeEvent evt) {System.out.println("Request替換屬性:"+evt.getName()+";"+evt.getValue());} }
  • web.xml配置文件
<!-- 監(jiān)聽器相關(guān)配置 --> <listener><listener-class>com.node05.servlet.listener.TheContextListener</listener-class> </listener> <listener><listener-class>com.node05.servlet.listener.TheSessionListener</listener-class> </listener> <listener><listener-class>com.node05.servlet.listener.TheRequestListener</listener-class> </listener> <listener><listener-class>com.node05.servlet.listener.RequestAttributeListener</listener-class> </listener> <session-config><!-- 設(shè)置session失效時(shí)間為1分鐘 --><session-timeout>1</session-timeout> </session-config>
  • 測(cè)試接口
public class ListenerServletImpl extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");// 1、獲取TheContextListener初始化數(shù)據(jù)ServletContext servletContext = this.getServletContext() ;String author = String.valueOf(servletContext.getAttribute("author")) ;System.out.println("TheContextListener Author:"+author);// 2、Request屬性設(shè)置request.setAttribute("mood","smile");request.setAttribute("mood","agitated");// 3、Session創(chuàng)建,1分鐘失效,調(diào)用銷毀HttpSession session = request.getSession(true) ;session.setAttribute("casually","casually");response.getWriter().print("Hello:Listener");} }

二、Filter過濾器

1、過濾器簡(jiǎn)介

客戶端請(qǐng)求Servlet時(shí),先執(zhí)行相關(guān)Filter,如果Filter通過,則繼承執(zhí)行請(qǐng)求的Servlet;如果Filter不通過,則不會(huì)執(zhí)行用戶請(qǐng)求的Servlet。過濾器可以動(dòng)態(tài)地?cái)r截請(qǐng)求和響應(yīng)。

2、Filter接口

Filter接口定義了三個(gè)核心方法。

  • init()

應(yīng)用程序啟動(dòng)時(shí),服務(wù)器實(shí)例化Filter對(duì)象,并調(diào)用其init方法,讀取web.xml配置,完成對(duì)象的初始化加載。

  • doFilter()

實(shí)際的過濾操作,請(qǐng)求達(dá)到服務(wù)器時(shí),Servlet容器將先調(diào)用過濾器的doFilter方法。

  • destroy()

容器在銷毀過濾器前調(diào)用該方法,釋放過濾器占用的資源。

3、編碼案例

  • 編寫過濾器
public class ThePrintLogFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {String myName = filterConfig.getInitParameter("myName") ;System.out.println("myName:"+myName);}@Overridepublic void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain chain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest)servletRequest ;HttpServletResponse response = (HttpServletResponse)servletResponse ;String name = request.getParameter("name") ;if (!name.equals("cicada")){response.getWriter().print("User Error !");return ;}chain.doFilter(servletRequest,servletResponse);}@Overridepublic void destroy() {System.out.println("ThePrintLogFilter destroy()");} }
  • web.xml配置文件
<!-- 過濾器相關(guān)配置 --> <filter><filter-name>thePrintLogFilter</filter-name><filter-class>com.node05.servlet.filter.ThePrintLogFilter</filter-class><init-param><param-name>myName</param-name><param-value>cicada</param-value></init-param> </filter> <filter-mapping><filter-name>thePrintLogFilter</filter-name><url-pattern>/filterServletImpl</url-pattern> </filter-mapping>
  • 測(cè)試接口
public class FilterServletImpl extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");response.getWriter().print("Hello:Filter");} }

三、Interceptor攔截器

Spring框架中的攔截器Interceptor類似于Servlet中的過濾器Filter,主要用于攔截用戶請(qǐng)求并作相應(yīng)的處理。例如通過攔截器可以進(jìn)行權(quán)限驗(yàn)證、記錄請(qǐng)求信息的日志、判斷用戶是否登錄等。請(qǐng)求轉(zhuǎn)發(fā)不執(zhí)行攔截、過濾;重定向執(zhí)行攔截和過濾。

四、源代碼地址

GitHub·地址 https://github.com/cicadasmile/java-base-parent GitEE·地址 https://gitee.com/cicadasmile/java-base-parent

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的JavaEE基础(05):过滤器、监听器、拦截器,应用详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 绝顶高潮videos合集 | 国产成人精品二区三区亚瑟 | 国产永久视频 | 肉丝肉足丝袜一区二区三区 | 成人精品二区 | 在线天堂1 | 亚洲第一av在线 | 人妻丰满熟妇aⅴ无码 | 欧美丰满美乳xxⅹ高潮www | av一区二区三区免费观看 | 亚洲免费播放 | missav|免费高清av在线看 | 欧美真人性野外做爰 | 99色在线视频 | 黄色aa大片| 国产精品一区三区 | 尤物在线免费视频 | 国产精品一级片在线观看 | 真实乱视频国产免费观看 | 亚洲综合婷婷 | 国产伦精品一区二区三区视频黑人 | 亚洲精品~无码抽插 | 国产在线精品一区二区三区 | 国产欧美一区二区三区在线看蜜臀 | 中文字幕99| 午夜精品福利一区二区蜜股av | 国产精品国产三级国产普通话蜜臀 | 日本一区二区免费视频 | 一级日韩一级欧美 | 国产白丝精品91爽爽久久 | 国产欧美日韩三区 | 97超碰在线免费观看 | 亚洲熟妇色自偷自拍另类 | 国产精品不卡在线观看 | 国产欧美综合在线 | 修女也疯狂3免费观看完整版 | 日产久久视频 | 国产电影一区二区三区爱妃记 | 亚洲一二三区在线 | 可以免费看黄的网站 | 成人免费影院 | 1000部多毛熟女毛茸茸 | 日日躁夜夜躁aaaabbbb | 亚洲区综合 | 日韩免费网站 | 久久婷婷五月国产色综合激情 | 亚洲一区二区不卡在线观看 | 亚洲免费av网站 | 我们俩电影网mp4动漫官网 | 中国色视频 | 97中文字幕在线观看 | 亚洲av无码一区二区乱子伦as | 国产激情无套内精对白视频 | 国产性在线 | 亚洲一级一区 | 日韩经典av | 国产视频你懂得 | 粉嫩av懂色av蜜臀av分享 | 国产精品香蕉国产 | 中国极品少妇videossexhd 就要干就要操 | 色日本在线| 麻豆91精品91久久久 | 中国女人毛片 | 国产精品主播在线 | 精品韩国一区二区三区 | 性欢交69精品久久久 | 日本少妇裸体做爰 | 国产女人18毛片水真多18精品 | 波多野结衣办公室双飞 | 91成人国产 | 一区二区不卡av | av男人在线| 亚洲一区二区三区电影在线观看 | 奇米影视av | 国产91香蕉 | 日韩视频一区在线 | 久久精品中文字幕 | 国产女人18毛片水真多18精品 | 嫩草网站入口 | 亚洲欧美日韩一区二区三区在线观看 | 亚洲国产私拍精品国模在线观看 | 69精品人妻一区二区三区 | 91精品推荐 | 亚洲精品国产手机 | 在线观看亚洲区 | 综合视频在线 | 久久久国产片 | 国产亚洲综合精品 | 五月激情婷婷在线 | 亚洲四虎av | 免看一级a毛片一片成人不卡 | 久久久久久久久久久国产精品 | 免费看女人裸体 | 青青免费在线视频 | 日本黄色一级视频 | 台湾佬中文字幕 | 色av资源| 91精品视频在线免费观看 | 在线免费观看污片 |