• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > JAVA面试题之Forward与Redirect的区别详解

JAVA面试题之Forward与Redirect的区别详解

作者:阿赫瓦里 字体:[增加 减小] 来源:互联网 时间:2017-05-28

阿赫瓦里 通过本文主要向大家介绍了forward redirect,forward sendredirect,java redirect,java redirect用法,java sendredirect等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

前言

当用户向服务器发送了一次HTTP请求,该请求可能会经过多个信息资源处理以后才返回给用户,各个信息资源使用请求转发机制相互转发请求,但是用户是感觉不到请求转发的。根据转发方式的不同,可以区分为直接请求转发(Forward)和间接请求转发(Redirect),那么这两种转发方式有何区别呢?本篇在回答该问题的同时全面的讲解两种请求转发方式的原理和区别。

【关键考点】

       •请求转发的含义;

      •Forward转发请求的原理;

      •Redirect转发请求的原理。

【考题分析】

  Forward和Redirect代表了两种请求转发方式:直接转发和间接转发。

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

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

举个通俗的例子:

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

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

下面详细阐述一下两者的原理:

一:间接请求转发(Redirect)

  间接转发方式,有时也叫重定向,它一般用于避免用户的非正常访问。例如:用户在没有登录的情况下访问后台资源,Servlet可以将该HTTP请求重定向到登录页面,让用户登录以后再访问。在Servlet中,通过调用response对象的SendRedirect()方法,告诉浏览器重定向访问指定的URL,示例代码如下: 

......
//Servlet中处理get请求的方法
public void doGet(HttpServletRequest request,HttpServletResponse response){
//请求重定向到另外的资源
 response.sendRedirect("资源的URL");
}
........
</div>

              

上图所示的间接转发请求的过程如下:

       1.浏览器向Servlet1发出访问请求;

       2.Servlet1调用sendRedirect()方法,将浏览器重定向到Servlet2;

       3.浏览器向servlet2发出请求;

       4.最终由Servlet2做出响应。

二:直接请求转发(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); 
}
......
</div>

         

上图所示的直接转发请求的过程如下:

      1.浏览器向Servlet1发出访问请求;

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

      3.最终由Servlet2做出响应。

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

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

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

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

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。最后,祝大家都能找到一个称心满意的工作!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • JAVA面试题之Forward与Redirect的区别详解
  • JAVA面试题之Forward与Redirect的区别详解

相关文章

  • 2017-05-28java Spring AOP详解及简单实例
  • 2017-05-28实例解析Java设计模式编程中的适配器模式使用
  • 2017-05-28java 算法之快速排序实现代码
  • 2017-05-28序列化版本号serialVersionUID的作用_动力节点Java学院整理
  • 2017-05-28java 实现汉诺塔详解及实现代码
  • 2017-05-28Java汉字转成汉语拼音工具类
  • 2017-05-28Spring MVC 基于URL的映射规则(注解版)
  • 2017-05-28详解spring整合shiro权限管理与数据库设计
  • 2017-05-28Java微信公众平台开发(4) 回复消息的分类及实体的创建
  • 2017-05-28Java Set简介_动力节点Java学院整理

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • java 值Document解析xml详细介绍
    • java数组、泛型、集合在多态中的使用及对比
    • Java微信公众平台开发(4) 回复消息的分类及实体的创建
    • Java IO流 文件的编码实例代码
    • SpringBoot定义过滤器、监听器、拦截器的方法
    • SpringMVC中MultipartFile上传获取图片的宽度和高度详解
    • java中 String和StringBuffer的区别实例详解
    • java数据结构与算法之快速排序详解
    • java解析压缩文件.zip,获取文件夹下的数据
    • 详解SpringBoot配置连接池

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有