La función principal de Servlet es procesar las solicitudes de los clientes y responder. Por este motivo, para cada solicitud, el contenedor web creará dos objetos antes de llamar al servicio (), a saber, httpservletRequest y httpservletResponse. Donde httpservletRequest encapsula los mensajes de solicitud HTTP, HttpServletResponse encapsula los mensajes de respuesta HTTP. Cabe señalar que durante la operación del servidor web, cada servlet solo creará un objeto de instancia, pero cada solicitud llamará al método Servicio (ServLetRequest Req, ServLetResponse Res) de la instancia de servlet. Aquí httpservletRequest es una subclase de ServLetRequest, y HttpServletResponse es una subclase de ServletResponse.
El diagrama de relación de herencia de la interfaz HttpServletRequest y HttpServletResponse es el siguiente:
1. HttpservletResponse
La interfaz httpservletResponse hereda de la interfaz ServletResponse. Dado que los mensajes de respuesta HTTP se dividen en tres partes: fila de estado, cuerpo de mensajes de respuesta y cuerpo de mensajes, la interfaz HTTPServletResponse define un método para enviar un código de estado de respuesta, encabezado de mensajes de respuesta y cuerpo de mensajes de respuesta al cliente. Aunque existen muchos métodos en la interfaz HttpServletResponse, solo usamos algunos de uso común. Si usa otros métodos, puede leer el código fuente o la información relacionada de la respuesta.
Enviar funciones relacionadas con el código de estado
Método Descripción public void setstatus (int sc) Establece el código de estado para el mensaje de respuesta. El servidor web genera una línea de estado con un código de estado de 200 por defecto. Public void senderror (int sc) envía un código de estado que indica el mensaje de error. El segundo método también agrega un mensaje de texto para solicitar la descripción public void senderror (int sc, string msg)
Enviar Funciones relacionadas con el encabezado del mensaje de respuesta
Método Descripción public void addheader (nombre de cadena, valor de cadena) Establece el campo de encabezado de respuesta HTTP, el nombre especifica el nombre del campo y el valor especifica el valor de campo. AddHeader puede agregar el campo de encabezado de respuesta con el mismo nombre, Setheader anulará el campo de encabezado con el mismo nombre public void setheader (nombre de cadena, valor de cadena) public void setContentLength (int len) establece el tamaño del contenido de entidad del mensaje de respuesta, en bytes, es decir, establece el valor del valor del campo de longitud de contenido Void void setcontentTepte (type de cadena) establece el contenido de la salida de la salida del valor de la longitud de longitud de contenido. IS, establece el valor del campo de tipo de contenido public void setCharacterEncoding (String Charset) establece la codificación de caracteres de contenido de salida, es decir, establece el valor del campo de tipo de contenido. Tenga en cuenta que la prioridad de este método es mayor que la del setContentType public void sendedirect (ubicación de cadena) Redirección de solicitud de servlet
Enviar Funciones relacionadas con el cuerpo del mensaje de respuesta
| método | ilustrar |
| Public ServLetOutputStream GetOutputStream () | Obtenga el flujo de salida de bytes del tipo HttpServletResponse ServLetOutputStram |
| Public PrintWriter GetWriter () | Obtener la transmisión de salida de caracteres ServletWriter Tipo de httpservletResponse |
Problema de salida de salida china
Los datos en las computadoras se almacenan en forma binaria, por lo que cuando se transfiere el texto, se producirá la conversión entre bytes de caracteres. La conversión entre caracteres y bytes se completa a través de una tabla de búsqueda de código. El proceso de convertir caracteres en bytes se llama codificación, y el proceso de convertir bytes en caracteres se llama decodificación. Si las tablas de código utilizadas para codificar y decodificar son diferentes, se producirán problemas de código confuso.
Nota: Al codificar la secuencia de salida de caracteres del objeto HttpServletResponse, el valor predeterminado es la codificación ISO 8859-1. Este método de codificación es incompatible con el chino. Por ejemplo, "China" se codificará como "63 63" (los caracteres que no se pueden encontrar en la tabla de código ISO 8959-1 se mostrarán 63). Cuando el navegador decodifique los datos recibidos, usará GB2312 de forma predeterminada, decodifique "63" a "?", Y el navegador decodificará los dos caracteres "China" a "??".
Ejemplo del programa httpservletResponse
paquete zzz; import java.io.ioException; import java.io.printwriter; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpServletResponse; public class Hello ExtendsServlet; doget (httpservletRequest solicitud, respuesta httpServletResponse) lanza IOException {// Establezca la codificación del mensaje de respuesta, después de comentar "China", "Respuesta Garled.SetContentType (" Text/Html; Charset = UTF-8 "); PrintWriter Out = Response. DOPOST (HTTPSERVLETREQUEST Solicitud, respuesta httpservletreSponse) lanza ioexception {this.doget (solicitud, respuesta);A veces encontrarás el problema de saltar páginas regularmente. El campo de encabezado de actualización en HTTP puede notificar al navegador que se actualice automáticamente y salte a otras páginas dentro de un tiempo especificado, y la página web se actualizará y saltará a la página especificada regularmente.
paquete zzz; import java.io.ioException; import java.io.printwriter; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpServletResponse; public class Hello ExtendsServlet; doget (httpservletRequest solicitud, respuesta httpservletreSponse) lanza IOException {// establecer la respuesta de codificación de mensajes de respuesta.setContentType ("text/html; charset = utf-8"); Response.setheader ("actualizar", "2; url = http: //www.baidu.com"); PrintWriter out = Response.getWriter (); out.println ("Hola China, salta a Baidu en 2 segundos ..."); } @Override public void dopost (solicitud httpservletRequest, respuesta httpservletResponse) lanza ioexception {this.doget (solicitud, respuesta); }}2. Httpservletrequest
La interfaz httpservletRequest hereda la interfaz ServLetRequest y se usa específicamente para mensajes de solicitud HTTP encapsulados. Dado que la información de solicitud de HTTP incluye tres partes: línea de solicitud, encabezado de solicitud y cuerpo de solicitud, la interfaz HTTPservletRequest define métodos relacionados para obtener la línea de solicitud, el encabezado de solicitud y el cuerpo de solicitudes.
Métodos relacionados para obtener filas de solicitud
| método | ilustrar |
| Cadena pública getMethod () | Obtenga métodos de solicitud HTTP, POST, GET, etc. |
| cadena pública getRequesturi () | Obtenga la parte del nombre del recurso en la línea de solicitud |
| Cadena pública getQueryString () | Obtenga la parte del parámetro en la línea de solicitud |
| Cadena pública getProtocol () | Obtenga el nombre y la versión del protocolo en la línea de solicitud, como HTTP 1.1 |
| Cadena pública getContextPath () | Obtenga la ruta que pertenece a la aplicación web en la URL de solicitud |
De hecho, el método de línea de solicitud se puede ver desde el nombre del método, por lo que no lo publicaré uno por uno aquí.
Métodos relacionados para obtener encabezados de mensajes de solicitud de solicitud
| método | ilustrar |
| Cadena pública GetHeader (nombre de cadena) | Obtenga el valor del campo especificado, si no se devuelve ningún nulo, si hay múltiples devoluciones el primer valor |
| Enumeración pública <String> Getheaders (nombre de cadena) | Devuelve un objeto de recolección de enumeración con el campo especificado |
| Enumeración pública <String> Getheadernames () | Devuelve un objeto de recolección de enumeración que contiene todos los campos |
| Cadena pública getContentType () | Obtenga el valor del campo de tipo de contenido |
Imprima todos los valores del campo de encabezado de solicitud
paquete zzz; import java.io.ioException; import java.io.printwriter; import java.util.enumeration; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httservletRespess; Httpservlet {@Override public void doget (httpservletRequest solicitud, respuesta httpservletResponse) lanza ioexception {// establece la respuesta de codificación de mensajes de respuesta.setContentType ("text/html; charset = utf-8"); PrintWriter out = Response.getWriter (); Enumeration <String> names = request.getheadernames (); while (names.hasmoreElements ()) {String name = names.nextelement (); Valor de cadena = request.getheader (nombre); out.println (nombre + ":" + valor + "</br>"); }} @Override public void dopost (solicitud httpservletRequest, respuesta httpservletResponse) lanza ioexception {this.doget (solicitud, respuesta); }}Métodos relacionados para obtener el cuerpo de solicitud
Método Descripción Pública ServletInputStream getInputStream () obtiene el objeto ServletInputStream solicitado. Si el contenido de la entidad no es texto, solo puede obtener el cuerpo del mensaje del cuerpo de solicitud a través del método GetInputStream. El BufferedReader solicitado getReader () obtiene el objeto BufferedReader solicitado. Este objeto convertirá los datos de bytes de contenido de la entidad en una cadena de texto codificada por el conjunto de caracteres especificado.
Obtener parámetros de solicitud
| método | ilustrar |
| Cadena pública GetParameter (nombre de cadena) | Obtenga el valor del parámetro especificado y devuelva nulo sin este parámetro |
| Enumeración pública <String> getParameterNames () | Devuelve un objeto de enumeración que contiene todos los nombres de parámetros |
| cadena pública [] getParametervalues (nombre de cadena) | Puede haber múltiples mismos parámetros en la solicitud HTTP para obtener todos los valores de parámetros correspondientes al mismo nombre de parámetro. |
3. Interfaz de requestdispatcher
Cuando el cliente solicita un recurso web, si desea que el servidor notifique a otro recurso, como procesar una solicitud, además de usar la función sendedirect () para implementar redirect, también se puede implementar a través del objeto de instancia de la interfaz de requestdispatcher. Se define un método para obtener el objeto requestDisPatcher en la interfaz ServLetRequest: GetRequestDIsPatcher (ruta de cadena), que devuelve el objeto SolicitioDisPatcher del recurso especificado por una determinada ruta. La ruta del parámetro debe comenzar con "/" para representar el directorio raíz de la aplicación web actual, es decir, la ruta de ruta debe estar en este programa web, de lo contrario se producirá una excepción.
Métodos en la interfaz de requestdispatcher
| método | Función |
| Public Void Forward (Solicitud de ServletRequest, Respuesta de ServletResponse) | Pasar un servlet a otro recurso web y pasar la solicitud a otro recurso para la respuesta |
| Public void incluye (solicitud de servletRequest, respuesta de servicio de servicio) | Se utiliza para incluir otros recursos como contenido de respuesta actual |
Lo anterior es la explicación detallada de los ejemplos de solicitud web y respuesta de Java introducidos por el editor. ¡Espero que sea útil para todos!