• Servlet(五):请求转发和重定向


     

     

    请求转发:

      问题:
        服务器在接收到浏览器的请求后,仅仅使用一个 Servlet进行请求处理,会造成不同的Servlet逻辑代码 冗余,Servlet的职责不明确。

      解决:
        使用请求转发。
      特点:
        一次请求
        地址栏信息不改变。

    Request 对象作用域
      问题:

        使用请求转发后,不同的 Servlet 之间怎么进行数据的共享呢?或者说数据怎么从一个 servlet 流转给另外一个 Servlet 呢?
      解决:

        使用 request 对象的作用域
      使用:
        request.setAttribute(objectname,Objectvalue);
        request.getAttribute(Objectobj)
      作用:

        解决了一次请求内的不同 Servlet 的数据(请求数据+其他数据)共享问题。

      作用域:基于请求转发,一次请求中的所有 Servlet 共享。
      注意:
        使用 Request 对象进行数据流转,数据只在一次请求内有效。
      特点:
        服务器创建
        每次请求都会创建
        生命周期一次请求

    重定向
      问题:
        如果当前的请求,Servlet 无法进行处理怎么办?
        如果使用请求转发,造成表单数据重复提交怎么办?
      解决:
        使用重定向
      使用:
        response.sendRedirect(“路径”).
        本地路径为:uri
        网络路径为:定向资源的 URL 信息
      特点:
        两次请求
        浏览器地址栏信息改变
        避免表单重复提交

    复制代码
    Servlet流程总结:
     *         浏览器发起请求到服务器(请求)
     *      服务器接受浏览器的请求,进行解析,创建request对象存储请求数据
     *      服务器调用对应的servlet进行请求处理,并将request对象作为实参传递给servlet的方法
     *      servlet的方法执行进行请求处理
     *              //设置请求编码格式
     *              //设置响应编码格式
     *              //获取请求信息
     *              //处理请求信息
     *                  //创建业务层对象
     *                  //调用业务层对象的方法
     *              //响应处理结果
     *请求转发学习:
     *        作用:实现多个servlet联动操作处理请求,这样避免代码冗余,让servlet的职责更加明确。
     *        使用:
     *                req.getRequestDispatcher("要转发的地址").forward(req, resp);
     *                地址:相对路径,直接书写servlet的别名即可。
     *        特点:
     *            一次请求,浏览器地址栏信息不改变。
     *        注意:
     *            请求转发后直接return结束即可。
     *reuqet作用域:
     *        解决了一次请求内的servlet的数据共享问题
     *重定向:
     *        解决了表单重复提交的问题,以及当前servlet无法处理的请求的问题。
     *        使用:
     *            resp.sendRedirect(String uri);
     *        示例:
     *            resp.sendRedirect("/login/main");
     *        特点:
     *            两次请求,两个request对象。
     *            浏览器地址栏信息改变
     *        时机:
     *            如果请求中有表单数据,而数据又比较重要,不能重复提交,建议使用重定向。
     *            如果请求被Servlet接收后,无法进行处理,建议使用重定向定位到可以处理的资源。    
     *
    复制代码
  • 相关阅读:
    asyncio
    pytz
    celery
    xml
    jsonpath
    requests
    SQLite 数据库存储
    SQLite 数据库存储
    Android 记住密码功能
    Android 记住密码功能
  • 原文地址:https://www.cnblogs.com/shoshana-kong/p/10593829.html
Copyright © 2020-2023  润新知