SpringBoot registriert die Webkomponente

Inhaltsverzeichnis

Vorwort

1. Registrieren Sie die Servlet-Komponente

1.1 Verwenden Sie SpringBoot-Annotationen und erben Sie die HttpServet-Klassenregistrierung

1.2 Registrieren Sie sich, indem Sie die HttpServet-Klasse erben und die Konfigurationsklasse hinzufügen

2. Registrieren Sie die Listener-Komponente

2.1 Verwenden Sie die SpringBoot-Annotation und implementieren Sie die ServletContextListener-Schnittstellenregistrierung

2.2 ServletContextListener-Schnittstelle und Konfigurationsklasse für die Registrierung

3. Registrieren Sie die Filterkomponente

3.1 Verwenden Sie SpringBoot-Annotationen, um die Registrierung der Filterschnittstelle zu implementieren

3.2 Registrieren Sie sich durch Implementierung der Filterschnittstelle und der Konfigurationsklasse.


Vorwort

Servlets sind die Grundlage von Java-Webanwendungen und stellen den Mechanismus zur Bearbeitung von Clientanfragen bereit. Die drei Hauptkomponenten von Servlet beziehen sich auf Servlet, Filter und Listener, die die Kernkomponenten von Java-Webanwendungen sind.

  1. Servlet: Servlet ist die Grundlage von Java-Webanwendungen. Es handelt sich um eine Java-Klasse, die zur Verarbeitung von Client-Anfragen und zur Generierung von Antworten verwendet wird. Servlets können über Annotationen oder web.xml-Dateien konfiguriert werden und werden normalerweise zur Verarbeitung von HTTP-Anfragen und -Antworten verwendet.
  2. Filter: Filter ist eine Java-Klasse, die zum Abfangen und Verarbeiten von Client-Anfragen und -Antworten verwendet wird. Der Filter kann Vorverarbeitungs- und Nachverarbeitungsvorgänge durchführen, bevor die Anforderung das Servlet erreicht oder bevor die Antwort an den Client zurückgegeben wird, z. B. Überprüfung der Benutzeridentität, Kodierung und Dekodierung, Komprimierung und Dekomprimierung usw.
  3. Listener: Listener ist eine Java-Klasse, die zum Abhören von Ereignissen in einer Webanwendung und zum Ausführen entsprechender Aktionen verwendet wird, wenn das Ereignis auftritt. Der Listener kann über Anmerkungen oder web.xml-Dateien konfiguriert werden. Er wird normalerweise zur Verarbeitung von Ereignissen wie Anwendungsstart, -stopp, Sitzungserstellung und -zerstörung verwendet.

Kurz gesagt, die drei Hauptkomponenten von Servlet stellen die Kernkomponenten von Java-Webanwendungen dar. Sie werden zum Verarbeiten von Anforderungen, zum Abfangen von Anforderungen und zum Abhören von Ereignissen verwendet, wodurch eine vollständige Java-Webanwendung realisiert wird.

1. Registrieren Sie die Servlet-Komponente

Da das SpringBoot-Projekt keine web.xml-Datei hat, können Webkomponenten nicht in web.xml registriert werden. SpringBoot verfügt über eine eigene Methode zum Registrieren von Webkomponenten.

1.1 Verwenden Sie SpringBoot-Annotationen und erben Sie die HttpServet-Klassenregistrierung

Um ein Servlet zu schreiben, besteht der erste Schritt darin, die Annotation @WebServlet hinzuzufügen. Der Code lautet wie folgt:

package com.example.demo.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/first")
public class FirstServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("First Servlet......");
        super.doGet(req, resp);
    }
}

Die Startklasse fügt die Annotation @ServletComponentScan hinzu, die zum Scannen von Webkomponenten verwendet wird.

OK, führen Sie es direkt aus, um den Effekt zu sehen: Besuchen Sie: http://localhost:8080/first

Es kann direkt ausgedruckt werden.

1.2 Registrieren Sie sich, indem Sie die HttpServet-Klasse erben und die Konfigurationsklasse hinzufügen

Ok, als nächstes erklären wir die zweite Registrierungsmethode, die durch Erben der HttpServet-Klasse registriert wird. Der Code lautet wie folgt:

package com.example.demo.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class SecondServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Second Servlet........");
        super.doGet(req, resp);
    }
}

Hier müssen wir eine neue Konfigurationsklasse erstellen, um das Servlet in den Spring-Container zu laden. Der Code der Konfigurationsklasse lautet wie folgt

package com.example.demo.config;

