Resumen de puntos de conocimiento de JavaWeb y Tomcat

1. servlet

1.1 principio de ejecución del servlet

  1. Cuando el servidor recibe la solicitud del navegador del cliente, analizará la ruta URL de la solicitud y obtendrá la ruta del recurso del servlet al que se accede.

  1. Busque en el archivo web.xml para ver si hay un contenido del cuerpo de la etiqueta <url-pattern> correspondiente. Si es así, busque el nombre completo de la clase <servlet-class> correspondiente. El siguiente es el formato web.xml:

<!--配置Servlet -->
<servlet>
    <servlet-name>demo1</servlet-name>
    <servlet-class>web.servlet.ServletDemo1</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>demo1</servlet-name>
    <url-pattern>/demo1</url-pattern>
</servlet-mapping>
  1. Tomcat cargará el archivo de código de bytes en la memoria y creará su objeto.

  1. Llame a sus métodos (init, service, destroy, etc.)

1.2 ciclo de vida del servlet

  1. Creado: ejecuta el método init, solo una vez

  1. ¿Cuándo se crea el Servlet?
  1. De forma predeterminada, se crea un servlet la primera vez que se accede a él.

  1. ¿Cómo configurar el tiempo de creación de la ejecución del Servlet?
  1. Configurar bajo la etiqueta <servlet>

  1. Cuando acceda por primera vez, cree

  • El valor de <load-on-startup> es un número negativo

  1. Cuando se inicie el servidor, cree

  • El valor de <load-on-startup> es 0 o un entero positivo

  1. El método init de Servlet solo se ejecuta una vez, lo que significa que un Servlet solo tiene un objeto en la memoria y el Servlet es un singleton .
  • Cuando varios usuarios acceden a él al mismo tiempo, puede haber problemas de seguridad de los subprocesos.

  • Solución: intente no definir variables miembro en Servlet. Incluso si las variables miembro están definidas, no modifique el valor.

  1. Proporcionar servicios: ejecutar el método de servicio varias veces

  • Cada vez que se accede al Servlet, se llamará una vez al método de Servicio.

  1. Destruido: ejecuta el método de destrucción solo una vez

  • Se ejecuta cuando se destruye el Servlet. Cuando se apaga el servidor, el servlet se destruye

  • El método de destrucción solo se ejecutará cuando el servidor se apague normalmente.

  • El método de destrucción se ejecuta antes de que y generalmente se usa para liberar recursos.

1.3 Configuración de anotaciones de servlet3.0

  1. beneficio

  • Admite configuración de anotaciones. No es necesario web.xml.

  1. paso

1. Cree un proyecto JavaEE y seleccione Servlet versión 3.0 o superior. No necesita crear web.xml
2. Defina una clase para implementar la interfaz de Servlet
3. Anule el método
4. Utilice la anotación @WebServlet en la clase para configurar it
* @WebServlet("Ruta del recurso")

1.4 arquitectura de servlet

Servlet - interfaz
|
GenericServlet - clase abstracta
|
HttpServlet - clase abstracta
  1. Servlet genérico

  • Los otros métodos en la interfaz de Servlet se implementan como implementaciones vacías predeterminadas y solo el método service() se usa como abstracción. Al definir una clase de Servlet en el futuro, puede heredar GenericServlet e implementar el método service().

  1. HttpServlet (el uso más importante)

  • Definición: una encapsulación del protocolo http para simplificar las operaciones

  • paso

  1. Definir una clase que herede HttpServlet

  1. Anular los métodos doGet/doPost


2.HTTP

2.1 Formato de solicitud de datos

  1. línea de solicitud

Método de solicitud

URL de solicitud

protocolo de solicitud

/Versión

CONSEGUIR

/iniciar sesión.html

HTTP

