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
## filtro: el orden de ejecución de los filtros
- 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 filtroAFilter 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:
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:
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