`
- 浏览:
796424 次
- 性别:
- 来自:
上海
-
在servlet中,一般跳转都发生在doGet, doPost等方法里面。
一、原理中文JAVA技术网
1) redirect 方式
;F'R s/i#g9G0response.sendRedirect("/a.jsp"); 中文JAVA技术网
页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如:
跳转后浏览器地址栏变化。
这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。
这种方式是在客户端作的重定向处理。该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,让浏览器对在location中指定的URL提出请求,使浏览器显示重定向网页的内容。该方法可以接受绝对的或相对的URLs。如果传递到该方法的参数是一个相对的URL,那么Web container在将它发送到客户端前会把它转换成一个绝对的URL。public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException中文JAVA技术网KM.FB3MY
{
} response.setContentType("text/html; charset=UTF-8");
response.sendRedirect("/index.jsp");
}
2) forward方式
RequestDispatcher dispatcher = request.getRequestDispatcher("/a.jsp");
dispatcher .forward(request, response);
页面的路径是相对路径。forward方式只能跳转到本web应用中的页面上。 中文JAVA技术网
跳转后浏览器地址栏不会变化。
使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttribute
这种方式是在服务器端作的重定向。服务器往client 发送数据的过程是这样的:服务器在向客户端发送数据之前,是先将数据输出到缓冲区,然后将缓冲区中数据发送给client端。什么时候将缓冲区里的数据发送给client端呢?(1)当对来自client的request处理完,并把所有数据输出到缓冲区,(2)当缓冲区满,(3)在程序中调用缓冲区的输出方法out.flush()或response.flushbuffer(),web container才将缓冲区中的数据发送给client。
这种重定向方式是利用服务器端的缓冲区机制,在把缓冲区的数据发送到客户端之前,原来的数据不发送,将执行转向重定向页面,发送重定向页面的数据,重定向调用页的数据将被清除。如果在<JSP:FORWORD>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么这种重定向方式将不起作用,这一点应该特别注意。
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
response.setContentType("text/html; charset=UTF-8");
ServletContext sc = getServletContext();
RequestDispatcher rd = null;
rd = sc.getRequestDispatcher("/index.jsp")
{
rd.forward(request, response);
}
二、区别.
1、forward重定向是在容器内部实现的同一个Web应用程序的重定向,所以forward方法只能重定向到同一个Web应用程序中的一个资源,重定向后浏览器地址栏URL不变,而sendRedirect方法可以重定向到任何URL, 因为这种方法是修改http头来实现的,URL没什么限制,重定向后浏览器地址栏URL改变。
2、forward重定向将原始的HTTP请求对象(request)从一个servlet实例传递到另一个实例,而采用sendRedirect方式两者不是同一个application。
3、基于第二点,参数的传递方式不一样。forward的form参数跟着传递,所以在第二个实例中可以取得HTTP请求的参数。sendRedirect只能通过链接传递参数,response.sendRedirect(“login.jsp?param1=a”)。
4、sendRedirect能够处理相对URL,自动把它们转换成绝对URL,如果地址是相对的,没有一个‘/’,那么Web container就认为它是相对于当前的请求URI的。比如,如果为response.sendRedirect("login.jsp"),则会从当前servlet 的URL路径下找login.jsp: http://10.1.18.8:8081/dms/servlet/Servlet 重定向的URL: http://10.1.18.8:8081/dms/servlet/login.jsp,如果为response.sendRedirect("/login.jsp")则会从当前应用径下查找url:http://10.1.18.8:8081/login.jsp。而forward不能这样处理相对路径。
java
response.sendRedirect(); 中文JAVA技术网"{
和servlet的response.sendRedirect()方式一样。
} `
此语句前不允许有out.flush(),如果有,会有异常:
java.lang.IllegalStateException: Can't sendRedirect() after data has committed to the client.
at com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558) {
跳转后浏览器地址栏变化
如果要跳到不同主机下,跳转后,此语句后面的语句会继续执行,如同新开了线程,但是对response的操作已经无意义了;
如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;
2) response.setHeader("Location","");
此语句前不允许有out.flush(),如果有,页面不会跳转。
AJ,{ 跳转后浏览器地址栏变化 [
此语句后面的语句执行完成后才会跳转
<jsp:forward page="" />
此语句前不允许有out.flush(),如果有,会有异常:
java.lang.IllegalStateException: forward() not allowed after buffer has committed.
B0at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:134)
at
at com.caucho.jsp.PageContextImpl.forward(PageContextImpl.java:836) 中文JAVA技
跳转后浏览器地址栏不变,但是只能跳到当前主机下 中文JAVA技术网3n8VY"B.p Xd
此语句后面的语句执行完成后才会跳转
来自:http://hi.baidu.com/ccst2005/blog/item/df3e76c23a20b91e0ef4778a.html
他们的区别是:
response.sendRedirect是向客户浏览器发送页面重定向指令,浏览器接收后将向web服务器重新发送页面请求,所以执行完后浏览器的url显示的是跳转后的页面。跳转页面可以是一个任意的url(本服务器的和其他服务器的均可)。
RequestDispatcher.forward则是直接在服务器中进行处理,将处理完后的信息发送给浏览器进行显示,所以完成后在url中显示的是跳转前的页面。在forward的时候将上一页面中传送的 request和response信息一同发送给下一页面(而response.sendRedirect不能将上一页面的request和 response信息发送到下一页面)。由于forward是直接在服务器中进行处理,所以forward的页面只能是本服务器的。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
matlab
2023年新版中国医科大学考试计算机基础与应用在线作业.doc
2023年四川省计算机一级计算机基础知识题库.docx
matlab
移动开发是指为移动设备(如智能手机、平板电脑)开发应用程序的过程。常见的移动开发平台包括 Android 和 iOS,开发语言可以是 Java、Kotlin(Android)、Swift 或 Objective-C(iOS)。以下是一个基于 **Android** 的简单例子,展示如何创建一个带有按钮和文本的交互式应用。 --- ### **示例:点击按钮显示消息** #### **功能描述** - 应用包含一个按钮和一个文本框。 - 点击按钮时,文本框显示一条消息(例如 "Hello, World!")。 --- ### **开发环境** - **工具**:Android Studio - **语言**:Java 或 Kotlin - **框架**:Android SDK --- ### **代码实现(使用 Kotlin)** 1. **项目结构** - 创建一个新的 Android 项目,选择 Empty Activity 模板。 - 项目文件结构如下: ``` app/ src/ main/ java/com/example/myapp/MainActivity.kt res/layout/activity_main.xml ``` 2. **布局文件 (`activity_main.xml`)** 在 `res/layout/activity_main.xml` 中定义界面布局: ```xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
内容概要:本文详细介绍了在MATLAB环境中实现GA_PSO混合算法的方法及其应用场景。该算法将遗传算法(GA)和粒子群优化算法(PSO)相结合,用于解决复杂的多峰优化问题。文中首先定义了适应度函数Rastringin函数,并展示了如何通过MATLAB代码实现混合算法的关键步骤,包括粒子群初始化、速度和位置更新、遗传操作(交叉和变异)、以及参数设置。此外,文章还讨论了如何处理约束条件,并提供了动态可视化的实现方法,以便更好地理解和展示算法的运行过程。 适用人群:适用于具有一定MATLAB编程基础和技术背景的研究人员、工程师以及学生,特别是那些对优化算法感兴趣的人。 使用场景及目标:该混合算法主要用于解决具有多个局部极值点的复杂优化问题,特别是在高维空间中寻找全局最优解。通过结合GA的全局搜索能力和PSO的局部搜索效率,能够有效地避免陷入局部最优解,提高求解精度和稳定性。 其他说明:建议读者根据具体问题调整相关参数,如交叉概率、变异率、惯性权重等,以获得最佳性能。同时,可以通过修改目标函数来测试算法在不同类型问题上的表现。
2023年西工大秋计算机辅助设计在线作业.doc
2023年spss软件分析异常值检验实验报告.doc
内容概要:本文详细介绍了如何使用MATLAB/Simulink R2015b搭建Buck-Boost变换器的开环和闭环控制仿真模型。首先,作者解释了Buck-Boost变换器的基本构成及其在电源设计中的重要性。接着,逐步指导读者构建开环模型,包括设置关键参数如PWM频率、占空比、输入电压等,并展示了开环控制下的输出特性。随后,引入了PID控制器进行闭环控制,强调了PID参数的选择与调整方法,以及如何通过增加电压采样和误差比较来提高系统的稳定性。此外,还分享了一些常见的仿真错误及解决方案,如电感值选取不当、二极管模型过于理想等问题。最后,提供了几个有趣的实验案例,如动态改变占空比、突变负载等,以展示闭环控制的优势。 适合人群:具有一定电力电子和MATLAB/Simulink基础的技术人员或学生。 使用场景及目标:适用于希望深入理解Buck-Boost变换器工作原理及其控制策略的研究者和技术爱好者。通过动手实践,掌握开环与闭环控制的区别,学会优化PID参数,提升电源设计能力。 其他说明:文中附有多处代码片段和实用技巧,有助于读者更好地理解和应用所学知识。同时提醒读者注意不同MATLAB版本间的兼容性问题。
matlab
2023年软件测试工程师考核标准.docx
chromedriver-win64-137.0.7117.2.zip
内容概要:本文详细介绍了基于C#的工业自动化通信开发库,涵盖了多种常见的通信协议和技术。首先讨论了串口通信的基础操作及其注意事项,如波特率设置和事件处理。接着深入探讨了TCP通信,特别是针对高并发场景下的粘包处理和性能优化。文中还详细讲解了Modbus协议的应用,包括RTU和TCP两种模式的具体实现和常见问题解决方法。此外,文章涉及了数据库操作的最佳实践,尤其是EF6与MySQL的配合使用,以及数据转换技巧,如字节序处理和布尔值提取。最后,简述了消息队列(如RabbitMQ)和CAN总线的使用场景和配置要点。每个部分都配有实际代码示例,帮助开发者更好地理解和应用这些技术。 适合人群:从事工业自动化领域的软件开发工程师,尤其是那些需要频繁处理通信协议和数据交互的技术人员。 使用场景及目标:适用于需要进行PLC通信、数据采集、监控系统集成等项目的开发人员。主要目标是提高开发效率,减少因协议复杂性和数据格式差异带来的困扰,确保系统的稳定性和可靠性。 其他说明:文章不仅提供了理论指导,还分享了许多实际项目中的经验和教训,强调了在真实环境中可能会遇到的问题及解决方案。对于初学者而言,可以作为入门指南;对于有一定经验的开发者,则可以作为参考手册,帮助他们优化现有系统并避免常见错误。
内容概要:本文档详细介绍了基于灰狼优化算法(GWO)优化逐次变分模态分解(SVMD)的MATLAB项目实例。项目旨在通过GWO优化SVMD中的关键参数(如模态数、惩罚因子等),提高信号分解的精度和效率,解决传统SVMD方法面临的参数选择和优化挑战。GWO算法通过模拟灰狼捕猎行为,实现全局搜索和局部搜索的平衡,增强了SVMD在处理非线性、非平稳和含噪信号时的能力。文档涵盖了项目背景、目标与意义、挑战及解决方案、特点与创新、应用领域、效果预测图程序设计及代码示例、模型架构、算法流程、目录结构设计、注意事项、扩展方向、部署与应用、未来改进方向、总结与结论以及详细的程序设计思路和具体代码实现。 适合人群:具备一定编程基础,特别是熟悉MATLAB和信号处理技术的研发人员,以及从事机械故障诊断、生物医学信号分析、地震信号处理、无线通信和金融市场分析等领域工作的工程师和研究人员。 使用场景及目标:①优化SVMD中的参数设置,提高信号分解的精度和效率;②处理非线性、非平稳和含噪信号,提取有用的特征;③应用于机械故障诊断、生物医学信号分析、地震信号处理、无线通信和金融市场分析等领域;④提供信号噪声抑制功能,减少噪声干扰,确保信号中的有用信息被充分提取;⑤拓宽算法的应用范围,为相关领域的信号处理提供高效、精确的工具。 其他说明:本项目不仅提供了详细的理论背景和技术实现,还附带了完整的代码示例和GUI设计,便于用户实践和调试。项目强调了数据质量和参数调整的重要性,同时对未来改进方向进行了展望,如引入深度学习技术、多模态信号融合、实时故障诊断功能、端到端加速、数据隐私保护与合规性、扩展到边缘计算平台、自动化模型训练与优化、系统的自我修复能力等。通过本项目的成功实现,可以为信号处理领域提供一种更加高效、精确、可靠的解决方案。
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
2023年操作系统题库.docx
内容概要:本文档介绍了基于MATLAB实现的建设工程风险决策多目标优化项目,该研究结合云模型和遗传算法,旨在优化建筑工程中的风险管理决策。项目首先阐述了背景与目标,强调了优化建筑工程风险管理、提高成本效益、增强风险预测能力的重要性。接着,文档详细描述了项目挑战及解决方案,包括模型准确性、计算效率、不确定性处理等方面。项目特点与创新在于综合运用云模型和遗传算法,引入自适应优化算法,并基于大数据进行风险预测。应用领域涵盖建筑工程管理、制造业风险决策、能源与环境管理、交通运输行业和金融风险管理。文档还展示了项目的效果预测图、程序设计及代码示例,涵盖了数据预处理、云模型风险评估、遗传算法优化、多目标优化决策和结果可视化等模块。最后,文档讨论了项目的未来改进方向,如模型多样化、云平台优化、增强智能决策支持等。 适合人群:具备一定编程基础,尤其是熟悉MATLAB的工程师和研究人员,以及从事建筑工程管理、风险管理和多目标优化领域的专业人士。 使用场景及目标:①理解云模型和遗传算法在建筑工程风险管理中的应用;②掌握多目标优化的具体实现方法和技术细节;③学习如何构建和优化基于云模型和遗传算法的风险决策系统;④应用于实际建筑工程管理和其他相关领域的风险管理决策。 其他说明:此项目不仅为建筑工程的风险管理提供了科学依据,还为其他行业的多目标决策优化提供了技术参考。项目代码详尽,从环境准备、数据处理到模型训练和评估均有详细示例,便于学习和实践。同时,项目强调了数据质量和模型参数选择的重要性,为后续研究和应用提供了宝贵的经验和指导。
matlab
基于stm32的控制底层
蓝桥杯javab组真题合集以上是蓝桥杯Java B组部分真题的合集,涵盖了2022年、2023年和2024年的部分题目。这些题目涵盖了常见的算法和数据结构问题,如动态规划、贪心算法、字符串处理、矩阵操作等。通过这些真题的练习,可以帮助参赛者更好地准备蓝桥杯比赛,提升编程能力和解题技巧。