Servlet notes-JavaWeb tres componentes principales Servlet, Filter, Listener

Tres componentes principales de JavaWeb

Servlet (mencionado antes)

Filtrar

concepto

Al acceder a los recursos del servidor, el filtro puede interceptar la solicitud y realizar algunas funciones especiales. Por ejemplo, puede usar filtros para establecer códigos de manera uniforme para las solicitudes, realizar la verificación de inicio de sesión y filtrar palabras confidenciales. Los filtros se utilizan generalmente para completar algunas funciones comunes

Inicio rápido

Pasos para escribir Filtro

  1. Definir una clase para implementar la interfaz de filtro

  2. Método de interfaz de reescritura

  3. Configurar filtro (configurar principalmente la ruta de interceptación, como /*interceptar todas las solicitudes)

    1. configuración web.xml
    2. Configuración de anotaciones @WebFilter
  4. Código

    public class LogFilter implements Filter {
          
          
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
          
          
            System.out.println("init...");
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
          
          
            HttpServletRequest request = (HttpServletRequest) servletRequest; 
            System.out.println("Calling -> " + request.getRequestURL());
            //放行
            filterChain.doFilter(servletRequest,servletResponse);
            System.out.println("Finished -> " + request.getRequestURL());
        }
    
        @Override
        public void destroy() {
          
          
            System.out.println("destroy...");
        }
    }
    
Detalles del filtro
  1. Proceso de ejecución de filtros (similar a AOP)

  2. Ciclo de vida del filtro

    1. init (): después de que se inicie el servidor, cree un objeto Filter, llame a init y ejecútelo solo una vez
    2. doFilter (): cada vez que se intercepta una solicitud, se ejecuta doFilter, que se ejecutará varias veces
    3. destruir (): el servidor se cierra normalmente, llama a destruir, destruye el objeto Filtro y ejecútalo solo una vez
  3. Configuración detallada

    1. Configuración de la ruta de intercepción

      1. /index.jsp Bloquear recursos específicos
      2. /login/* Interceptar cierto tipo de recurso
      3. *.jsp Interceptar una determinada clase
      4. /* Bloquear todo
      	<filter>
              <filter-name>logFilter</filter-name>
              <filter-class>com.yogurt.filter.LogFilter</filter-class>
          </filter>
          
          <filter-mapping>
              <filter-name>logFilter</filter-name>
              <url-pattern>/*</url-pattern>
          </filter-mapping>
      
    2. Configuración del modo de interceptación

      1. El método se refiere a la forma en que se accede al recurso, como el navegador que solicita el acceso directamente o el servidor que reenvía el acceso. Si se especifica este parámetro, Filter solo realizará la intercepción cuando se satisfaga el patrón de URL y el modo de solicitud cumpla con el valor especificado de este parámetro.

      2. Simplemente configure el atributo dispatcherType

        1. SOLICITAR navegador solicita acceso directamente (valor predeterminado)
        2. Cuando el servidor FORWARD reenvía el acceso
        3. INCLUDE contiene acceso
        4. ERROR recurso de salto de error
        5. Acceso asincrónico ASYNC a los recursos
      3. configuración web.xml

        	<filter-mapping>
                <filter-name>logFilter</filter-name>
                <url-pattern>/*</url-pattern>
                <dispatcher>REQUEST</dispatcher>
            </filter-mapping>
        
      4. Configuración de anotaciones

        @WebFilter(urlPatterns = "/*",dispatcherTypes = DispatcherType.FORWARD)
        
        package javax.servlet;
        public enum DispatcherType {
                  
                  
            FORWARD,
            INCLUDE,
            REQUEST,
            ASYNC,
            ERROR;
            private DispatcherType() {
                  
                  
            }
        }
        
  4. Cadena de filtros

    Se pueden configurar varios filtros y cada filtro se ejecuta en cadena. La prueba encontró que la inicialización del filtro se inicializa de acuerdo con el nombre del diccionario del filtro, ya sea una configuración web.xml o una configuración de anotación, configuración web.xml, independientemente <filter>de la ubicación de la etiqueta.

    1. Orden de ejecución

      1. Configuración de anotación:

        El valor predeterminado es ejecutar cada filtro en secuencia de acuerdo con el orden de cadena del nombre del filtro

        Si hay 2 filtros, AFilter y BFilter, AFilter se ejecutará primero y BFilter se ejecutará más tarde

      2. Configuración web.xml:

        <filter-mapping>La etiqueta se ejecuta primero en el filtro frontal y la configuración se ejecuta más tarde

        Ejemplo

        	<!-- 则会先执行cidFilter -->
        	<filter-mapping>
                <filter-name>cidFilter</filter-name>
                <url-pattern>/*</url-pattern>
            </filter-mapping>
        
            <filter-mapping>
                <filter-name>logFilter</filter-name>
                <url-pattern>/*</url-pattern>
            </filter-mapping>
        
Caja de filtro
  1. Autenticación de inicio de sesión (el contenido más básico del marco de control de permisos)

    El filtro verifica si la sesión contiene información del usuario, si la tiene, significa que el usuario ha iniciado sesión y lo ha dejado ir; de lo contrario, le pide al usuario que no inicie sesión y salta a la página de inicio de sesión.

    Nota: Al configurar la ruta de interceptación de Filter, es posible que deba prestar atención a la liberación de recursos estáticos.

    Ideas:

    • Determine si es un recurso relacionado con el inicio de sesión

      • Si. Se lanza directamente. (Por ejemplo, al solicitar una página de inicio de sesión, es una operación de inicio de sesión, por lo que no es interceptada)

        (Tenga en cuenta que los recursos estáticos, como css / js / captchas y otros recursos también deben liberarse. De lo contrario, la página será anormal)

      • No, interceptar y determinar si el usuario está conectado

    • Determine si el usuario está conectado (a juzgar por los datos de la sesión)

      • Si. Entonces suelta
      • No, si no ha iniciado sesión, saltará a la página de inicio de sesión y le pedirá al usuario que inicie sesión. Después de que el usuario inicie sesión, la información del usuario que inició sesión se almacenará en la sesión.
  2. Filtrado de palabras sensibles

    1. Tabla de datos de palabras sensibles
    2. Si hay palabras sensibles en los parámetros de entrada solicitados, reemplácelos con ***
    3. Debido a que la solicitud tiene solo un getParameter para obtener parámetros de solicitud, pero no existe un método como setParameter para modificar los parámetros en la solicitud, es necesario mejorar el método getParameter del objeto de solicitud (AOP), generar un nuevo objeto de solicitud, y pasarlo

    Necesita mejorar el objeto de solicitud, puede usar el proxy dinámico JDK

Oyente

  1. Concepto: escucha de eventos

  2. Mecanismo de seguimiento de eventos

    1. Evento: una cosa, como un evento de clic
    2. Origen del evento: donde ocurrió el evento
    3. Oyente: un objeto
    4. Registre el oyente: vincule el evento, la fuente del evento y el oyente. Cuando ocurre un evento en la fuente del evento, se ejecuta el código de escucha
  3. ServletContextListener

    1. Método de inclusión

      void contextInitialized(ServletContextEvent sce)

      Una vez creado el objeto ServletContext, llame a este método

      void contextDestroyed(ServletContextEvent sce)

      Antes de que se destruya el objeto ServletContext, llame a este método

    2. Pasos para implementar un Listener para monitorear Servlet

      1. Definir una clase que implemente la interfaz ServletContextListener

        @WebListener
        public class YogurtListener implements ServletContextListener {
                  
                  
        	@Override
        	public void contextInitialized(ServletContextEvent sce) {
                  
                  
        		//可以加载一些初始资源
        		ServletContext servletContext = sce.getServletContext();
        		String location = servletContext.getInitParameter("location");
        		System.out.println(location);
        		System.out.println("启动拉");
        	}
        
        	@Override
        	public void contextDestroyed(ServletContextEvent servletContextEvent) {
                  
                  
        
        	}
        }
        
      2. Configuración

        1. configuración web.xml

          <<listener>
                  <listener-class>com.yogurt.listener.YogurtListener</listener-class>
              </listener>
          

          Puede configurar el contextParam en web.xml y luego monitorear el inicio del Servlet para obtener estos parámetros para cargar algunos recursos cuando se inicia el Servlet (anteriormente, al escribir a mano Spring, este método se usaba para inicializar el contenedor Spring)

          <context-param>
                  <param-name>location</param-name>
                  <param-value>classpath:yogurt.properties</param-value>
              </context-param>
          
        2. Configuración de anotaciones

          En la clase Listener anotada directamente @WebListeneren

Supongo que te gusta

Origin blog.csdn.net/vcj1009784814/article/details/106107400
Recomendado
Clasificación