Tecnología de servlet 13_HttpServletResponse clase

El rol de la clase HttpServletResponse:

La clase HttpServletResponse es la misma que la clase HttpServletRequest. Cada vez que ingresa una solicitud, el servidor Tomcat creará un objeto Response y lo pasará al programa Servlet para que lo use. HttpServletRequest representa la información solicitada, HttpServletResponse representa toda la información de respuesta, si necesitamos configurar la información devuelta al cliente, podemos configurarla a través del objeto HttpServletResponse

Descripción de los dos flujos de salida:

Flujo de bytes getOutputStream (); A menudo se usa para descargar (transferir datos binarios)
Flujo de caracteres getWriter (); A menudo se usa para devolver cadenas (de uso común)

Solo se puede utilizar una de las dos corrientes al mismo tiempo.

Si se usa el flujo de bytes, el flujo de caracteres ya no se puede usar y viceversa; de lo contrario, se informará un error.

public class ResponseIOServlet extends HttpServlet {
    
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        resp.getWriter();
        resp.getOutputStream();
    }
}

Inserte la descripción de la imagen aquí

Cómo enviar datos al cliente:

Requisito: envíe los datos de la cadena al cliente.

public class ResponseIOServlet extends HttpServlet {
    
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
//        resp.getWriter();
//        resp.getOutputStream();

//        要求:往客户端回传字符串数据。
        PrintWriter writer = resp.getWriter();      //快捷键:alt + enter
        writer.write("response's content!!!");
    }
}

Para resolver la respuesta confusa:

public class ResponseIOServlet extends HttpServlet {
    
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
//        resp.getWriter();
//        resp.getOutputStream();

//        要求:往客户端回传字符串数据。
        PrintWriter writer = resp.getWriter();      //快捷键:alt + enter
//        writer.write("response's content!!!");
        writer.write("旭哥好帅");
    }
}

Si la escritura está en chino, habrá problemas confusos.

Inserte la descripción de la imagen aquí

Eche un vistazo al conjunto de caracteres correspondiente:

//获取响应的字符集
System.out.println(resp.getCharacterEncoding());        //默认ISO-8859-1

Podemos configurar el juego de caracteres del servidor:

//设置服务器字符集为UTF-8
resp.setCharacterEncoding("UTF-8");

En este momento, el problema aún no está resuelto, debido a que el navegador no sabe qué juego de caracteres usa el servidor, también necesitamos configurar el juego de caracteres del navegador.
Inserte la descripción de la imagen aquí

El navegador usa GBK por defecto

Podemos configurar el navegador para que también use el juego de caracteres UTF-8 a través del encabezado de respuesta

//通过响应头,设置浏览器也使用UTF-8字符集
resp.setHeader("Content-Type","text/html; charset=UTF-8");

Inserte la descripción de la imagen aquí

Código completo:

//        第一种方法
        //设置服务器字符集为UTF-8
        resp.setCharacterEncoding("UTF-8");
        //通过响应头,设置浏览器也使用UTF-8字符集
        resp.setHeader("Content-Type","text/html; charset=UTF-8");

Hay una forma más sencilla:

//        第二种方法
//        他会同时设置服务器和客户端都是用UTF-8字符集,还设置了响应头
//        注意:此方法一定要在获取流对象之前才有效
        resp.setContentType("text/html; charset=UTF-8");
        System.out.println(resp.getCharacterEncoding());

Solicitar redirección:

Solicitar redirección significa que el cliente envía una solicitud al servidor, y luego el servidor le dice al cliente que le daré algunas direcciones y usted va a una nueva dirección para visitar, que se llama solicitud de redirección (porque la dirección anterior puede haber sido abandonado).

Inserte la descripción de la imagen aquí

public class Response1 extends HttpServlet {
    
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        System.out.println("曾到此地一游 Response1");

        //设置响应状态码302,表示重定向(已搬迁)
        resp.setStatus(302);
        resp.setHeader("Location","Http://localhost:8080/07_servlet/response2");
    }
}
public class Response2 extends HttpServlet {
    
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        resp.getWriter().write("response2's result!");
    }
}

Inserte la descripción de la imagen aquí

Características de la redirección de solicitudes:

  1. La barra de direcciones del navegador cambiará
http://localhost:8080/07_servlet/response1
变成了  ==>
http://localhost:8080/07_servlet/response2
  1. Dos solicitudes

Inserte la descripción de la imagen aquí

  1. No comparta datos en el campo Solicitud

    Motivo: Tomcat analiza los datos solicitados cada vez que recibe una solicitud y los encapsula en un objeto de solicitud.

  2. No se puede acceder a los recursos en WEB-INF

    Ponga un form.html en el directorio WEB-INF

public class Response1 extends HttpServlet {
    
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        System.out.println("曾到此地一游 Response1");

        req.setAttribute("key1","value1");

        //设置响应状态码302,表示重定向(已搬迁)
        resp.setStatus(302);
//        resp.setHeader("Location","Http://localhost:8080/07_servlet/response2");
        resp.setHeader("Location","Http://localhost:8080/07_servlet/WEB-INF/form.html");
    }
}

访问 http: // localhost: 8080 / 07_servlet / response1 :

Inserte la descripción de la imagen aquí

Razón:

La segunda solicitud aún envía la solicitud desde el navegador al servidor, pero el directorio WEB-INF está protegido y el navegador no puede acceder directamente a él.

  1. Puede acceder a recursos fuera del proyecto.
resp.setHeader("Location","Http://www.baidu.com");

Se puede acceder normalmente:

Inserte la descripción de la imagen aquí

El segundo método de redirección de solicitudes: (recomendado)

//请求重定向的第二种方法:
resp.sendRedirect("http://localhost:8080");
`
resp.setHeader("Location","Http://www.baidu.com");

Supongo que te gusta

Origin blog.csdn.net/weixin_45024585/article/details/108905105
Recomendado
Clasificación