请求的转发与重定向是Servlet控制页面跳转的主要方法,在Web应用中使用非常广泛。

一. 请求的转发

  1. Servlet接收到浏览器端请求后,进行一定的处理,先不进行响应,而是在服务器端内部“转发”给其他Servlet程序继续处理。在这种情况下浏览器端只发出了一次请求,浏览器地址栏不会发生变化,用户也感知不到请求被转发了。
  2. 转发请求的Servlet和目标Servlet共享同一个request对象。
  3. 实现转发的API
 protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//1.使用RequestDispatcher对象封装目标资源的虚拟路径
RequestDispatcher dispatcher = request
.getRequestDispatcher("/index.html");
//2.调用RequestDispatcher对象的forward()方法“前往”目标资源
//[注意:传入的参数必须是传递给当前Servlet的service方法的
//那两个ServletRequest和ServletResponse对象]
dispatcher.forward(request, response);
}

二. 请求的重定向

  1. Servlet接收到浏览器端请求并处理完成后,给浏览器端一个特殊的响应,这个特殊的响应要求浏览器去请求一个新的资源,整个过程中浏览器端会发出两次请求,且浏览器地址栏会改变为新资源的地址。
  2. 重定向的情况下,原Servlet和目标资源之间就不能共享请求域数据了。
  3. 实现重定向的API
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//1.调用HttpServletResponse对象的sendRedirect()方法
//2.传入的参数是目标资源的虚拟路径
response.sendRedirect("index.html");
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//1.调用HttpServletResponse对象的sendRedirect()方法
//2.传入的参数是目标资源的虚拟路径
response.sendRedirect("index.html");
}

对比请求的转发和重定向

# 转发 重定向
浏览器地址栏 不改变 改变
请求次数 1 2
能否共享request对象数据
是否共享数据 转发一次请求,共享数据 重定向两次请求,不共享数据(在request级别使用信息共享,使用重定向必然出错)
发生行为不同 服务器 客户端
目标资源:WEB-INF下的资源 能访问 不能访问

servlet请求转发于重定向的更多相关文章

  1. servlet请求转发与重定向的差别------用生活实例来形象说明两者的差别

    1,请求重定向:client行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保留,地址栏的URL地址会改变. 2,请求转发:server行为,req ...

  2. Servlet的请求转发和重定向

    在学习servlet中对于转发和重定向的理解是非常重要的,但是常常把重定向和转发给混了,今天特地花点时间来总结以下. 一.servlet的转发 1.请求原理图如下所示:  2.可以简单理解转发就好比一 ...

  3. Spring MVC 3.0 请求转发和重定向

    首先看一下如何获得request对象.session对象: 普通的Controller类,示例代码如下: @Controller @RequestMapping(value = "user& ...

  4. HttpServletRequest 接口、HttpServletResponse 接口、请求转发与重定向

    上篇文章我们讲了servlet的基本原理,这章将讲一下剩余的部分. HttpServletRequest 接口 该接口是 ServletRequest 接口的子接口,封装了 HTTP 请求的相关信息, ...

  5. ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段

      ServletRequest 基本概念 JavaWeb中的 "Request"对象  实际为   HttpServletRequest  或者  ServletRequest, ...

  6. Servlet中转发和重定向的路径问题【转】

    转发和重定向的路径问题 Servlet中有两种方式获得转发对象(RequestDispatcher):一种是通过HttpServletRequest的getRequestDispatcher()方法获 ...

  7. 04_web基础(六)之请求转发与重定向

    1.交互方式 Web组件之间跳转: 从AServlet 跳转到 BServlet. 三种类型: 1:请求转发(forward) 2:URL重定向(redirect) 3:请求包含(include) 3 ...

  8. spring mvc 请求转发和重定向(转)

    spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...

  9. spring mvc 请求转发和重定向

    spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...

随机推荐

  1. Bugku-web-md5 collision(NUPT_CTF)

    总结了两道MD5绕过的题目. 根据MD5的特性,有两点漏洞 1.两个开头为0的md5值相同. 2.md5不能处理数组. 3.==用法,0 == 字符串是成立的,从而可以绕过MD5检查. 根据特性,我们 ...

  2. Kotlin高阶函数实战

    前言 1. 高阶函数有多重要? 高阶函数,在 Kotlin 里有着举足轻重的地位.它是 Kotlin 函数式编程的基石,它是各种框架的关键元素,比如:协程,Jetpack Compose,Gradle ...

  3. Docker小白到实战之开篇概述

    前言 "不对啊,在我这运行很正常啊",这句话小伙伴们在前几年应该听得很多:每次一到安装.部署时总有一堆问题,毕竟操作系统版本.软件环境.硬件资源.网络等因素在作怪,此时难免会导致开 ...

  4. VulnHub靶场渗透之:Gigachad

    环境搭建 VulnHub是一个丰富的实战靶场集合,里面有许多有趣的实战靶机. 本次靶机介绍: http://www.vulnhub.com/entry/gigachad-1,657/ 下载靶机ova文 ...

  5. STM32—驱动GY85-IMU模块

    GY85是一个惯性测量模块,内部集成了三轴加速度计.三轴陀螺仪.电子罗盘.气压传感器等芯片,用于测量和报告设备速度.方向.重力,模块可以将加速度计.陀螺仪.电子罗盘等传感器的数据进行综合,在上位机可以 ...

  6. 8.23考试总结(NOIP模拟46)[数数·数树·鼠树·ckw的树]

    T1 数数 解题思路 大概是一个签到题的感觉...(但是 pyt 并没有签上) 第一题当然可以找规律,但是咱们还是老老实实搞正解吧... 先从小到大拍个序,这样可以保证 \(a_l<a_r\) ...

  7. docker 安装部署 jenkins

    cd /data/docker-data/jenkins mkdir jenkins_home chmod 777 jenkins_home docker run -d -p 10240:8080 - ...

  8. css内容渐入效果实现

    .fade-in-section { opacity: 0; transform: translateY(20vh); visibility: hidden; transition: opacity ...

  9. 【译】JavaScript async / await:好的部分,陷阱和如何使用

    async/await提供了一种使用同步样式代码异步访问资源的选项,而不会阻塞主线程.然而,使用它有点棘手.在本文中,我们将从不同的角度探讨async / await,并将展示如何正确有效地使用它们. ...

  10. CLR、CLI、CTS、CLS的关系

    网站:https://blog.csdn.net/dodream/article/details/4719578 ·CLR(公共语言运行库)是一个CLI的实现,包含了.NET运行引擎和符合CLI的类库 ...