import com.example.demo.servlet.SecondServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ServletConfig {
    // ServletRegistrationBean可以注册Servlet组件,将其放入Spring容器中即可注册Servlet
    @Bean
    public ServletRegistrationBean getServletRegistrationBean(){
        // 注册Servlet组件
        ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());
        // 将Servlet组件添加访问路径
        bean.addUrlMappings("/second");
        return bean;
    }
}

OK, dann klicken wir auf Ausführen und greifen direkt auf http://localhost:8080/second zu 

Dies zeigt, dass beide Registrierungsmethoden verfügbar sind. 

2. Registrieren Sie die Listener-Komponente

2.1 Verwenden Sie die SpringBoot-Annotation und implementieren Sie die ServletContextListener-Schnittstellenregistrierung

Das Prinzip ist das gleiche wie oben, es wird jedoch direkt mit Anmerkungen versehen, ohne dass die Klasse konfiguriert werden muss. Der Code lautet wie folgt

package com.example.demo.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener()
public class FirstListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("FirsListener.........");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        ServletContextListener.super.contextDestroyed(sce);
    }
}

Wenn wir das Projekt zu diesem Zeitpunkt direkt ausführen, wird der obige Satz gedruckt. Als Nächstes führen wir das Projekt direkt aus, um zu sehen, ob es gedruckt wird.

Zeigen Sie, dass diese Methode machbar ist,

2.2 ServletContextListener-Schnittstelle und Konfigurationsklasse für die Registrierung

Ebenso entfernen wir die Anmerkungen und verwenden die Konfigurationsklasse zur Registrierung. Der Code lautet wie folgt:

package com.example.demo.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class SecondListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("Second Listener...........");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        ServletContextListener.super.contextDestroyed(sce);
    }
}

Der Konfigurationsklassencode lautet wie folgt:

package com.example.demo.config;


import com.example.demo.listener.SecondListener;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ListenerConfig {
    // ServletRegistrationBean可以注册Servlet组件,将其放入Spring容器中即可注册Servlet
    @Bean
    public ServletListenerRegistrationBean getServletListenerRegistrationBean(){
        // 注册Listener组件
        ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean(new SecondListener());
        return bean;
    }
}

 Führen Sie es dann direkt aus, um die Ergebnisse anzuzeigen.

Okay, es gibt auch kein Problem. 

3. Registrieren Sie die Filterkomponente

3.1 Verwenden Sie SpringBoot-Annotationen, um die Registrierung der Filterschnittstelle zu implementieren

Wie oben, der Code lautet wie folgt:

package com.example.demo.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
import java.util.Scanner;

//@WebFilter("/first")
public class FirstServletFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("进入First Filter");
        Scanner scanner = new Scanner(System.in);
        boolean flag = scanner.nextBoolean();
        while(!flag){
            System.out.println("要输入true才放行!!!");
            flag = scanner.nextBoolean();
        }
        filterChain.doFilter(servletRequest,servletResponse);
        scanner.close();
    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}

Wenn wir hier auf /frist zugreifen, müssen wir vor der Freigabe true eingeben, um zu sehen, ob die Filterung erfolgreich ist. 

OK, hier war es erfolgreich und der gleiche Vorgang wird als Nächstes durchgeführt. 

3.2 Registrieren Sie sich durch Implementierung der Filterschnittstelle und der Konfigurationsklasse.

Code wie folgt anzeigen:

package com.example.demo.filter;

import javax.servlet.*;
import java.io.IOException;
import java.util.Scanner;

public class SecondFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("进入Second Filter");
        Scanner scanner = new Scanner(System.in);
        boolean flag = scanner.nextBoolean();
        while(!flag){
            System.out.println("要输入true才可以放行!!!");
            flag = scanner.nextBoolean();
        }
        filterChain.doFilter(servletRequest,servletResponse);
        scanner.close();
    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}

Der Konfigurationsklassencode lautet wie folgt:

package com.example.demo.config;

import com.example.demo.filter.SecondFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FilterConfig {
    // ServletRegistrationBean可以注册Servlet组件,将其放入Spring容器中即可注册Servlet
    @Bean
    public FilterRegistrationBean getFilterRegistrationBean (){
        // 注册filter组件
        FilterRegistrationBean bean = new FilterRegistrationBean(new SecondFilter());
        // 添加过滤路径
        bean.addUrlPatterns("/second");
        return bean;
    }
}

Wenn wir hier auf /second zugreifen, müssen wir vor der Freigabe ebenfalls true eingeben, um zu sehen, ob die Filterung erfolgreich ist.

OK, hier wurde es erfolgreich umgesetzt! !

おすすめ

転載: blog.csdn.net/qq_53317005/article/details/133140357