/1.1

  • Método de solicitud:

  • El protocolo HTTP tiene 7 métodos de solicitud y hay 2 de uso común.

  1. CONSEGUIR:

  1. Los parámetros de solicitud se encuentran en la línea de solicitud , después de la URL.

  1. La longitud de la URL es limitada.

  1. No muy seguro

  1. CORREO:

  1. Los parámetros de la solicitud están en el cuerpo de la solicitud.

  1. No hay límite para la longitud de la URL solicitada.

  1. relativamente seguro

  1. Encabezado de solicitud: el navegador del cliente le dice al servidor cierta información

  • Nombre del encabezado de solicitud: valor del encabezado de solicitud

  • Encabezados de solicitud comunes:

  1. Agente de usuario: el navegador le dice al servidor que estoy accediendo a la información de la versión del navegador que está utilizando.

  • La información del encabezado se puede obtener del lado del servidor para resolver problemas de compatibilidad del navegador.

  1. Referencia: http://localhost/login.html

  • Dígale al servidor, ¿de dónde vengo (la solicitud actual)?

  1. efecto:

  1. Anti-enlace directo;

  1. trabajo de encuesta de cantidad;

  1. Solicitar línea en blanco

La línea en blanco se utiliza para separar el encabezado de la solicitud y el cuerpo de la solicitud POST.

  1. Cuerpo de la solicitud (texto):

Encapsula los parámetros de solicitud del mensaje de solicitud POST.

2.2 Formato de datos del mensaje de respuesta

  1. línea de respuesta

  • Composición: protocolo/versión código de estado de respuesta descripción del código de estado

  • Código de estado de respuesta: el servidor le informa al navegador del cliente el estado de esta solicitud y respuesta.

  • Los códigos de estado son todos de 3 dígitos.

  • Clasificación:

  1. 1xx: El servidor recibe el mensaje del cliente, pero no lo acepta, luego de esperar un tiempo envía un código multiestado 1xx.

  1. 2xx: Éxito. Representantes: 200

  1. 3xx: Redirección. Representante: 302 (redireccionamiento), 304 (caché de acceso)

  1. 4xx: error del cliente.

  • representar:

  1. 404 (La ruta de solicitud no tiene un recurso correspondiente)

  1. 405: El método de solicitud no tiene un método doXxx correspondiente

  1. 5xx: error del lado del servidor. Representante: 500 (se produjo una excepción dentro del servidor)

  1. Encabezado de respuesta:

  • Formato: nombre del encabezado: valor

  • Encabezados de respuesta comunes:

  1. Tipo de contenido: el servidor le dice al cliente el formato de datos y el formato de codificación de este cuerpo de respuesta.

  1. Disposición de contenido: el servidor le dice al cliente en qué formato abrir los datos del cuerpo de la respuesta.

  • valor:

  1. en línea: valor predeterminado, abierto dentro de la página actual

  1. adjunto;nombre de archivo=xxx: abre el cuerpo de la respuesta como un archivo adjunto. Descargar Documento

  1. Responder a líneas vacías

  1. Cuerpo de respuesta: datos transmitidos


3. Solicitud y respuesta

3.1 Solicitud

3.1.1 Arquitectura de herencia

ServletRequest -- Interfaz
| Hereda
HttpServletRequest -- Interfaz
| Implementa
la clase org.apache.catalina.connector.RequestFacade (tomcat)

3.1.2 Función

  1. Obtener datos del mensaje de solicitud
  1. Obtener datos de la fila de solicitud

  1. Obtener método de solicitud

String getMethod()  
  1. Obtener directorio virtual

String getContextPath()
  1. Obtener la ruta del servlet

String getServletPath()
  1. Obtener parámetros de solicitud en el método get

String getQueryString()
  1. Obtener URI de solicitud

String getRequestURI()
StringBuffer getRequestURL()                 
  1. Obtener protocolo y versión: HTTP/1.1

String getProtocol()
  1. Obtenga la dirección IP del cliente:

String getRemoteAddr()
  1. Obtener datos del encabezado de la solicitud

  1. Obtenga el valor del encabezado de la solicitud por el nombre del encabezado de la solicitud

String getHeader(String name)
  1. Obtener todos los nombres de encabezados de solicitud

Enumeration<String> getHeaderNames()
  1. Obtener datos del cuerpo de la solicitud

  • Nota : Solo el método de solicitud POST tiene un cuerpo de solicitud, y los parámetros de solicitud de la solicitud POST están encapsulados en el cuerpo de la solicitud.

  • paso:

