El siguiente contenido es comprensión personal, espero señalar lo inapropiado
1. El principio de ejecución jsp;
Para resolver completamente el problema de codificación primero, necesita conocer el principio de ejecución de jsp. El principio de ejecución de jsp es una traducción + dos compilaciones; consulte la siguiente figura para obtener más detalles:
aquí debe explicarse: Cuando
jsp se traduce a .java , es traducido por el motor jsp del servidor Tomcat. Si se hace clic en la idea para ejecutarla; entonces el archivo fuente .java se generará en el directorio de su proyecto:
la ruta de la computadora de todos es diferente, por lo que debe encontrarla usted mismo, generalmente debajo de su Ubicación de instalación de Tomcat; luego este proceso de traducción lo realiza el motor jsp en Tomcat; cuando abre el archivo fuente .java, puede encontrar que el contenido en .jsp está realmente traducido a out.write en la función _jspService ():
out.write("\n");
out.write("\n");
out.write("<html>\n");
out.write(" <head>\n");
out.write(" </head>\n");
out.write("<body>\n");
out.write(" ");
// response.setCharacterEncoding("ISO-8859-1");
out.println("我是中文");
out.write("\n");
out.write("</body>\n");
out.write("</html>");
2. Tipo de codificación jsp;
Hay 5 tipos comunes de codificación jsp;
- Codificación ISO-8859-1: el tamaño de la memoria es de 1 byte [0,2 ^ 8-1], no puede representar caracteres chinos, indicador: se puede entender con la tabla de códigos ASCLL;
- Codificación GB2312: dos bytes para representar caracteres chinos; compatible con la codificación ISO-8859-1;
- Codificación GBK: caracteres chinos expresados en dos bytes; compatible con la codificación GB2312;
- Codificación Unicode: se utilizan 2 o 4 bytes para representar caracteres chinos, no es compatible con ninguna codificación;
- codificación utf-8: 1 byte para inglés y 3 bytes para chino; no es compatible con la codificación gb2312; utf-8 es una codificación de caracteres universal internacional, que a menudo se unifica como tipo de codificación utf-8, que también es el tipo de codificación más utilizado ;
3. Cinco métodos de codificación para resolver códigos confusos;
Cinco métodos de codificación comúnmente utilizados para resolver la codificación:
- Use request.setCharacterEncoding ("Tipo de codificación");
- Use pageEncoding = "Tipo de codificación"
- Utilice contentType = "tipo de codificación"
- Use response.setCharacterEncoding ("Tipo de codificación");
- Modifique el método de codificación URIEncoding en server.xml;
4. Los cinco métodos de codificación corresponden al alcance del principio de ejecución jsp;
5. La prioridad de los cinco métodos de codificación en el rango correspondiente al principio de ejecución JSP;
-
De jsp a servlet: pageEncoding> contentType;
-
Al especificar la codificación del contenido de la respuesta del servidor: response.setCharacterEncoding> contentType> pageEncoding es el cuadro inferior en el cuadro del servidor del Título 4;
(1) contentType> pageEncoding
resultado de salida:
(2) response.setCharacterEncoding> contentType> pageEncoding
resultado de salida:
Para request.setCharacterEncoding y URIEncoding en server.xml, estos dos métodos de codificación se explicarán después de que se entiendan los principios de get y post;
6. La diferencia entre obtener / publicar en el formulario;
- Obtener es obtener datos del servidor (el motor de búsqueda son los datos pasados por el cliente con obtener, encontrar la página que coincide con el usuario y regresar al cliente. Por lo tanto, es obtener los datos del servidor), y no modificar el servidor. Por lo tanto, a menudo se usa para búsquedas y consultas; la publicación se usa para enviar datos al servidor, y es necesario modificar el servidor; por lo tanto, a menudo se usa para registro, modificación y carga; pero tenga en cuenta: todos están enviando datos a la base de datos, solo el método de envío. La diferencia se explica en el punto 3 a continuación;
- obtener seguridad <publicar seguridad;
- Get coloca cada campo en el formulario y su contenido en un par clave = valor en la línea de solicitud del mensaje de solicitud http, y luego envía el mensaje de solicitud http a la dirección URL especificada por la acción, y su valor salta en el navegador. es visible para los usuarios durante la transferencia; pero el principio de publicación es poner los campos en el formulario en forma de pares clave = valor en el cuerpo del mensaje de solicitud http, y luego enviar el mensaje a la dirección URL especificada por el acción, y el usuario será redirigido a la página No puedo ver la información de transferencia de valor;
creo que si lo ve aquí, definitivamente se preguntará cuál es el mensaje http mencionado anteriormente; la
explicación se da a continuación:
mensaje http : Es un bloque de datos enviado entre aplicaciones HTTP. Estos bloques de datos comienzan con algo de metainformación en forma de texto, que describe el contenido y el significado del mensaje, seguido de secciones de datos opcionales. Todos estos mensajes fluyen entre el cliente, el servidor y el agente.
Eche un vistazo al mensaje http:
(1). La siguiente figura explica la línea de solicitud del mensaje http en el envío de obtención y la línea de solicitud agregada después de la URL;
(2). La siguiente figura explica el campo de envío de publicación (clave = valor Formulario) Ponlo en el cuerpo del mensaje http;
de hecho, entiendo que el mensaje es un bloque de datos en el protocolo http. Debido a que el cliente se comunica con el servidor en una forma de solicitud / respuesta, necesita para utilizar el protocolo http, por lo que es necesario utilizar el mensaje http;
7. Obtener / publicar la configuración de codificación correspondiente;
Algunas cosas a tener en cuenta aquí:
1. Cómo modificar el URIEncoding en el server.xml, primero busque el server.xml en el directorio conf y ábralo; busque: no se
muestra, lo que indica que es el predeterminado, el Tomcat8 anterior es el ISO-8859 predeterminado -1, pero el Tomcat9 predeterminado es
UTF- 8; Luego complételo aquí: el cuadro azul puede escribir un tipo de codificación, aquí escribo UTF-8; si no lo escribe, el UTF-8 predeterminado; escríbalo para una fácil comprensión;
aquí está el problema confuso, form get / La configuración de la diferencia de publicación y el principio de codificación están bien;
Todo lo anterior es entendimiento personal, por favor avise si hay algo mal;