[] Una comprensión profunda de servlet doGet y doPost china problema de la basura

Cuando javaWeb doPost proyecto, y el uso doGet será siempre una variedad de razones problema de la basura china, el propietario después de una gran cantidad de información, por lo que habrá un problema de este tipo, la forma de resolver este problema y hacer un resumen.

1. En primer tiro método doPost request.getParameter ( "XXX"); ilegible solución

En el comienzo del cuerpo del método además:

//设置request对象的解码方式
request.setCharacterEncoding("utf-8");

La codificación de cadena de formato así obtenida es UTF-8, la distorsión chino consola puede ser resuelto; (En este momento la distorsión página de salida PrintStream sigue presente)

2.doGet y doPost uso PrintWriter cabo = response.getWriter (); salida distorsión Solution

En PrintWriter cabo = response.getWriter (); precedido por:

//设置response返回输出的编码方式
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();

Con respecto a estos dos añadido:

response.setHeader("Content-type", "text/html;charset=UTF-8");  
response.setCharacterEncoding("UTF-8");  
PrintWriter out = response.getWriter();

3. destacados: doGet método request.getParameter ( "XXX"); solución ilegible

¿Por qué nos gusta utilizar doPost ? Debido a que es seguro, es una capacidad ilimitada, que es seguido por solicitud requset cuerpo sobre los datos,

medio

request.setCharacterEncoding ( "UTF-8"), ya que funciona! Codifica un código de resolución de problemas de valor, no Yoshiya?

El doGet método? (Parámetro de vuelta será enviado URL) inseguro, de pequeña capacidad (hasta 1,2KB), los datos no siguen solicitud cuerpo requset , pero en el final de la URL!

medio

request.setCharacterEncoding ( "UTF-8"); ningún uso para el doGet, necesitamos transcodificación adicional, Gee, Haofan ~

Entre los re: Tomcat diferentes versiones, diferentes de codificación por defecto para resolver la url

Antes de la versión tomcat8.0

Antes de la versión tomcat8.0, la codificación predeterminada es ISO-8859-1

Solución 1: Manual de transcodificación cuerdas

Por lo que podemos ver a muchas personas doGet chino ilegible a resolver es la siguiente:

String username=new String(request.getParameter("username").getBytes("ISO-8859-1"), "UTF-8");

Debido a que la codificación predeterminada es ISO-8859-1, con getBytes ( "ISO-8859-1") para obtener la matriz de bytes código original, y luego se convierte en una cadena UTF-8 codificada por el nuevo.

Pero el inconveniente es que cada parámetro se debe transcodificar, puede cambiar su cerebro a temblar ~

Solución 2: Modificar el valor predeterminado codificado como UTF-8

Puesto que la codificación predeterminada es ISO-8859-1, a continuación, modificar la codificación predeterminada como

Encuentra Tomcat directorio \\ conf \ server.xml

添加 URIEncoding = "UTF-8"

Después de la adición, la codificación analítica es UTF-8, los valores doGet no necesitan tomar una página de transcodificados

Sin embargo, no se recomienda este método, debido a las diferentes circunstancias de cada máquina, se ejecutan en su máquina, a otros no se ejecuta.

Solución 3: Filtros de transcodificación

Línea hay ejemplos:

Escribió más completa, doPost y se puede configurar tanto doGet

filtro de servlet para resolver los chinos ilegible

Después de la versión tomcat8.0

Después de la versión tomcat8.0, una codificación predeterminada. 8-UTF , equivalente añadido URIEncoding = "UTF-8" (es decir, por encima de la solución de 2) antes de 8.0

En este punto doGet muy fácil de usar, ahorrando aún más de request.setCharacterEncoding línea doPost ( "UTF-8");

gratificante ~

doPost siendo el mismo, añadiendo que las cosas tienen que añadir!

4. Los ejemplos específicos de