1. Obtenga el objeto de transmisión

BufferedReader getReader()     //获取字符输入流,只能操作字符数据
ServletInputStream getInputStream()     //获取字节输入流,可以操作所有类型数据

2. Obtener datos del objeto de flujo.

  1. Otras funciones
  1. Forma común de obtener parámetros de solicitud

  • Nota: Independientemente del método de solicitud de obtención o publicación, puede utilizar los siguientes métodos para obtener los parámetros de la solicitud.

String getParameter(String name)     //根据参数名称获取参数值    
String[] getParameterValues(String name)     //根据参数名称获取参数值的数组 
Enumeration<String> getParameterNames()     //获取所有请求的参数名称
Map<String,String[]> getParameterMap()     //获取所有参数的map集合
  • Problema de código confuso: antes de obtener los parámetros, configure la codificación de la solicitud request.setCharacterEncoding("utf-8");

  1. Solicitar reenvío

  1. paso:

  1. Obtenga el objeto reenviador de solicitudes a través del objeto de solicitud:

RequestDispatcher getRequestDispatcher(String path)
  1. Utilice el objeto RequestDispatcher para reenviar:

requestDispatcher.forward(ServletRequest request, ServletResponse response) 
  1. Datos compartidos:

  • Dominio de solicitud : representa el alcance de una solicitud, generalmente utilizado para compartir datos entre múltiples recursos para el reenvío de solicitudes.

  • Algunos métodos:

void setAttribute(String name,Object obj) //存储数据
Object getAttitude(String name) //通过键获取值
void removeAttribute(String name) //通过键移除键值对

3.2 Respuesta

  • Función

  1. Establecer línea de respuesta

  • Formato: HTTP/1.1 200 bien

  • Establecer código de estado: setStatus(int sc)

  1. Establecer encabezado de respuesta: setHeader (nombre de cadena, valor de cadena)

  1. Establecer el cuerpo de la respuesta:

  • Pasos de uso:

  1. Obtener flujo de salida

  1. Flujo de salida de caracteres: PrintWriter getWriter()

  1. Flujo de salida de bytes: ServletOutputStream getOutputStream()

  1. Utilice un flujo de salida para enviar datos al navegador del cliente

  1. Redirigir:

response.sendRedirect("/demo/responseDemo2")

3.3 La diferencia entre reenvío y redirección

Esta publicación de blog y detalles:

¿Qué es el reenvío y la redirección? Redirección y reenvío_Shiji es el blog-CSDN de Null


4. Objeto ServletContext

4.1 Concepto

Representa la aplicación web completa y puede comunicarse con el contenedor del programa (servidor).

4.2 Obtener

  1. Obtenido a través del objeto de solicitud.

  • request.getServletContext();

  1. Obtenido a través de HttpServlet

  • this.getServletContext();

4.3 Función

  1. Obtenga el tipo MIME:

  • Tipo MIME: un tipo de datos de archivo definido durante la comunicación por Internet.

  • Formato: texto grande/texto pequeño/imagen html/jpeg

  • Obtener: cadena getMimeType (archivo de cadena)

  1. Objetos de dominio: datos compartidos

  • setAttribute (nombre de cadena, valor del objeto)

  • getAttribute(nombre de cadena)

  • eliminarAtributo(nombre de cadena)

  • Alcance del objeto ServletContext: datos solicitados por todos los usuarios

  1. Obtenga la ruta real (servidor) del archivo

  • 方法:String getRealPath(Ruta de cadena)

String b = context.getRealPath("/b.txt");//web目录下资源访问
System.out.println(b);
String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问
System.out.println(c);
String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的资源访问
System.out.println(a);

5. Cookies y sesiones

5.1 galleta

5.1.1 Cómo utilizar cookies

  1. Crear objeto Cookie y vincular datos

Cookie cookie = new Cookie(String name, String value);
  1. Enviar objeto cookie

response.addCookie(Cookie cookie) 
  1. Obtener cookies y obtener datos

Cookie[] cookies = request.getCookies()  

5.1.2 ¿Cuál es el principio de implementación?

