转发和重定向的区别和使用

疑问

    能否在OneServlet中保存值到请求域中,在另一个TwoServlet中打印出来? 如果是不同的请求,不能取出来。如果是同一次请求是可以取出来的。

概念

由服务器端进行的页面跳转

原理图

案例

需求

步骤

  1. TwoServlet就从请求域中取出键和值,打印到浏览器上。

效果

代码

OneServlet
TwoServlet
package com.itheima.servlet;

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(name = "Demo7TwoServlet", urlPatterns = "/two")
public class Demo7TwoServlet extends HttpServlet {
          
   
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          
   
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.print("这是Two,从请求域中取出one中的值:" + request.getAttribute("name"));
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          
   
        this.doPost(request, response);
    }
}
  1. 地址栏不发生变化,显示的是上一个页面的地址
  2. 请求次数:只有1次请求
  3. 根目录:
  4. 请求域中数据不会丢失
request.getRequestDispatcher("/地址").forward(request, response);

页面的跳转:重定向

  1. 重定向原理
  2. 重定向的方法

什么是重定向

概念

由浏览器端进行的页面跳转

原理图

重定向方法

重定向案例

需求

从OneServlet重定向到TwoServlet

步骤

  1. 在OneServlet中向请求域中添加键和值
  2. 使用重定向到TwoServlet,在TwoServlet中看能否取出请求域的值

效果

代码

OneServlet
TwoServlet
package com.itheima.servlet;

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(name = "Demo7TwoServlet", urlPatterns = "/two")
public class Demo7TwoServlet extends HttpServlet {
          
   
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          
   
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.print("这是Two,从请求域中取出one中的值:" + request.getAttribute("name"));
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          
   
        this.doPost(request, response);
    }
}

重定向的特点

  1. 地址栏:显示新的地址
  2. 请求次数:2次
  3. 根目录: 没有项目的名字
  4. 请求域中的数据会丢失,因为是2次请求

疑问

根目录 包含项目访问地址 没有项目访问地址 地址栏 不会发生变化 会发生变化 哪里跳转 服务器端进行的跳转 浏览器端进行的跳转 请求域中数据 不会丢失 会丢失
经验分享 程序员 微信小程序 职场和发展