Ejemplos Tomcat 7 (sin servlet.xml modifican codificación predeterminada es ISO-8859-1, doGet necesidad de transcodificación manualmente )

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;


@WebServlet(
        urlPatterns = "/RequestParamsServlet"
)
public class RequestParamsServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //设置request对象的解码方式
        request.setCharacterEncoding("utf-8");
        //设置response返回输出的编码方式
        response.setContentType("text/html;charset=utf-8");
        String name = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("用户名:" + name);
        System.out.println("密 码:" + password);
        PrintWriter out = response.getWriter();
        out.println("用户名:" + name);
        out.println("密 码:" + password);
        // 获取参数名为“hobby”的值
        String[] hobbys = request.getParameterValues("hobby");
        System.out.print("爱好:");
        out.println("爱好:");
        for (int i = 0; i < hobbys.length; i++) {
            System.out.print(hobbys[i] + ",");
            out.println(hobbys[i] + ",");
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
       //设置response返回输出的编码方式
        response.setContentType("text/html;charset=utf-8");
        String name=new String(request.getParameter("username").getBytes("ISO-8859-1"), "UTF-8");
        String password=new String(request.getParameter("password").getBytes("ISO-8859-1"), "UTF-8");
        System.out.println("用户名:" + name);
        System.out.println("密 码:" + password);
        PrintWriter out = response.getWriter();
        out.println("用户名:" + name);
        out.println("密 码:" + password);
        // 获取参数名为“hobby”的值
        String[] hobbys = request.getParameterValues("hobby");
        System.out.print("爱好:");
        out.println("爱好:");
        for (int i = 0; i < hobbys.length; i++) {
            hobbys[i]=new String(hobbys[i].getBytes("ISO-8859-1"),"UTF-8");
            System.out.print(hobbys[i] + ",");
            out.println(hobbys[i] + ",");
        }

    }
}

Ejemplos Tomcat 9 (sin servlet.xml modificar codificación predeterminada es UTF-8, doGet sin transcodificación )

package org.hc.maven.testnew;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;


@WebServlet(
        urlPatterns = "/RequestParamsServlet"
)
public class RequestParamsServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //设置request对象的解码方式
        request.setCharacterEncoding("utf-8");
        //设置response返回输出的编码方式
        response.setContentType("text/html;charset=utf-8");
        String name = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("用户名:" + name);
        System.out.println("密 码:" + password);
        PrintWriter out = response.getWriter();
        out.println("用户名:" + name);
        out.println("密 码:" + password);
        // 获取参数名为“hobby”的值
        String[] hobbys = request.getParameterValues("hobby");
        System.out.print("爱好:");
        out.println("爱好:");
        for (int i = 0; i < hobbys.length; i++) {
            System.out.print(hobbys[i] + ",");
            out.println(hobbys[i] + ",");
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
       //设置response返回输出的编码方式
        response.setContentType("text/html;charset=utf-8");
        String name = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("用户名:" + name);
        System.out.println("密 码:" + password);
        PrintWriter out = response.getWriter();
        out.println("用户名:" + name);
        out.println("密 码:" + password);
        // 获取参数名为“hobby”的值
        String[] hobbys = request.getParameterValues("hobby");
        System.out.print("爱好:");
        out.println("爱好:");
        for (int i = 0; i < hobbys.length; i++) {
            System.out.print(hobbys[i] + ",");
            out.println(hobbys[i] + ",");
        }

    }
}

Pro-test oh toda la razón, hay un error ver a los estudiantes presten atención Tomcat servlet.xml no se añade configuración redundante, o idea del editor de personajes configuración de codificación que está mal.

Creo seriamente leer aquí, sobre la cuestión de saber chinos ya ilegible

Si ayudas, apoyo lo que el punto de alabanza ~

 

 

 

Publicado 14 artículos originales · alabanza ganado 14 · vistas 1116

Supongo que te gusta

Origin blog.csdn.net/qq_42495847/article/details/105237768
Recomendado
Clasificación