Implementado en base a la cookie configurada del encabezado de respuesta y la cookie del encabezado de solicitud

5.1.3 Preguntas frecuentes

  1. ¿Se pueden enviar varias cookies a la vez?
  • Puede crear varios objetos Cookie y utilizar la respuesta para llamar al método addCookie varias veces para enviar cookies.

  1. ¿Cuánto tiempo se almacenan las cookies en el navegador?
  1. De forma predeterminada, los datos de las cookies se destruyen cuando se cierra el navegador.

  1. Almacenamiento persistente:

  • setMaxAge(int segundos)

  1. Número positivo: escribe datos de cookies en un archivo en el disco duro. Almacenamiento persistente. Y especifique el tiempo de supervivencia de la cookie. Una vez transcurrido el tiempo, el archivo de cookie caducará automáticamente.

  1. Número negativo: valor predeterminado

  1. Cero: eliminar información de cookies

  1. ¿Pueden las cookies almacenar caracteres chinos?
  • Antes de Tomcat 8, los datos chinos no se podían almacenar directamente en cookies. Los datos chinos deben transcodificarse; normalmente se utiliza codificación URL (%E3).

  • Después de Tomcat 8, las cookies admiten datos chinos. Los caracteres especiales aún no son compatibles. Se recomienda utilizar codificación de URL para almacenamiento y decodificación de URL para análisis.

  1. ¿Problema al compartir cookies?
  1. Suponiendo que se implementen varios proyectos web en un servidor Tomcat, ¿se pueden compartir cookies entre estos proyectos web?

  • Las cookies no se pueden compartir de forma predeterminada

  • setPath (ruta de cadena): establece el rango de adquisición de cookies. De forma predeterminada, está configurado el directorio virtual actual. Si desea compartir, puede establecer la ruta en "/"

  1. ¿Problema al compartir cookies entre diferentes servidores Tomcat?

  • setDomain (ruta de cadena): si el nombre de dominio de primer nivel está configurado para ser el mismo, las cookies se pueden compartir entre varios servidores.

  • setDomain(".baidu.com"), luego se pueden compartir las cookies en tieba.baidu.com y news.baidu.com

5.1.4 Características y funciones de las cookies

  1. La cookie almacena datos en el navegador del cliente.

  1. El navegador tiene un límite en el tamaño de una sola cookie (4kb) y un límite en el número total de cookies bajo el mismo nombre de dominio (20).

  1. efecto:

  1. Las cookies se utilizan generalmente para almacenar pequeñas cantidades de datos menos confidenciales.

  1. Completar la identificación del servidor del cliente sin iniciar sesión

5.2 sesión

5.2.1 Cómo utilizar la sesión

  1. Obtenga el objeto HttpSession:

HttpSession session = request.getSession();
  1. Utilice el objeto HttpSession:

Object getAttribute(String name)  
void setAttribute(String name, Object value)
void removeAttribute(String name)  

Nota: La implementación de Session depende de Cookie.

5.2.2 Preguntas frecuentes

  1. Cuando se cierra el cliente el servidor no se cierra ¿Las sesiones obtenidas son dos veces iguales?

Por defecto, no.

Si la necesidad es la misma, puede crear una cookie con la clave JSESSIONID, establecer el tiempo máximo de supervivencia y hacer que la cookie persista.

Cookie c = new Cookie("JSESSIONID",session.getId());
c.setMaxAge(60*60);
response.addCookie(c);
  1. Si el cliente no está cerrado y el servidor está cerrado, ¿las sesiones obtenidas son dos veces iguales?

No es el mismo, pero asegúrate de que no se pierdan los datos. Tomcat completa automáticamente las siguientes tareas

  • Pasivación de sesión:

  • Antes de que el servidor se apague correctamente, serialice el objeto de sesión en el disco duro.

  • Activación de sesión:

  • Una vez que se inicia el servidor, simplemente convierta el archivo de sesión en un objeto de sesión en la memoria.

  1. ¿Cuándo se destruye la sesión?
  1. El servidor está caído

  1. El objeto de sesión llama a invalidar().

  1. El tiempo de vencimiento predeterminado de la sesión es de 30 minutos.

