java中,forward指的是“直接转发方式”。对于直接方式,客户端浏览器只发出一次请求,Servlet把请求转发给Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的。

用户向服务器发送了一次HTTP请求,该请求可能会经过多个信息资源处理以后才返回给用户,各个信息资源使用请求转发机制相互转发请求,但是用户是感觉不到请求转发的。根据转发方式的不同,可以区分为直接请求转发(Forward)和间接请求转发(Redirect)。

直接转发方式(Forward),客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的。

间接转发方式(Redirect)实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。

举个通俗的例子:

直接转发就相当于:“A找B借钱,B说没有,B去找C借,借到借不到都会把消息传递给A”;

间接转发就相当于:"A找B借钱,B说没有,让A去找C借"。

详解直接转发方式(Forward)

直接转发方式用的更多一些,一般说的请求转发指的就是直接转发方式。Web应用程序大多会有一个控制器。由控制器来控制请求应该转发给那个信息资源。然后由这些信息资源处理请求,处理完以后还可能转发给另外的信息资源来返回给用户,这个过程就是经典的MVC模式。

javax.serlvet.RequestDispatcher接口是请求转发器必须实现的接口,由Web容器为Servlet提供实现该接口的对象,通过调用该接口的forward()方法到达请求转发的目的,示例代码如下:......

//Servlet里处理get请求的方法

public void doGet(HttpServletRequest request , HttpServletResponse response){

//获取请求转发器对象,该转发器的指向通过getRequestDisPatcher()的参数设置

RequestDispatcher requestDispatcher =request.getRequestDispatcher("资源的URL");

//调用forward()方法,转发请求

requestDispatcher.forward(request,response);

}......

上图所示的直接转发请求的过程如下:浏览器向Servlet1发出访问请求;

Servlet1调用forward()方法,在服务器端将请求转发给Servlet2;

最终由Servlet2做出响应。

技巧:其实,通过浏览器就可以观察到服务器端使用了那种请求转发方式,当单击某一个超链接时,浏览器的地址栏会出现当前请求的地址,如果服务器端响应完成以后,发现地址栏的地址变了,则证明是间接的请求转发。相反,如果地址没有发生变化,则代表的是直接请求转发或者没有转发。

扩展资料:

直接转发和间接转发的原理及区别是什么?

答:Forward和Redirect代表了两种请求转发方式:直接转发和间接转发。对应到代码里,分别是RequestDispatcher类的forward()方法和HttpServletRequest类的sendRedirect()方法。

对于间接方式,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。它本质上是两次HTTP请求,对应两个request对象。

对于直接方式,客户端浏览器只发出一次请求,Servlet把请求转发给Servlet、HTML、JSP或其它信息资源,由第2个信息资源响应该请求,两个信息资源共享同一个request对象。

java forward怎么用_java中forward是什么相关推荐

  1. java可以多重继承吗_Java中的多重继承与组合vs继承

    java可以多重继承吗 有时我写了几篇有关Java继承,接口和组成的文章. 在这篇文章中,我们将研究多重继承,然后了解组成优于继承的好处. Java中的多重继承 多重继承是创建具有多个超类的单个类的能 ...

  2. java中有没有栈_Java中堆和栈有什么区别

    stack 和 heep 都是内存的一部分stack 空间小,速度比较快, 用来放对象的引用heep 大,一般所有创建的对象都放在这里.栈(stack):是一个先进后出的数据结构,通常用于保存方法(函 ...

  3. java 基本类型 引用_java中 引用类型 和 基本类型 有何区别?

    栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newa ...

  4. java构造器详解_Java中关于构造器的使用详解

    这篇文章主要介绍了Java构造器使用方法及注意事项的相关资料,这里举例说明如何使用构造器及需要注意的地方,需要的朋友可以参考下 Java构造器使用方法及注意事项 超类的构造器在子类的构造器运行之前运行 ...

  5. java读取文件 路径_Java中的获取文件的物理绝对路径,和读取文件

    获取文件的绝对路径,读取该文件 一.文件目录打印图 下面的文件目录图,是项目中文件的位置信息:下面的例子是按照这个图来演示的. . |-- java | |-- ibard | | |-- demo1 ...

  6. java多线程 线程安全_Java中的线程安全

    java多线程 线程安全 Thread Safety in Java is a very important topic. Java provides multi-threaded environme ...

  7. java 异常处理发生异常_Java中的异常处理

    java 异常处理发生异常 Exception Handling in Java is a very interesting topic. Exception is an error event th ...

  8. java string 对象地址_Java中String对象的存储位置(学习笔记)

    packagetest.string.equal;public classMain {/*** 创建了三个对象,"helloworld对象创建在常量池中",每次new String ...

  9. java 定义整数数组_JAVA中数组的正确定义方法是什么?

    数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来唯一地确定数组中的元素. §5.1一维数组 一.一维数组的定义 type arrayName[]; 其中类型(type)可以为Java中任 ...

  10. java语言for模板_Java中使用FreeMaker实现模板渲染

    一.引言 1.1 freemarker简介 FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器无关,即在Web运行时,它并不知道Serv ...

最新文章

  1. centos7安装postgresql数据库
  2. 字符指针,字符数组,双引号的字符串的区别与联系
  3. docker logs 查看docker容器日志
  4. Python pyd pyc
  5. 函数、返回-Sql Server常用函数之统计、算数、字符串函数-by小雨
  6. 高速的二舍八入三七作五_有没有发现,高速收费都是5的倍数,这是为什么?怎么判断的?...
  7. fscanf、fprintf的返回值
  8. elasticsearch入门(二)
  9. java5 离线安装包_ElasticSearch 5.5 离线环境的完整安装及配置详情,附kibana、ik插件配置及安装包下载路径...
  10. Python 打包的EXE文件反编译1|EXE文件反编译为pyc文件
  11. impala ERROR: TransmitData() to 10.19.231.254:27000 failed: Network error107
  12. COPU副主席刘澎:中国开源在局部领域已接近或达到世界先进水平
  13. pythonSSL证书错误
  14. OneDrive-5T免费云空间获取方法
  15. 跨平台实现基础(二)JavascriptInterface原理和Js和Java交互实践
  16. 如何将明细数据关联对照表后生成汇总统计表
  17. PHP API接口鉴权
  18. 给程序员的 8 个提高开发效率的建议
  19. JavaScript中string与number
  20. 语音合成-声学概念和变声变调

热门文章

  1. 限量50件,属于创作者的、用代码设计的T恤
  2. [译]How To Use the Linux Auditing System on CentOS 7
  3. 无线接入网 服务器 选型,家庭网络系统搭建经验分享 篇三:无线覆盖与AP选择...
  4. gentoo php,Gentoo安装php7
  5. 3月盘点众厂商 云计算劳模大奖颁给谁
  6. 怎样把COFFEEscript 编译成JS
  7. RabbitMQ配置文件_修改RabbitMQ MQTT的1883端口
  8. 超级玛丽跳 时间的优化
  9. ABAP 7.4 CORRESPONDING()语法
  10. android 利用shape做控件背景(小圆点,空心带边框背景)