java的dispatcher_Java RequestDispatcher 详解
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 详解相关推荐
- Java单元测试之JUnit4详解
2019独角兽企业重金招聘Python工程师标准>>> Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @B ...
- java -jar 和 -cp详解
java -jar 和 -cp详解 命令行执行程序 假如我们有一个程序,把它打包成Test.jar,如何运行才能成功输出Hello World package com.test; public cla ...
- java访问修饰符详解——学java,零基础不怕,不只要理论,更要实践+项目,a href=http://www.bjweixin.com太原维信科技提供 /a...
java访问修饰符详解--学java,零基础不怕,不只要理论,更要实践+项目 <a href=http://www.bjweixin.com>太原维信科技提供 </a> pub ...
- Java编程配置思路详解
Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...
- Java 8 Stream API详解--转
原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java 8引入 ...
- 你真的弄明白了吗?Java并发之AQS详解
你真的弄明白了吗?Java并发之AQS详解 带着问题阅读 1.什么是AQS,它有什么作用,核心思想是什么 2.AQS中的独占锁和共享锁原理是什么,AQS提供的锁机制是公平锁还是非公平锁 3.AQS在J ...
- java定时任务框架elasticjob详解
这篇文章主要介绍了java定时任务框架elasticjob详解,Elastic-Job是ddframe中dd-job的作业模块中分离出来的分布式弹性作业框架.该项目基于成熟的开源产品Quartz和Zo ...
- Java RMI远程方法调用详解
Java RMI远程方法调用详解 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51992182 一.Java R ...
- Java之toString()方法详解
Java之toString()方法详解 Java中 toString()方法在Object类中和Intent类中都有定义,作用类似,但显示形式有点区别 一.Object类中toString()方法 t ...
最新文章
- docker 报错 non-overlapping IPv4 address pool among the defaults to assign to the network 解决方法
- 没有统计学基础可以学python-没错!经典教材《统计学习导论》现在有了 Python版!...
- 汇编语言int 13中断02h功能Demo - 使用emu8086
- 图解 MySQL 索引:B-树、B+树,终于搞清楚了!
- 为什么做了梦第二天想不起来_元旦提醒:为什么有人睡觉爱把脚伸到被子外面?其实与身体状况有关…切勿忽视...
- python断言失败_python异常处理、自定义异常、断言原理与用法分析
- php namespace原理作用,php 命名空间(namespace)原理与用法实例小结
- Eclipse+PyDev 安装和配置(转)
- Oracle-BPM安装详解
- [译]MediaSession MediaController – Android TV 应用开发教程九
- 从天天爱消除和节奏大师的用户对于论坛形式的分析
- Visual Studio报错:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值...
- 光伏电池matlab/simulink 搭建模型 可应用于光伏发电最大功率点跟踪 mppt中
- 音阶频率对照表_八度音阶和频率的关
- 嵌入式linux开发实战——项目1认识嵌入式系统
- Visual Studio Code + SDCC开发51单片机 2 - 特殊之处
- Cisco Packet Tracer vty的两种接口
- cc美团_项目注册界面实现
- 【图片新闻】低空穿越的美军MC-130J突击队II特种作战运输机
- C语言 计算x的n次幂
热门文章
- ceph monitor----paxos算法1
- Codeforces #536 div2 E (1106E)Lunar New Year and Red Envelopes (DP)
- CCPC 2018桂林站游记
- YII1 MVC初认识(二)
- Vsftpd服务重启、暂停命令
- ST公司STM32F4与STM32F1的区别
- 刷脸取件遭小学生破解,丰巢智能柜紧急下线相关功能
- Fedora Workstation 30是激动人心的、功能丰富的更新
- 宇宙第一 IDE Visual Studio 2019 正式发布
- xp系统怎样安装传真服务器,XP系统下如何安装传真机 XP系统安装传真机的详细步骤[图文教程]...