转:http://www.cnblogs.com/phpzxh/archive/2010/02/01/1661137.html
1.request.getRequestDispatcher()是请求转发,前后页面共享一个request ;
response.sendRedirect()是重新定向,前后页面不是一个request。
request.getRequestDispather();返回的是一个RequestDispatcher对象。
2.RequestDispatcher.forward()是在服务器端运行;
HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成.
所以RequestDispatcher.forward()对于浏览器来说是“透明的”;
而HttpServletResponse.sendRedirect()则不是。
3.ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径; 而
ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径。因为
ServletRequest具有相对路径的概念;而ServletContext对象无次概念。
RequestDispatcher对象从客户端获取请求request,并把它们传递给服务器上的servlet,html或
jsp。它有两个方法:
1.void forward(ServletRequest request,ServletResponse response)
用 来传递request的,可以一个Servlet接收request请求,另一个Servlet用这个request请求来产生response。 request传递的请求,response是客户端返回的信息。forward要在response到达客户端之前调用,也就是 before response body output has been flushed。如果不是的话,它会报出异常。
2.void include(ServletRequest request,ServletResponse response)
用来记录保留request和response,以后不能再修改response里表示状态的信息。
如果需要把请求转移到另外一个Web App中的某个地址,可以按下面的做法:
1. 获得另外一个Web App的ServletConext对象(currentServletContext.getContext(uripath)).
2. 调用ServletContext.getRequestDispatcher(String url)方法。
eg:ServletContext.getRequestDispatcher("smserror.jsp").forward(request,response);
http://lanew.blog.ccidnet.com/blog-htm-do-showone-type-blog-itemid-3690834-uid-327434.html
二者区别:
response.sendRedirect(url)跳转到指定的URL地址,产生一个新的request,所以要传递参数只有在url后加参
数,如:
url?id=1.
request.getRequestDispatcher(url).forward(request,response)是直接将请求转发到指定URL,所以该请求
能够直接获得上一个请求的数据,也就是说采用请求转发,request对象始终存在,不会重新创建。而
sendRedirect()会新建request对象,所以上一个request中的数据会丢失。
更具体来说就是这样的:
redirect 会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个requeset给服务器, 然后
服务器发新的response给浏览器. 这时页面收到的request是一个新从浏览器发来的.
forward 发生在服务器内部, 在浏览器完全不知情的情况下发给了浏览器另外一个页面的response. 这时页面
收到的request不是从浏览器直接发来了,可能己经用request.setAttribute在request里放了数据.在转到的页
面可直接用request.getAttribute获得数据。
最基本的用法就如上了,其他的一些应注意的地方如下:
跳转方式
http://localhost:8080/Test应用
运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何
URL。
表单form的action="/uu";sendRedirect("/uu");表示相对于服务器根路径。如http://localhost:8080/Test应
用(则提交至http://localhost:8080/uu);
Forward代码中的"/uu"则代表相对与WEB应用的路径。如http://localhost:8080/Test应用(则提交至
http://localhost:8080/Test/uu);
(运用RequestDispatcher接口的Forward)方法
forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,
同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过
response.setAttribute("name",name)来传至下一个页面.
重定向后浏览器地址栏URL不变.
只有在客户端没有输出时才可以调用forward方法。如果当前页面的缓冲区(buffer)不是空的,那么你在调用
forward方法前必须先清空缓冲区。
"/"代表相对与web应用路径
RequestDispatcher rd = request.getRequestDispatcher("/ooo");
rd.forward(request, response);提交至http://localhost:8080/Test/ooo
RequestDispatcher rd = getServletContext().getRequestDispatcher("/ooo");
rd.forward(request, response);提交至http://localhost:8080/Test/ooo
RequestDispatcher rd =getServletContext().getNamedDispatcher("TestServlet");(TestServlet为一个
<servlet-name>)
rd.forward(request, response);提交至名为TestServlet的servlet
如果在<jsp:forward>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,
这一点应该特别注意。
另外要注意:它不能改变浏览器地址,刷新的话会导致重复提交
从http://localhost:8080/Test/gw/page.jsp中转发
<jsp:forward page="OtherPage.jsp"/>在JSP页面被解析后转换成pageContext.forward("OtherPage.jsp");
"/OtherPage.jsp"提交到http://localhost:8080/Test/OtherPage.jsp
"OtherPage.jsp"提交到http://localhost:8080/Test/gw/OtherPage.jsp
(运用HttpServletResponse接口的sendRedirect)方法302
是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,
同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件.
假设转发代码包含于注册的servlet-url为/ggg/tt;jsp为/ggg/tt.jsp:
绝对路径:response.sendRedirect("http://www.brainysoftware.com
根路径:response.sendRedirect("/ooo")发送至http://localhost:8080/ooo
相对路径:response.sendRedirect("ooo")发送至http://localhost:8080/Test/ggg/ooo,
sendRedirect等同于此方式
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String newLocn = "/newpath/jsa.jsp";
response.setHeader("Location",newLocn);
(Meta Refresh)方法200
这种方法是由HTML提供的,Meta本身就是HTML标签。使用方法是:<meta http-equiv="refresh" content="5;
url=http://www.dreamdu.com/" />
相应的java代码
String content=stayTime+";URL="+URL;
response.setHeader("REFRESH",content);
------------------------------------------------------------------------------------------------
--------------------------
使用response.sendRedirect()地址栏将改变
使用request.getRequestDispatcher().forward(request,response)地址栏中的信息保持不变.
------------------------------------------------------------------------------------------------
--------------------------
request.setAttribute存的东西
只用通过方法2跳转 才能在新页取出来
相关推荐
实训商业源码-Uniapp软件库前后端源码-毕业设计.zip
内容概要:本文旨在为初学者提供一份详尽的矢量控制(FOC)入门指南,帮助读者自主编写高质量的FOC程序。文章不仅涵盖了矢量控制的基础理论,如电机原理、算法原理及其应用,还包括详细的程序编写指导,强调代码结构的清晰性和严谨性。此外,提供了丰富的实践资源,如MATLAB仿真、硬件原理图、通信协议解读文档、上位机操作指导文档等,帮助读者进行实际操作和参数调整。通过系统化的指导和支持,使读者能够在实践中掌握FOC的核心技术,最终实现电机的最佳运行效果。 适合人群:电气工程领域的初学者和技术爱好者,特别是希望深入了解矢量控制技术并具备一定编程基础的人群。 使用场景及目标:①理解和掌握矢量控制的基本理论;②编写结构清晰、严谨的FOC程序;③通过实践验证程序的正确性和可靠性;④利用配套工具进行参数调整和优化,提升电机性能。 其他说明:本文提供的资源不仅限于理论讲解,还包括大量实用的操作指南和工具,帮助读者在实践中快速成长。
内容概要:本文详细介绍了基于STM32的智能窗帘电机控制系统的设计与实现。系统通过光照传感器检测环境光照强度,并根据预设阈值自动控制窗帘的开合。主要内容涵盖项目背景、需求分析、硬件和软件设计、代码实现及仿真测试。硬件部分包括STM32微控制器、电机驱动模块、电机和光照传感器;软件方面则使用了C语言(标准库)在Keil5环境下编写程序,实现了光照强度读取、阈值比较和电机控制等功能。通过Proteus8.9进行电路仿真,验证了系统的正确性和可靠性。 适合人群:对嵌入式系统开发感兴趣的电子工程师、智能家居爱好者、高校相关专业学生。 使用场景及目标:适用于家庭或办公环境中的智能窗帘控制系统设计与开发,旨在提高居住舒适度和能源利用效率。 其他说明:文中提供了详细的代码示例和仿真步骤,帮助读者更好地理解和实践该项目。
电子设计竞赛相关资源
内容概要:本文介绍了西门子1200 PLC在水处理领域的具体应用,重点解析了其程序的功能块和触摸屏程序。PLC程序采用SCL语言编写,涵盖了模拟量换算、滤波、时间换算以及Modbus TCP通讯等功能模块。此外,文中还提供了电气原理图和HMI程序,便于理解和操作。通过仿真实验,用户可以深入学习PLC的工作原理和控制逻辑,掌握水处理工艺的关键控制任务。 适合人群:从事工业自动化、水处理工程的技术人员,尤其是对PLC编程和HMI设计感兴趣的工程师。 使用场景及目标:适用于需要深入了解PLC编程和水处理系统的专业人士,旨在帮助他们掌握SCL编程技巧、功能块的应用以及Modbus TCP通讯协议的实际运用。 其他说明:该程序不仅有助于学习和实验,还可以直接应用于实际工程项目中,提高水处理过程的自动化水平和效率。
区域卷积神经网络(R-CNN)系列 PyTorch版
实训商业源码-XYCMS_SW_v3.8-毕业设计.zip
内容概要:本文详细介绍了注塑机S7-1200 PLC控制系统的工作原理与具体流程,涵盖从锁合模到顶出的八大工序。针对每一步骤提供了具体的编程实例和技术要点,如锁合模的速度控制、射台前移的位置精度、多段注射的配方管理和保压冷却的时间压力双闭环控制等。此外,还分享了实际操作中的注意事项和优化建议,确保系统的稳定性和高效性。 适合人群:从事自动化控制领域的工程师、技术人员以及对PLC编程感兴趣的从业者。 使用场景及目标:适用于需要深入了解注塑机PLC控制系统的设计、编程和调试的专业人士。帮助他们掌握S7-1200 PLC的具体应用技巧,提高设备运行效率并减少故障发生率。 其他说明:文中不仅提供理论知识,还包括大量实用的编程代码片段和实战经验分享,有助于读者更好地理解和应用于实际工作中。
json-tutorial-master.zip
南京大学研究生PPT模板申博陈述2(论文答辩PPT模板)
内容概要:本文深入探讨了DCM(断续导通模式)与CRM(临界导通模式)混合模式PFC(功率因数校正)的技术细节及其应用场景。文章首先介绍了两种模式的工作特性:DCM模式下电感电流归零时进行开关操作,而CRM模式则在电流达到峰值时立即切换。接着详细解释了混合模式的核心——动态切换机制,即根据负载情况自动选择合适的模式,从而优化性能并提高效率。文中提供了具体的C语言代码片段展示如何实现这种智能切换,并强调了实际应用中需要注意的问题,如MOSFET驱动时序、电流采样方法以及环路补偿参数设置等。最后指出,虽然现代数字控制器已经集成了这一功能,但亲手实践仍然是掌握这项技术的最佳途径。 适合人群:对电力电子技术感兴趣的工程师和技术爱好者,尤其是那些希望深入了解PFC技术的人群。 使用场景及目标:适用于需要高效、稳定电源解决方案的设计项目,旨在帮助工程师们理解和应用DCM/CRM混合模式PFC技术,以提升系统的功率因数和降低谐波失真。 阅读建议:对于想要深入理解DCM/CRM混合模式PFC的人来说,应该仔细研读本文提供的理论知识和实践经验,同时尝试动手实验,以便更好地掌握相关技术和技巧。
内容概要:本文档详细介绍了STM32F407ZET6的延时操作及时钟控制系统。首先阐述了三种主要时钟源(HSI、HSE、PLL)以及两种次级时钟源(LSI、LSE)的功能与应用场景,强调了时钟源的灵活配置对降低功耗的重要性。接着解析了时钟体系树结构,包括PLL的倍频功能和预分频设置。文档还深入讲解了延时或定时器的工作原理,具体描述了通过系统滴答时钟(SysTick)实现延时的步骤,涉及控制和状态寄存器、重载值寄存器和当前值寄存器的作用及其操作方法。最后,提供了具体的延时函数代码示例(`delay_ms` 和 `delay_us`),展示了如何利用SysTick实现毫秒级和微秒级的精确延时。 适合人群:具有一定嵌入式系统开发基础的技术人员,特别是从事STM32系列单片机开发的工程师或学生。 使用场景及目标:①理解STM32的时钟源配置及其对系统性能的影响;②掌握延时函数的设计与实现,特别是在实际项目中需要精准控制延时时间的应用场景;③熟悉SysTick定时器的寄存器配置和操作流程。 其他说明:文档不仅提供了理论知识,还结合了实际代码示例,帮助读者更好地理解和应用所学内容。建议读者在学习过程中多加练习,尤其是对延时函数的调试和优化,以便在实际开发中能够灵活运用。
自制时间组件弹层,可以选择任意时间
内容概要:本文详细介绍了基于MATLAB m编程的发动机最优工作曲线计算程序(OOL)及其配套的电机效率Map绘制程序。通过这两个程序,用户可以根据发动机的万有特性数据计算出最优工作点,使发动机燃油消耗最小化,并能绘制出电机效率Map以优化电机使用。文章解释了程序的功能、使用方法、背后的算法和数学模型,并给出了简单的代码示例。此外,还强调了这些工具对提升设备性能的重要意义。 适合人群:从事汽车工程、机械工程及相关领域的研究人员和技术人员,尤其是那些希望优化发动机和电机性能的专业人士。 使用场景及目标:适用于需要评估和改进发动机燃油经济性和电机效率的研究项目或工业生产环节。主要目标是通过科学的方法找到最佳操作条件,减少燃料浪费,提高能源利用率。 其他说明:文中提供的代码仅为示例,实际应用时需根据具体情况调整。同时提醒购买者注意,此类技术资料一经售出不予退款。
内容概要:本文档详细介绍了在PCS7系统中使用C脚本编写的日报表源程序及其在LISTVIEW控件中的显示方法。主要内容涵盖日报表的功能实现流程,包括获取当前时间、连接数据库、执行查询以及将查询结果显示到LISTVIEW控件中。此外,还特别强调了数据填充过程中的一些注意事项和技术细节,如时间格式转换、状态列的颜色设置等,并提供了避免常见错误的方法,例如数据库连接未关闭、空查询结果处理不当等问题。同时指出,在PCS7环境中虽然可以使用部分C++语法,但不应过度依赖高级特性,以免引发兼容性问题。 适用人群:从事PCS7系统开发与维护的技术人员,尤其是对C脚本有一定了解并希望深入理解报表生成机制的工程师。 使用场景及目标:适用于需要在PCS7系统中实现自动化日报表生成功能的企业或机构。主要目标是在不影响系统性能的前提下,提高数据展示效率,减少人工干预,确保数据准确性。 其他说明:建议开发者在实际项目中充分考虑各种边界情况,适当增加异常处理机制,以增强系统的健壮性和用户体验。
二、项目计划书(1).docx
内容概要:本文详细介绍了涂布机自动化控制系统的设计与实现过程。首先,文章阐述了涂布机程序源代码的编写,这是整个自动化系统的核心部分,涵盖了设备初始化、指令读取、动作执行、状态更新和数据保存等功能模块。其次,重点讲解了三菱Q系列PLC(特别是Q03UDE型号)的应用,包括接线、编程及其对涂布机电机和传感器的精确控制。接着,探讨了威纶通触摸屏MT8102iE的界面设计,强调了其作为人机交互界面的作用,如显示设备状态、参数设置和报警信息。最后,提供了详细的电路图纸及注意事项,确保系统的稳定性和安全性。通过合理的程序设计、硬件选型和接线布局,最终实现了涂布机的自动化控制和智能化管理,显著提升了生产效率和产品质量。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是那些对PLC编程和人机界面设计有一定了解的人群。 使用场景及目标:适用于涂布机及其他类似自动化生产设备的研发、安装和维护过程中,帮助技术人员理解和掌握PLC编程技巧、触摸屏应用方法以及电路设计要点,从而提高设备的可靠性和工作效率。 其他说明:文中提供的程序源代码和电路图纸为实际工程应用提供了宝贵的参考资料,有助于读者更好地理解和实践涂布机自动化控制系统的构建。
实训商业源码-uniapp-打通版-毕业设计.zip
内容概要:本文详细探讨了T型三电平逆变器的仿真建模及其关键技术,特别是闭环控制和三电平空间矢量脉宽调制(SVPWM)算法。文中首先介绍了T型三电平逆变器相较于传统两电平的优势,如降低开关损耗约30%。接着重点讲解了在Matlab/Simulink环境下构建T型三电平逆变器仿真模型的关键步骤,包括中点电位平衡处理、SVPWM算法中矢量选择及时序优化,以及PI控制器的设计细节。此外,还讨论了常见的仿真问题及解决方案,如死区时间补偿对谐波失真率的影响。最终验证结果显示,在负载突变情况下,输出电压总谐波失真度保持在3%以内,动态响应时间小于2毫秒,中点电位波动控制在±2%范围内。 适用人群:从事电力电子系统设计的研究人员和技术工程师,尤其是关注新能源并网应用领域的专业人士。 使用场景及目标:适用于需要深入了解T型三电平逆变器工作原理及其控制策略的人群,旨在帮助他们掌握如何利用MATLAB/Simulink进行高效精准的仿真模拟,从而为实际工程项目提供理论支持和技术指导。 其他说明:文中提供了部分核心代码片段作为辅助说明,便于读者更好地理解和实践相关概念。同时推荐了一篇关于T型三电平逆变器损耗分析的专业文献供进一步学习。
Tim's+Single+Pulse+Response.pdf