zoukankan      html  css  js  c++  java
  • 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接收后,无法进行处理,建议使用重定向定位到可以处理的资源。    
     *
  • 相关阅读:
    Martix工作室考核题 —— 打印一个菱形
    Martix工作室考核题 —— 打印一个菱形
    Martix工作室考核题 —— 打印九九乘法表
    Martix工作室考核题 —— 打印九九乘法表
    Martix工作室考核题 —— 打印九九乘法表
    Martix工作室考核题 —— 201938 第三题
    Martix工作室考核题 —— 201938 第三题
    Martix工作室考核题 —— 201938 第三题
    Martix工作室考核题 —— 201938 第一题
    fiddler模拟发送post请求
  • 原文地址:https://www.cnblogs.com/jiulonghudefeizhai/p/10105799.html
Copyright © 2011-2022 走看看