Filtro javaWeb - proceso de ejecución de filtro-filtro

Proceso de ejecución de filtro-filtro-filtro javaWeb

proceso de ejecución filtro-filtro

  • Cuando un estudiante ingresa al campus, primero se encontrará con el guardia de seguridad, y si el estudiante sale del campus, también se encontrará con el guardia de seguridad.
  • Proceso de ejecución de filtros
    • El motor de tomcat convierte la solicitud http en un objeto de solicitud y la respuesta http en un objeto de respuesta
    • Si la dirección cumple con las condiciones, la solicitud y la respuesta se pasarán al método doFilter
    • Páselo al método chain.doFilter (solicitud, respuesta)
    • Luego pase al método doGet o doPost, cuando el servlet haya completado tres cosas
    • Después de que doFilter ejecuta el código restante, la respuesta vuelve al navegador
  • Establecer la posición del código para la codificación
    • Configure la codificación de la solicitud antes de doFilter y configure la codificación de respuesta antes
      Inserte la descripción de la imagen aquí

## filtro: el orden de ejecución de los filtros

img

  • Si hay dos filtros que filtran las solicitudes, ¿cuál es el orden de ejecución?
    Primero Filter1, luego Filter2 y finalmente Servlet, el caso opuesto es cuando se devuelve la respuesta
  • ¿Qué configuración determina el orden de ejecución del filtro?

  • Desconfiguración
    Cuando hay varios filtros, se ejecutan en el orden de la primera letra de la clase de filtro

    AFilter primero, luego BFilter

  • configuración web.xml
    cuando una pluralidad de filtros, de acuerdo con web.xml se <filter-mapping></filter-mapping>disponen sucesivamente en la ejecución de la orden

## Caso de código

Un filtro:

package com.lbl.filter;

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

@WebFilter("/s2")
public class AFilter implements Filter {
    
    
    public void destroy() {
    
    
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    
    
        System.out.println("第1个过滤器收到请求");
        chain.doFilter(req, resp);
        System.out.println("第1个过滤器收到响应");
    }

    public void init(FilterConfig config) throws ServletException {
    
    

    }

}

BFilter

package com.lbl.filter;

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

@WebFilter("/s2")
public class BFilter implements Filter {
    
    
    public void destroy() {
    
    
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    
    
        System.out.println("第2个过滤器收到请求");
        chain.doFilter(req, resp);
        System.out.println("第2个过滤器收到响应");
    }

    public void init(FilterConfig config) throws ServletException {
    
    

    }

}

Demo02Servlet

package com.lbl.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("/s2")
public class Demo02Servlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        System.out.println("servlet执行了");
    }
}

resultado de ejecución:
Inserte la descripción de la imagen aquí

Comente @WebFilter, cambie a la configuración xml

OneFilter

package com.lbl.filter;

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

//@WebFilter("/s3")
public class OneFilter implements Filter {
    
    
    public void destroy() {
    
    
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    
    
        System.out.println("第one个过滤器收到请求");
        chain.doFilter(req, resp);
        System.out.println("第one个过滤器收到响应");
    }

    public void init(FilterConfig config) throws ServletException {
    
    

    }

}

TwoFilter

package com.lbl.filter;

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

//@WebFilter("/s3")
public class TwoFilter implements Filter {
    
    
    public void destroy() {
    
    
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    
    
        System.out.println("第two个过滤器收到请求");
        chain.doFilter(req, resp);
        System.out.println("第two个过滤器收到响应");
    }

    public void init(FilterConfig config) throws ServletException {
    
    

    }

}

Demo03Servlet

package com.lbl.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("/s3")
public class Demo03Servlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        System.out.println("Demo03Servlet....servlet执行了");
    }
}

Web.xml

<?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>Demo3Servlet</servlet-name>
        <servlet-class>com.lbl.servlet.Demo03Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Demo3Servlet</servlet-name>
        <url-pattern>/s3</url-pattern>
    </servlet-mapping>

    <filter>
        <filter-name>TwoFilter</filter-name>
        <filter-class>com.lbl.filter.TwoFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>TwoFilter</filter-name>
        <url-pattern>/s3</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>OneFilter</filter-name>
        <filter-class>com.lbl.filter.OneFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>OneFilter</filter-name>
        <url-pattern>/s3</url-pattern>
    </filter-mapping>
</web-app>

resultado de ejecución:

Inserte la descripción de la imagen aquí

ciclo de vida filtro-filtro (entender)

Hay 3 métodos para los filtros:

  • método init: el objeto de filtro se crea cuando se inicia el servidor
  • Método doFilter: siempre que la ruta de una solicitud sea la ruta configurada que satisface el filtro, el método doFilter del filtro se ejecutará una vez
  • método de destrucción: el filtro se destruye cuando se apaga el servidor

Supongo que te gusta

Origin blog.csdn.net/qq_37924905/article/details/108616779
Recomendado
Clasificación