[Servlet] 7: Das Prinzip und die Anwendung von Listenern und Filtern

Inhaltsverzeichnis

| Zuhörer

Grundlegende Übersicht über Zuhörer

ServletContextListener-Listener

ServletContextAttributeListener-Listener

Das Anwendungsszenario des Zuhörers

| filtern

Grundlegende Übersicht über Filter

Implementierungsschritte filtern

Anwendungsszenarien filtern


Dieser Artikel gehört zum dritten Teil des vollständigen Back-End-Notizsatzes

(Aktualisierung) [Erste Schritte mit dem hinteren Ende und Einstieg in den Boden! 】Java+Servlet+JDBC+SSM+SpringBoot+SpringCloud Basic Introduction_m0_57265007's Blog – Ein Artikel im CSDN-Blog, von den ersten Schritten mit dem Backend bis zum Einstieg in den Boden. Enthält Java Basic + Advanced, MySQL, JDBC, Servlet, SSM, SpringBoot, SpringCloud und Projektnotizen. https://blog.csdn.net/m0_57265007/article/details/127962617?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22 %3A%22127962617%22%2C%22source%22%3A%22m0_57265007%22%7D Ein Artikel, vom Backend-Eintrag bis zum Boden. Enthält Java Basic + Advanced, MySQL, JDBC, Servlet, SSM, SpringBoot, SpringCloud und Projektnotizen. https://blog.csdn.net/m0_57265007/article/details/127962617?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22 %3A%22127962617%22%2C%22source%22%3A%22m0_57265007%22%7D

| Zuhörer

Grundlegende Übersicht über Zuhörer

  • einführen

    • Der Listener ist eine Gruppe von Schnittstellen aus der Servlet-Spezifikation mit insgesamt 8 Schnittstellen. Das Paket servlet-api.jar ist in Tomcat vorhanden

    • Die Listener-Schnittstelle muss vom Entwickler selbst implementiert werden , und das vom HTTP-Server bereitgestellte JAR-Paket verfügt nicht über eine entsprechende Implementierungsklasse

    • Die Hauptfunktion des Listeners besteht darin, den [Zeitpunkt der Änderung des Lebenszyklus des Bereichsobjekts] und den [Änderungszeitpunkt der gemeinsam genutzten Daten des Bereichsobjekts] zu überwachen.

    • Später lernen wir die beiden wichtigsten Listener kennen: ServletContextListener, ServletContextAttributeListener

  • Rezension: Scope-Objekte

    • In der Servlet-Spezifikation wird davon ausgegangen, dass ein Objekt, das unter bestimmten Bedingungen ein Datenfreigabeschema zwischen zwei Servlets im Speicher des Servers bereitstellen kann, als [Bereichsobjekt] bezeichnet wird.

    • Es ist zu beachten, dass: Bereichsobjekt gemäß der Servlet-Spezifikation: Cookie existiert als Browser-Cache, nicht als Bereichsobjekt

    • Es gibt drei Bereichsobjekte: globales ServletContext-Bereichsobjekt, HttpSession-Sitzungsbereichsobjekt und HttpServletRequest-Anforderungsbereichsobjekt


ServletContextListener-Listener

Einführung

  • Rolle: Überwachen Sie legal den Moment, in dem das globale Bereichsobjekt ServletContext über diese Schnittstelle initialisiert und zerstört wird

  • Drei Schritte zur Entwicklung der ServletContextListener-Schnittstellenimplementierungsklasse

    1. Implementieren Sie die ServletContextListener-Schnittstelle

public class ListenerClass implements ServletContextListener
  1. .

  2. Schreiben Sie die Verarbeitungsmethoden für Listener-Abhörereignisse neu: contextInitialized, contextDestroyed

  3. Registrieren Sie die Implementierungsklasse der Listener-Schnittstelle beim HTTP-Server in der Datei web.xml

    <!--将监听器接口注册到Tomcat-->
    <listener>
        <listener-class>监听器类</listener-class>
    </listener>

Methode zur Verarbeitung von Hörereignissen:

public void contextInitlized();   //全局作用域对象被Http服务器初始化被调用
public void contextDestory();   //在全局作用域对象被Http服务器销毁时候触发调用

Beispiel

public class ListenerClass implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("全局作用域对象 ServletContext 被创建");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("全局作用域对象 ServletContext 被销毁");
    }
}

public class S1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>S1</servlet-name>
        <servlet-class>S1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>S1</servlet-name>
        <url-pattern>/S1</url-pattern>
    </servlet-mapping>

    <!--将监听器接口注册到Tomcat-->
    <listener>
        <listener-class>ListenerClass</listener-class>
    </listener>

</web-app>

 

 

ServletContextAttributeListener-Listener

Einführung

  • Rolle: Überwachen Sie über diese Schnittstelle legal den Zeitpunkt, zu dem sich die gemeinsam genutzten Daten des globalen Bereichsobjekts ServletContext ändern

  • ServletContextAttributeListener-Schnittstellenimplementierungsklassenentwicklung in drei Schritten

    1. Implementieren Sie die ServletContextListener-Schnittstelle

public class ListenerClass implements ServletContextAttributeListener

  1. Schreiben Sie den Listener neu, um auf Ereignisverarbeitungsmethoden zu hören: attributeAdded, attributeRemoved, attributeReplaced

  2. Registrieren Sie die Implementierungsklasse der Listener-Schnittstelle beim HTTP-Server in der Datei web.xml

