• Servlet 学习笔记4


    一、HttpServletReponse类

    a)HttpServletReponse类的作用

    HttpServletReponse类和HttpServletRequest类一样,每次请求进来,Tomcat服务器都会创建一个Response对象,传递给Servlet程序去使用,HttpServletRequest表示请求过来的信息,HttpServletReponse表示所有响应的信息。

    如果需要设置返回给客户端的信息,都可以通过HttpServletReponse对象进行设置。

    b)两个输出流的说明

    字节流  getOutputStream();   常用于下载(传递二进制数据)

    字符流  getWriter();    常用于回传字符串(常用)

    两个流同时只能使用一个,否则会报错

    c)如何往客户端回传数据

    往客户端回传字符串数据

    1. public class ResponseIOServlet extends HttpServlet {
    2. @Override
    3. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    4. PrintWriter writer = resp.getWriter();
    5. writer.println("response's content!!");
    6. }
    7. }

    d)解决响应中的中文乱码问题

    默认为ISO-8859-1

    方法1:

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

    方法2:

    1. resp.setContentType("text/html; charset=UTF-8");
    2. //一行代码会同时设置服务器和客户端都使用UTF-8字符集,还设置了响应头
    3. //此方法一定要在获取流对象之前设置才有效
    4. System.out.println(resp.getCharacterEncoding());

    e)请求重定向

    请求重定向是指,客户端给服务器发送请求,然后服务器告诉客户端说。我给你一些地址,你去新地址访问,叫做重定向(因为之前的地址可能已经被废弃)。

    第一种方案:

    1. public class Response1 extends HttpServlet {
    2. @Override
    3. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    4. System.out.println("Response1 到此一游");
    5. //设置响应状态码302 表示重定向
    6. resp.setStatus(302);
    7. //设置响应头,说明新的地址在哪里
    8. resp.setHeader("Location", "http://localhost:8088/web04_servlet/response2");
    9. }
    10. }
    1. public class Response2 extends HttpServlet {
    2. @Override
    3. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    4. resp.setContentType("text/html; charset=UTF-8");
    5. resp.getWriter().write("成功重定向到Response2!");
    6. }
    7. }

    第二种方案:(推荐使用)

    1. public class Response1 extends HttpServlet {
    2. @Override
    3. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    4. resp.sendRedirect("http://localhost:8088/web04_servlet/response2");
    5. }
    6. }

    请求重定向的特点:

    (1)浏览器地址栏会变化为重定向后的地址

    (2)客户端进行了两次请求

    (3)不共享Request域中的数据,因为Tomcat每次请求都会封装一个HttpServletReponse对象,两次请求封装了两个不同的对象。

    (4)不能靠重定向访问到WEB-INF目录下的内容,因为还是由浏览器发送的请求,不是服务器内部。

    (5)可以访问工程以外的资源

    【请求转发对内,重定向对外】

    重定向的相对路径地址到端口号 , 请求转发的到工程名

    工程名: req.getContextPath()

  • 相关阅读:
    Spring Boot 配置读取顺序 apollo 配置读取顺序
    Bootstrap警告和轮播插件详解【前端Bootstrap框架】
    基于MATLAB的Kmeans聚类算法的仿真与分析
    python 从二进制文件中读取浮点数据
    window环境下安装大数据环境
    面向对象实验三重载
    数学建模笔记-第七讲-回归分析
    nginx、apache流量日志分析
    利用轻量一键申请多域名通配符免费证书(Trustasia)
    pbootcms模板标签序数从2开始
  • 原文地址:https://blog.csdn.net/hhhxykeke/article/details/126789587