Echemos un vistazo a un diagrama de flujo:
El proceso de solicitudes de procesamiento del servidor:
(1) Cada vez que el servidor recibe una solicitud, abrirá un nuevo hilo para la solicitud.
(2) El servidor encapsulará los datos de solicitud del cliente en el objeto de solicitud, ¡y la solicitud es el operador de los datos de solicitud!
(3) El servidor también creará un objeto de respuesta, que está conectado al cliente y se puede usar para enviar una respuesta al cliente.
Como se puede ver en el diagrama de flujo, en la solicitud y la respuesta de Javaweb, los dos parámetros más importantes son la solicitud y la respuesta, que están en el método Servicio () del servlet.
1. Concepto de respuesta:
La respuesta es un parámetro del método Servlet.Service y es de tipo javax.servlet.http.httpservletResponse. Cuando el cliente realiza cada solicitud, el servidor crea un objeto de respuesta y lo pasa al método Servlet.service (). El objeto de respuesta se usa para responder al cliente, lo que significa que usar el objeto de respuesta en el método Service () puede completar el trabajo de respuesta al cliente.
Las funciones del objeto de respuesta se dividen en los siguientes cuatro tipos:
(1) Establecer información del encabezado de respuesta
(2) Enviar código de estado
(3) Establezca el texto de respuesta
(4) redirigir
2. Texto de respuesta de respuesta
La respuesta es un objeto de respuesta. El flujo de respuesta del cuerpo de respuesta (cuerpo de respuesta) se puede usar para generar el cuerpo de respuesta al cliente. Repsonse proporciona un total de dos objetos de flujo de respuesta:
(1) PrintWriter out = Response.getWriter (): Obtener transmisión de caracteres;
(2) ServLetOutputStream Out = Response.getOutputStream (): Obtenga el flujo de byte;
Por supuesto, si el contenido del cuerpo de respuesta es un carácter, use Response.getWriter (), y si el contenido de respuesta es bytes, por ejemplo, al descargar, puede usar Respuesta.getOutputStream ().
¡Tenga en cuenta que en una solicitud, ambas transmisiones no se pueden usar al mismo tiempo! Es decir, o usa responder.getwriter () o respuesta.getOutputStream (), pero no puede usar ambas transmisiones al mismo tiempo. De lo contrario, se lanzará una explicación ilegal.
3. Establecer información del encabezado de respuesta
¡Puede usar el método setheader () del objeto de respuesta para establecer el encabezado de respuesta! ¡El conjunto de encabezado de respuesta utilizando este método eventualmente se enviará al navegador del cliente!
(1) Respuesta.setheader ("Content-type", "Text/Html; Charset = UTF-8"): Establezca el encabezado de respuesta de tipo de contenido. La función de este encabezado es decirle al navegador que el contenido de respuesta es de tipo HTML y codificado como UTF-8. Y al mismo tiempo, la secuencia de caracteres que codifica la respuesta se establecerá en UTF-8, es decir, respuesta. Setcharaceterencoding ("UTF-8");
(2) Respuesta.setheader ("actualizar", "5; url = http: //www.baidu.com"): saltará automáticamente a la página de inicio de Baidu después de 5 segundos.
4. Establezca el código de estado y otros métodos
(1) Respuesta.SetContentType ("Text/Html; Charset = UTF-8"): equivalente a llamar a la respuesta.setheader ("Content-type", "text/html; charset = utf-8");
(2) Respuesta.
(3) Respuesta.SetStatus (200): Establezca el código de estado;
(4) Respuesta. SendError (404, "El recurso que está buscando no existe"): Al enviar un código de estado de error, TomCat saltará a una página de error fijo, pero se puede mostrar el mensaje de error.
5. Redirección (****** Key *******)
5.1 ¿Qué es la redirección (dos solicitudes)
Cuando visite http://www.sun.com, encontrará que la URL en la barra de direcciones del navegador se convertirá en http://www.oracle.com/us/sun/index.htm, que es la redirección. La redirección es cuando el servidor notifica al navegador para acceder a otra dirección, es decir, emitir otra solicitud.
5.2 ¿Cómo completar la redirección?
Respuesta: El código de estado para la redirección es 302. Primero usamos el objeto de respuesta para enviar el código de estado de 302 al navegador, y luego establecer una ubicación, es decir, dar una URL disponible, y el navegador accede a la nueva URL para realizar la redirección.
Por ejemplo:
La clase pública Aservlet extiende httpservlet {public void doget (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {Response.setStatus (302); Response.setheader ("ubicación", "http://www.baidu.com"); }}El propósito del código anterior es: después de acceder al aservlet, se notificará al navegador para redirigir a la página de inicio de Baidu. Después de que el navegador del cliente analice el código de respuesta de 302, sabe que el servidor le permite redirigir, por lo que obtendrá inmediatamente la ubicación del encabezado de respuesta y luego emitirá una segunda solicitud.
También hay un método de redirección rápida, es decir, use el método Response.sendedirect (). Por ejemplo, las dos oraciones en el ejemplo anterior pueden ser reemplazadas por Response.Sendedirect ("http://www.baidu.com").
Solicitud-Ensula todos los datos de solicitud del cliente
1. Solicitar descripción general
La solicitud es un parámetro del método Servlet.service () y es de tipo javax.servlet.http.httpservletRequest. Cuando el cliente realiza cada solicitud, el servidor creará un objeto de solicitud y encapsulará los datos de solicitud en la solicitud, y luego lo pasará al método Service () cuando se llama al método Servlet.Service (), que muestra que los datos de solicitud se pueden obtener a través del objeto de solicitud en el método Service ().
Como se muestra en la figura:
La función de la solicitud se puede dividir en los siguientes tipos:
(1) Encapsular los datos del encabezado de solicitud;
(2) Encapsular los datos de texto de solicitud. Si es una solicitud GET, entonces no hay texto;
(3) la solicitud es un objeto de dominio, que se puede agregar y recuperar como un mapa;
(4) La solicitud proporciona funciones de reenvío e inclusión de solicitud.
2. Método de dominio de solicitud
¡La solicitud es un objeto de dominio! Hay cuatro objetos de dominio en Javaweb, entre los cuales ServletContext es un objeto de dominio, que solo crea un objeto ServletContext en toda la aplicación. Solicite una de las solicitudes, que puede compartir datos en una solicitud.
Una solicitud crea un objeto de solicitud. Si se han experimentado múltiples servlets en una solicitud, múltiples servlets pueden usar solicitudes para compartir datos. Ahora no sabemos cómo pasar por varios servlets en una solicitud.
Aquí está el método de solicitud de dominio:
(1) void setAttribute (nombre de cadena, valor del objeto): se usa para almacenar un objeto, también se puede llamar almacenamiento de atributo de dominio, por ejemplo: servletContext.setAttribute ("xxx", "xxx"), un atributo de dominio se guarda en la solicitud, el nombre de apertura de dominio es xxx y el valor del atributo de dominio es xxx. Tenga en cuenta que si el método se llama varias veces y se usa el mismo nombre, el último valor se sobrescribirá, que es el mismo que el mapa;
(2) Objeto getAttribute (nombre de cadena): se usa para obtener los datos en la solicitud. Debe almacenarse antes de obtenerlo. Por ejemplo: String value = (String) request.getAttribute ("xxx"); Para obtener el atributo de dominio llamado xxx;
(3) Void RemoveAttribute (nombre de cadena): Se usa para eliminar el atributo de dominio en la solicitud. Si el atributo de dominio especificado por el nombre del parámetro no existe, entonces este método no hace nada;
(4) Enumeración getAtTributeneMes (): Obtenga los nombres de todos los atributos de dominio;
3. Pase los parámetros por solicitud
Hay dos formas más comunes de pasar parámetros en el cliente:
(1) Entrada directa de la barra de direcciones del navegador: debe ser una solicitud GET;
(2) Hyperlink: debe ser una solicitud GET;
(3) Formulario: se puede obtener o post, que depende del valor del atributo de método de <Form>;
La diferencia entre la solicitud GET y la solicitud de publicación:
(1) Obtenga solicitud:
Los parámetros de solicitud se mostrarán en la barra de direcciones del navegador, por lo que no es seguro;
El límite de longitud del parámetro de solicitud está dentro de 1K;
La solicitud GET no tiene cuerpo de solicitud, por lo que la codificación del parámetro no se puede establecer a través de Solicitud.SetcharacterEncoding ();
(2) Solicitud de publicación:
Los parámetros de solicitud no mostrarán la barra de direcciones del navegador, que es relativamente segura;
No hay límite en la longitud del parámetro solicitado;
4. Solicitud de reenvío e inclusión de solicitud (****** clave *******)
Ya sea que se trate de un reenvío de solicitud o una inclusión de solicitud, significa que múltiples servlets manejan conjuntamente una solicitud. Por ejemplo, Servlet1 maneja la solicitud y luego Servlet1 la reenvía a Servlet2 para continuar procesando la solicitud.
Reenvío de solicitud y solicitud que incluye
RequestDispatcher rd = request.getRequestDIsPatcher ("/myservlet"); Use la solicitud para obtener el objeto requestdispatcher. El parámetro del método es la ruta de servlet del servlet reenviado o contenido.
Reenvío de solicitud: rd.forward (solicitud, respuesta);
La solicitud incluye: rd.include (solicitud, respuesta);
A veces, una solicitud requiere múltiples servlets para colaborar, por lo que debe saltar en un servlet a otro.
> Una solicitud abarca múltiples servlets y requiere reenvío e inclusión.
> Reenvío de solicitud: ¡el Servlet completa el cuerpo de respuesta! ¡El servlet actual puede establecer el encabezado de respuesta! (Deje la cabeza pero no el cuerpo) es decir, la cabeza correspondiente establecida por el servlet actual es válido, y el cuerpo correspondiente no es válido.
> La solicitud contiene: ¡el cuerpo de respuesta no está completado por dos servlets! (Mantente todo) Todos son válidos.
> Ya sea un reenvío de solicitud o una solicitud que contenga, ¡está dentro del alcance de una solicitud! ¡Use la misma solicitud y respuesta!
El reenvío y la solicitud de la solicitud incluyen comparación:
(1) Si la solicitud se reenvía al BServlet en el aservlet, entonces el cuerpo de respuesta no se puede emitir en el aservlet, es decir, la respuesta.getwriter () y la respuesta.getOutputStream () ya no se puede emitir al cliente. Este trabajo debe ser realizado por el Bservlet; Si se usa para incluir la solicitud, no existe tal restricción;
(2) Aunque el reenvío de la solicitud no puede emitir el cuerpo de respuesta, el encabezado de respuesta aún se puede establecer, por ejemplo: Response.SetContentType ("Text/Html; Charset = UTF-8");
(3) La mayoría de las solicitudes se aplican en las páginas JSP para completar la fusión de múltiples páginas;
(4) El reenvío de solicitud se aplica principalmente en servlets, y el objetivo de reenvío es principalmente páginas JSP;
Como se muestra en la figura:
Comparación del reenvío y redirección de solicitudes
(1) El reenvío de la solicitud es una solicitud, mientras que la redirección es dos solicitudes;
(2) Después del reenvío de la solicitud, la barra de direcciones del navegador no cambiará, pero la redirección cambiará, porque la redirección es dos solicitudes;
(3) el objetivo de solicitar el reenvío solo puede ser los recursos en esta aplicación, y el objetivo de redirección puede ser otras aplicaciones;
(4) El método de reenvío de solicitud para AServlet y BServlet es el mismo, es decir, ambos son obtenidos o ambas publicaciones, porque el reenvío de la solicitud es una solicitud;
(5) La segunda solicitud de redirección debe ser obtenida;
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.