Methode zur Verarbeitung von Hörereignissen:

public void contextAdd();   //在全局作用域对象添加共享数据
public void contextReplaced();   //在全局作用域对象更新共享数据
public void contextRemove();   //在全局作用域对象删除共享数据

Beispiel

public class ListenerClass2 implements ServletContextAttributeListener {
    @Override
    public void attributeAdded(ServletContextAttributeEvent scae) {
        System.out.println("检测到全局作用域对象数据有【新增】");
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent scae) {
        System.out.println("检测到全局作用域对象数据有【删除】");
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent scae) {
        System.out.println("检测到全局作用域对象数据有【修改】");
    }
}

 

public class S1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext application = req.getServletContext();
        application.setAttribute("key1",100);  //新增
        application.setAttribute("key1",200);  //更新
        application.removeAttribute("key1");   //删除
    }
}

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>S1</servlet-name>
        <servlet-class>S1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>S1</servlet-name>
        <url-pattern>/S1</url-pattern>
    </servlet-mapping>

    <!--将ListenerClass2监听器实现类注册到Tomcat-->
    <listener>
        <listener-class>ListenerClass2</listener-class>
    </listener>

</web-app>

 

 

Das Anwendungsszenario des Zuhörers

  • Mit dem ServletContextListener-Listener können Sie Code schreiben, der eine globale Initialisierung in der contextInitlized( )-Methode erfordert; Sie können Code schreiben, der eine Speicherfreigabe in der contextDestroy( )-Methode erfordert

  • Mit dem ServletContextAttributeListener-Listener können Sie Datenänderungen überwachen und entsprechende Verhaltensweisen schreiben


| filtern

Grundlegende Übersicht über Filter

  • einführen

    • Die Filterschnittstelle stammt von der Schnittstelle gemäß der Servlet-Spezifikation und ist im Paket servlet-api.jar in Tomcat vorhanden

    • Die Implementierungsklasse der Filterschnittstelle wird vom Entwickler geschrieben und der HTTP-Server ist nicht für deren Bereitstellung verantwortlich

    • Die Rolle des Filters : Bevor der HTTP-Server die Ressourcendatei aufruft, wird der HTTP-Server abgefangen

  • Konkrete Maßnahmen

    • Fangen Sie den HTTP-Server ab, helfen Sie dem HTTP-Server, die Legitimität der aktuellen Anfrage zu erkennen und geben Sie sie frei, wenn sie legal ist

    • Fangen Sie den HTTP-Server ab und führen Sie erweiterte Vorgänge für die aktuelle Anfrage aus


Implementierungsschritte filtern

  • Entwicklungsschritte der Filterschnittstellen-Implementierungsklasse: drei Schritte

    1. Erstellen Sie eine Java-Klasse, um die Filterschnittstelle zu implementieren (Hinweis: Es gibt viele Filter und wir möchten den Filter von Sevlet implementieren.)

    2. Überschreiben Sie die doFilter-Methode in der Filter-Schnittstelle

public class FilterClass implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        
    }
}

 3. web.xml registriert die Implementierungsklasse der Filterschnittstelle beim HTTP-Server

<filter-mapping>
    <filter-name>oneFilter</filter-name>
    <url-pattern>拦截地址</url-pattern>
</filter-mapping>

(Die Abfangadresse informiert Tomcat darüber, dass es OneFilter zum Filtern und Abfangen aufrufen muss, bevor es die Ressourcendatei aufruft.) Es gibt viele Möglichkeiten, die Abfangadresse zu schreiben, von denen einige unten aufgeführt sind:

<!--要求Tomcat在调用【某一个具体文件】之前,来调用OneFilter拦截-->
<url-pattern>/img/mm.jpg</url-pattern>

<!--要求Tomcat在调用【某一个文件夹下所有的资源文件】之前,来调用OneFilter拦截-->
<url-pattern>/img/*</url-pattern>

<!--要求Tomcat在调用【任意文件夹下某种类型文件】之前,来调用OneFilter拦截-->
<url-pattern>*.jpg</url-pattern>

<!--要求Tomcat在调用【网站中任意文件】时,来调用OneFilter拦截-->
<url-pattern>/*</url-pattern>

Anwendungsszenarien filtern

  • Fordern Sie Tomcat auf, OneFilter-Interception aufzurufen, bevor [eine bestimmte Datei] aufgerufen wird: Benutzerinformationen abrufen, Bedingungen beurteilen und dem Benutzer den Zugriff auf die Zieldatei verweigern, wenn die Bedingungen nicht erfüllt sind

 

Fordern Sie Tomcat auf, OneFilter-Interception aufzurufen, wenn [eine beliebige Datei auf der Website] aufgerufen wird: Benachrichtigen Sie das abgefangene Anforderungsobjekt, verwenden Sie den UTF-8-Zeichensatz für die Codierung (reduzieren Sie die Codekopplung).

 

Fordern Sie Tomcat auf, OneFilter Interception aufzurufen, wenn [eine beliebige Datei auf der Website] aufgerufen wird: Verhindern Sie böswillige Anmeldungen (keine Anmeldung ohne HttpSession, nur Registrierung).

 

Ermöglichen Sie die bedingungslose Freigabe von Seiten, die sich auf öffentliche Seiten beziehen (d. h. der Zugriff ist ohne Anmeldung oder ohne HttpSession möglich).

 

 

Je suppose que tu aimes

Origine blog.csdn.net/m0_57265007/article/details/128006107
conseillé
Classement