Servlet常用的監(jiān)聽器ServletContextAttributeListener
用來感知ServlerContext
對(duì)象屬性變化,比如添加或刪除屬性變化ServletContextListener
用來感知ServlerContext
對(duì)象的創(chuàng)建和銷毀的ServletRequestListener
可以用來監(jiān)聽感知ServletRequest
對(duì)象的創(chuàng)建和銷毀的ServletRequestAttributeListener
用來感知ServletRequest
屬性變化,如何添加或刪除屬性還是替換HttpSessionListener
監(jiān)聽session的變化,常用于統(tǒng)計(jì)在線人數(shù)HttpSessionAttributeListener
用來監(jiān)聽Session屬性變化HttpSessionBindingListener
用來監(jiān)聽把一個(gè)數(shù)據(jù)綁定到Session對(duì)象 感知監(jiān)聽器HttpSessionActivationListener
用來監(jiān)聽session綁定的對(duì)象鈍化(把對(duì)象持久化磁盤)
常用的有前6個(gè)
package com.sparrow.listener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* @Author: 訴衷情の麻雀
* @Description: 當(dāng)一個(gè)類實(shí)現(xiàn)了ServletContextListener 是一個(gè)監(jiān)聽器,該類可以監(jiān)聽的事件
* 由該類實(shí)現(xiàn)的監(jiān)聽接口決定 該類可以監(jiān)聽ServletContext的創(chuàng)建和銷毀
* 當(dāng)web應(yīng)用啟動(dòng)時(shí),就會(huì)產(chǎn)生ServletContextEvent事件,會(huì)調(diào)用監(jiān)聽器的對(duì)應(yīng)事件處理方法contextInitialized,同時(shí)會(huì)傳遞事件對(duì)象
* 我們可以通過ServletContextEvent事件對(duì)象,來獲取需要的信息,然后再進(jìn)行業(yè)務(wù)處理
* 需要在web.xml配置監(jiān)聽器這樣才能使tomcat知道,底層使用反射機(jī)制
* @DateTime: 2023/7/5 9:57
**/
public class SparrowServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext servletContext = sce.getServletContext();
System.out.println("SparrowServletContextListener監(jiān)聽到" + servletContext+ " 被創(chuàng)建...");
//如果我們獲取到ServletContext對(duì)象進(jìn)行業(yè)務(wù)處理
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
ServletContext servletContext = sce.getServletContext();
System.out.println("SparrowServletContextListener監(jiān)聽到" + servletContext+ " 被銷毀...");
//比如可以對(duì)servletContext數(shù)據(jù)進(jìn)行處理 或者日志的管理
System.out.println("進(jìn)行處理");
}
}
/**
* @Author: 訴衷情の麻雀
* @Description: TODO
* @DateTime: 2023/7/5 10:10
**/
public class SparrowServletContextAttributeListener implements ServletContextAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent scae) {
System.out.println("SparrowServletContextAttributeListener監(jiān)聽到"+ scae.getName());
}
@Override
public void attributeRemoved(ServletContextAttributeEvent scae) {
System.out.println("SparrowServletContextAttributeListener監(jiān)聽到:" + scae.getValue());
}
@Override
public void attributeReplaced(ServletContextAttributeEvent scae) {
}
}
ServletContextAttributeListener屬性監(jiān)聽器
package com.sparrow.listener;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
/**
* @Author: 訴衷情の麻雀
* @Description: TODO
* @DateTime: 2023/7/5 10:10
**/
public class SparrowServletContextAttributeListener implements ServletContextAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent scae) {
System.out.println("SparrowServletContextAttributeListener監(jiān)聽到添加屬性:"+ scae.getName()+"=" + scae.getValue());
}
@Override
public void attributeRemoved(ServletContextAttributeEvent scae) {
System.out.println("SparrowServletContextAttributeListener監(jiān)聽到刪除屬性:" + scae.getName() + "="+ scae.getValue());
}
@Override
public void attributeReplaced(ServletContextAttributeEvent scae) {
System.out.println("SparrowServletContextAttributeListener監(jiān)聽到修改/替換屬性:" + scae.getName() + "="+ scae.getValue());
}
}
配置一個(gè)HelloServlet
/**
* @Author: 訴衷情の麻雀
* @Description: TODO
* @DateTime: 2023/7/18 19:59
**/
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("helloServlet被調(diào)用了");
ServletContext servletContext = req.getServletContext();
servletContext.setAttribute("name", "訴衷情の麻雀");
servletContext.setAttribute("name", "訴衷情の麻雀");
servletContext.removeAttribute("name");
}
}
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.sparrow.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
HttpSessionListener
/**
* @Author: 訴衷情の麻雀
* @Description: TODO
* @DateTime: 2023/7/5 10:25
**/
public class SparrowHttpSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
HttpSession session = se.getSession();
//當(dāng)session創(chuàng)建時(shí)設(shè)置一個(gè)生命周期
session.setMaxInactiveInterval(30);
System.out.println("SparrowHttpSessionListener監(jiān)聽到session創(chuàng)建= " + session.getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
HttpSession session = se.getSession();
System.out.println("SparrowHttpSessionListener監(jiān)聽到session銷毀= " + session.getId());
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//獲取session
HttpSession session = req.getSession(); //如果沒有就創(chuàng)建
}
配置監(jiān)聽器
<!--配置監(jiān)聽器-->
<listener>
<listener-class>com.sparrow.listener.SparrowHttpSessionListener</listener-class>
</listener>
<listener>
<listener-class>com.sparrow.listener.SparrowServletContextListener</listener-class>
</listener>
<listener>
<listener-class>com.sparrow.listener.SparrowServletContextAttributeListener</listener-class>
</listener>
<listener>
<listener-class>com.sparrow.listener.SparrowRequestListener</listener-class>
</listener>
HttpSessionAttributeListener
package com.sparrow.listener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
/**
* @Author: 訴衷情の麻雀
* @Description: TODO
* @DateTime: 2023/7/18 20:26
**/
public class SparrowHttpSessionAttributeListener implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent se) {
System.out.println("SparrowHttpSessionAttributeListener 監(jiān)聽到session添加屬性了" + se.getName() + "=" + se.getValue() );
}
@Override
public void attributeRemoved(HttpSessionBindingEvent se) {
System.out.println("SparrowHttpSessionAttributeListener 監(jiān)聽到session刪除屬性了" + se.getName());
}
@Override
public void attributeReplaced(HttpSessionBindingEvent se) {
System.out.println("SparrowHttpSessionAttributeListener 監(jiān)聽到session修改屬性了" + se.getName() + "=" + se.getValue() );
}
}
ServletRequestListener監(jiān)聽器
作用:監(jiān)聽Request對(duì)象的創(chuàng)建和銷毀
常用于監(jiān)控某個(gè)IP訪問網(wǎng)站頻率/用戶訪問的頁面、資源(日志)
public class SparrowRequestListener implements ServletRequestListener {
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("監(jiān)聽到request對(duì)象創(chuàng)建");
ServletRequest servletRequest = sre.getServletRequest();
System.out.println("訪問IP=" + servletRequest.getRemoteAddr());
System.out.println("訪問的資源=" + ((HttpServletRequest) servletRequest).getRequestURL());
}
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("監(jiān)聽到request對(duì)象被銷毀");
}
}
文章來源:http://www.zghlxwxcb.cn/news/detail-581574.html
ServletRequestAttributeListener監(jiān)聽器
作用:監(jiān)聽Request屬性變化文章來源地址http://www.zghlxwxcb.cn/news/detail-581574.html
public class SparrowRequestAttributeListener implements ServletRequestAttributeListener {
@Override
public void attributeAdded(ServletRequestAttributeEvent srae) {
}
@Override
public void attributeRemoved(ServletRequestAttributeEvent srae) {
ServletRequestAttributeListener.super.attributeRemoved(srae);
}
@Override
public void attributeReplaced(ServletRequestAttributeEvent srae) {
ServletRequestAttributeListener.super.attributeReplaced(srae);
}
}
到了這里,關(guān)于Servlet的監(jiān)聽器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!