RequestDispatcher 让两个servlet相互通信成为可能,就像是浏览器发送request请求一样。所以我们可以从HttpRequest中获取到RequestDispatcher对象

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

RequestDispatcher dispatcher=request.getRequestDispatcher("/servlet2");

}

复制代码

通过上面的代码,我们能获取到一个映射到/servlet2(URI) 的Servlet的 RequestDispatcher。

然后可以使用include()或者forward()方法来调用RequestDispatcher

dispatcher.forward(request, response);

dispatcher.include(request, response);

复制代码

###request.getRequestDispatcher和response.sendRedirct区别

getRequestDispatcher是服务器内部跳转,地址栏信息不变,只能跳转到web应用内的网页。

sendRedirect是页面重定向,地址栏信息改变,可以跳转到任意网页。

######getRequestDispatcher实例:

request.setAttribute("lover", "fantj");

request.getSession().setAttribute("lovered", "fantj");

request.getRequestDispatcher("/third?name=fantj").forward(request, response);

request.getRequestDispatcher("third?name=fantj").forward(request, response);

this.getServletContext().getRequestDispatcher("/third?name=fantj").forward(request, response);

复制代码//ThirdServlet

PrintWriter out = response.getWriter();

String name = request.getParameter("name");

out.println(request.getContextPath()+"


");

out.println("name="+name+"


");

out.println("lover="+request.getAttribute("lover")+"


");

out.println("lovered="+request.getSession().getAttribute("lovered")+"


");

复制代码

结果显示,地址栏信息仍为http://localhost:8080/Test/second(不变),这三种方式都可以传值到第二个Servlet。

#####sendRedirct实例

//SecondServlet

request.setAttribute("lover", "fantj");

request.getSession().setAttribute("lovered", "fantj");

response.sendRedirect("third?name=fantj");

response.sendRedirect(request.getContextPath()+"/third?name=fantj");

复制代码//ThirdServlet

PrintWriter out = response.getWriter();

String name = request.getParameter("name");

out.println(request.getContextPath()+"


");

out.println("name="+name+"


");

out.println("lover="+request.getAttribute("lover")+"


");

out.println("lovered="+request.getSession().getAttribute("lovered")+"


");

复制代码

结果显示,地址栏信息变为http://localhost:8080/Test/third?name=fantj(发生改变),只有request.getAttribute("lover")获取不到值,session范围及url路径后的传值在第二个Servlet都可以获取到值。

######总结

其实我们好好想想,他们需要建立的对象不同,一个是request一个是response。

request处理可以想象成帮用户再补充一些请求(根据自己项目的业务逻辑),所以它应该要获取到所有request发送过来的数据,并且让用户感觉不到我们有帮他处理一些事情(因为地址栏信息不变)。

response可以说是响应给用户一个新的东西,它不会在意request给它发送了什么参数,除非request把数据写在同一个容器下的session中或者url中。这也是response.sendRedirct可以给用户返回容器以外的URL(比如www.baidu.com)的原因。

java的dispatcher_Java RequestDispatcher 详解相关推荐

  1. Java单元测试之JUnit4详解

    2019独角兽企业重金招聘Python工程师标准>>> Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @B ...

  2. java -jar 和 -cp详解

    java -jar 和 -cp详解 命令行执行程序 假如我们有一个程序,把它打包成Test.jar,如何运行才能成功输出Hello World package com.test; public cla ...

  3. java访问修饰符详解——学java,零基础不怕,不只要理论,更要实践+项目,a href=http://www.bjweixin.com太原维信科技提供 /a...

    java访问修饰符详解--学java,零基础不怕,不只要理论,更要实践+项目 <a href=http://www.bjweixin.com>太原维信科技提供 </a> pub ...

  4. Java编程配置思路详解

    Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...

  5. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java 8引入 ...

  6. 你真的弄明白了吗?Java并发之AQS详解

    你真的弄明白了吗?Java并发之AQS详解 带着问题阅读 1.什么是AQS,它有什么作用,核心思想是什么 2.AQS中的独占锁和共享锁原理是什么,AQS提供的锁机制是公平锁还是非公平锁 3.AQS在J ...

  7. java定时任务框架elasticjob详解

    这篇文章主要介绍了java定时任务框架elasticjob详解,Elastic-Job是ddframe中dd-job的作业模块中分离出来的分布式弹性作业框架.该项目基于成熟的开源产品Quartz和Zo ...

  8. Java RMI远程方法调用详解

    Java RMI远程方法调用详解     [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51992182 一.Java R ...

  9. Java之toString()方法详解

    Java之toString()方法详解 Java中 toString()方法在Object类中和Intent类中都有定义,作用类似,但显示形式有点区别 一.Object类中toString()方法 t ...

最新文章

  1. docker 报错 non-overlapping IPv4 address pool among the defaults to assign to the network 解决方法
  2. 没有统计学基础可以学python-没错!经典教材《统计学习导论》现在有了 Python版!...
  3. 汇编语言int 13中断02h功能Demo - 使用emu8086
  4. 图解 MySQL 索引:B-树、B+树,终于搞清楚了!
  5. 为什么做了梦第二天想不起来_元旦提醒:为什么有人睡觉爱把脚伸到被子外面?其实与身体状况有关…切勿忽视...
  6. python断言失败_python异常处理、自定义异常、断言原理与用法分析
  7. php namespace原理作用,php 命名空间(namespace)原理与用法实例小结
  8. Eclipse+PyDev 安装和配置(转)
  9. Oracle-BPM安装详解
  10. [译]MediaSession MediaController – Android TV 应用开发教程九
  11. 从天天爱消除和节奏大师的用户对于论坛形式的分析
  12. Visual Studio报错:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值...
  13. 光伏电池matlab/simulink 搭建模型 可应用于光伏发电最大功率点跟踪 mppt中
  14. 音阶频率对照表_八度音阶和频率的关
  15. 嵌入式linux开发实战——项目1认识嵌入式系统
  16. Visual Studio Code + SDCC开发51单片机 2 - 特殊之处
  17. Cisco Packet Tracer vty的两种接口
  18. cc美团_项目注册界面实现
  19. 【图片新闻】低空穿越的美军MC-130J突击队II特种作战运输机
  20. C语言 计算x的n次幂

热门文章

  1. ceph monitor----paxos算法1
  2. Codeforces #536 div2 E (1106E)Lunar New Year and Red Envelopes (DP)
  3. CCPC 2018桂林站游记
  4. YII1 MVC初认识(二)
  5. Vsftpd服务重启、暂停命令
  6. ST公司STM32F4与STM32F1的区别
  7. 刷脸取件遭小学生破解,丰巢智能柜紧急下线相关功能
  8. Fedora Workstation 30是激动人心的、功能丰富的更新
  9. 宇宙第一 IDE Visual Studio 2019 正式发布
  10. xp系统怎样安装传真服务器,XP系统下如何安装传真机 XP系统安装传真机的详细步骤[图文教程]...