<session-config>
<session-timeout>30</session-timeout>
</session-config>

5.2.3 Características de la sesión

  1. La sesión se utiliza para almacenar datos de múltiples solicitudes para una sesión y existe en el lado del servidor .

  1. La sesión puede almacenar datos de cualquier tipo y tamaño.

5.3 La diferencia entre cookie y sesión

  1. La sesión almacena datos en el lado del servidor y cookies en el lado del cliente.

  1. No hay límite de tamaño de datos para las sesiones, pero sí para las cookies.

  1. Los datos de la sesión son seguros, pero las cookies son relativamente inseguras.


6. Filtros y oyentes

6.1 Filtro

6.1.1 Cómo utilizar filtros

  1. Definir una clase e implementar la interfaz Filter

  1. Anular el método en el método Filter

  1. Configurar la ruta de interceptación (dos métodos)

  1. web.xml

<filter>
    <filter-name>demo1</filter-name>
    <filter-class>web.filter.FilterDemo1</filter-class>
</filter>
<filter-mapping>
    <filter-name>demo1</filter-name>
    <!-- 拦截路径 -->
    <url-pattern>/*</url-pattern>
</filter-mapping>
  1. anotación

@WebFilter("/*")
public class FilterDemo1 implements Filter {
}

6.1.2 Ciclo de vida del filtro

  1. init: después de que se inicia el servidor, se creará el objeto Filtro y luego se llamará al método init. Sólo se ejecutó una vez. Se utiliza para cargar recursos.

  1. doFilter: se ejecutará cada vez que se intercepte una solicitud de un recurso. Ejecutar varias veces.

  1. destruir: después de cerrar el servidor, el objeto Filtro se destruye. Si el servidor se apaga normalmente, se ejecutará el método de destrucción. Sólo se ejecutó una vez. Se utiliza para liberar recursos.

6.1.3 Cómo liberar el filtro

filterChain.doFilter(servletRequest,servletResponse);

6.1.3 ¿Cuáles son los métodos de interceptación de los filtros?

Hay un atributo DispatcherTypes en @WebFilter, cuyos valores son los siguientes:

  1. SOLICITUD: Valor predeterminado. El navegador solicita recursos directamente.

  1. ADELANTE: Acceso directo a los recursos

  1. INCLUIR: Incluir acceso a recursos

  1. ERROR: Error al saltar el recurso

  1. ASYNC: acceso asincrónico a recursos

6.1.4 El orden de ejecución de múltiples filtros

Por ejemplo, si hay dos filtros, filtro 1 y filtro 2, el orden de ejecución es

Filtro 1 Crear
Filtro 2 Crear
recurso Ejecutar
Filtro 2 Destruir
Filtro 1 Destruir

Sin embargo, este no es siempre el caso, como sigue:

  1. Configuración de anotaciones: compare de acuerdo con las reglas de comparación de cadenas de nombres de clases y el valor más pequeño se ejecuta primero.

  • Por ejemplo: AFilter y BFilter, AFilter se ejecuta primero.

  1. Configuración web.xml: <filter-mapping> Quien esté definido anteriormente se ejecutará primero

6.2 Oyente Oyente

6.2.1 Varios conceptos de mecanismo de escucha de eventos:

Por ejemplo, haga clic en un botón,

  1. Evento: algo, como un evento de "clic".

  1. Fuente del evento: lugar donde ocurre el evento, como un "botón".

  1. Oyente: un objeto o fragmento de código

  1. Regístrese para escuchar: vincule eventos, fuentes de eventos y oyentes. Cuando ocurre un evento en el origen del evento, se ejecuta el código de escucha.

6.2.2 Pasos para configurar el oyente

  1. Definir una clase que implemente la interfaz ServletContextListener

  1. Copia el método

  1. Configuración

  1. web.xml

<listener>
    <listener-class>web.listener.ContextLoaderListener</listener-class>
</listener>
  1. anotación:

Agregue @WebListener directamente a la clase

Supongo que te gusta

Origin blog.csdn.net/weixin_51418964/article/details/129205660
Recomendado
Clasificación