forward:转发;redirect:重定向。区别如下:

浏览器 url 地址显示不同

服务端通过 forward 返回,浏览器 url 地址不会发生变化;服务器通过 redirect 返回,浏览器会重新请求, url 地址会发生变化

前后台两者页面跳转的处理方式不同

forward 跳转页面,是服务端进行页面跳转加载(include)新页面,直接返回到浏览器;redirect 跳转页面,是服务端返回新的 url 地址,浏览器二次发出 url 请求

参数携带情况不一样

forward 跳转页面,会共享请求的参数到新的页面;redirect 跳转页面,属于一次全新的 http 请求,无法共享上一次请求的参数

http 请求次数不同

forward 1次;redirect 2次

新目标地址范围不同

forward 必须是同一个应用内的某个资源;redirect 的新地址可以是任意地址

基于 servlet 实现

test servlet

package constxiong;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

* test servlet

* @author ConstXiong

* @date 2019-06-26 10:00:34

*/

@WebServlet("/test")

public class TestServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

public TestServlet() {

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.getWriter().write("This is test.");

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

}

请求返回

redirect servlet

package constxiong;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

* redirect servlet

* @author ConstXiong

* @date 2019-06-26 10:00:34

*/

@WebServlet("/redirect")

public class RedirectServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

public RedirectServlet() {

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.sendRedirect("http://www.baidu.com");

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

}

请求返回

forward servlet

package constxiong;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

* forward servlet

* @author ConstXiong

* @date 2019-06-26 10:00:34

*/

@WebServlet("/forward")

public class ForwardServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

public ForwardServlet() {

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

request.getRequestDispatcher("/test").forward(request, response);//forward 跳转到 test 请求

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

}

请求返回

java中forward和redirect_forward和redirect的区别?相关推荐

  1. java中forward和redirect_Forward和Redirect的区别

    # Forward和Redirect的区别 ---------- ## 通俗比方 - 直接转发请求(Forward)就相当于:"A找B借钱,B说没有,B去找C借,借到借不到都会把消息传递给A ...

  2. java中String new和直接赋值的区别

        Java中String new和直接赋值的区别     对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才 ...

  3. 【Java学习笔记之二十九】Java中的equals和==的用法及区别

    Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String(&quo ...

  4. Java中print、printf、println的区别 详解

    Java中print.printf.println的区别详解 printf主要是继承了C语言的printf的一些特性,可以进行格式化输出 print就是一般的标准输出,但是不换行 println和pr ...

  5. Java中方法重载和方法重写的区别

    文章目录 1 Java中方法重载和方法重写的区别 1 Java中方法重载和方法重写的区别 主要区别如下: 方法重载: 在同一个类中 方法名相同 参数个数.顺序.类型不同 返回值类型.访问修饰符任意 方 ...

  6. Java中的LongAdder和AtomicLong有什么区别?

    ● Java中的LongAdder和AtomicLong有什么区别? 考点:JDK 参考回答: JDK1.8引入了LongAdder类.CAS机制就是,在一个死循环内,不断尝试修改目标值,直到修改成功 ...

  7. Java中 byte[]数组序列化和fastjson序列化区别

    Java中 byte[]数组序列化和fastjson序列化区别 Java中,对于对象可以通过序列化成byte数组或者序列化成json形式,这里做下两者的对比. 首先看下实现方式: 1 byte数组序列 ...

  8. JAVA中的方法和构造方法有什么区别

    JAVA中的方法和构造方法有什么区别 1.方法有返回类型,方法名小写,不能和类名相同:构造方法没有返回类型,void也不行,名与类名相同. 2.构造方法是初始化对象的重要途径,所以就算你给一个类没有定 ...

  9. 转 Java中final、finally、finalize的区别与用法

    Java中final.finally.finalize的区别与用法 1.简单区别: final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承. finally是异常处理语句结构 ...

最新文章

  1. 无所不在的物联网设备 你我都需要正视所带来的安全问题
  2. jenkins执行shell脚本,找不到环境变量
  3. 数据挖掘之关联分析三(规则的产生)
  4. html怎么把excel表格合并单元格,Excel中如何快速合并多个单元格
  5. sql server 缓存_了解SQL Server查询计划缓存
  6. SEO关键词优化:如何理解被百度快速索引?
  7. HDOJ--2066--一个人的旅行
  8. paip.陕北方言 广东方言的不同单字 1千高频字
  9. SVN下载、拉取远程库、上传代码及注意问题
  10. 研究生研一学习机器学习ML、深度学习DL的规划
  11. Android开机速度优化
  12. android之媒体硬解OMX的实现
  13. 曾国藩:统领30万湘军,只靠这4句话
  14. 码农的自我修养之 软件危机和软件过程
  15. 10. 哈夫曼树、Trie、补充
  16. 使用Tensorflow实现多GPU并行训练
  17. 国内五款主流外贸CRM优缺点综合评测
  18. java对象转Json学习
  19. 五种基于 MapReduce 的并行计算框架介绍及性能测试
  20. android屏幕共享demo_「手机共享」Android手机之间实现屏幕共享 - seo实验室

热门文章

  1. 面试!什么是数据仓库?
  2. 什么是算法c语言中,C语言/C++算法基本概念
  3. 大视野上每道题的知识点
  4. 移动Web开发基础-flexible布局方案
  5. Intellij IDEA 破解方法和地址
  6. TOS 和 DSCP理解
  7. 解决mac下鼠标滚轮和触控板方向相同的问题
  8. java学习-01 java历程以及java学习环境配置
  9. 程序员怎样在35岁前实现财务自由?
  10. centos安装apache文件下载服务器