在采用SpringMVC架构构建项目的过程中,一旦Controller层面完成了对请求的操作并意图转向其他资源,可运用请求转发及重定位机制达成目的,具体应用场景包括但不限于转向至页面或其他处理单元。

回顾基于Servlet的开发实践,我们了解到这一过程由request和response对象共同协作执行。

而在SpringMVC构架下,则另有一套运作规则。通常而言,若Controller方法的返回结果为字符串类型,该字符串将被视为逻辑视图名称,进而结合视图解析器设定的路径生成实际视图。但值得注意的是,如若返回的字符串内含有“forward”或“redirect”标识符,SpringMVC则会识别其后紧跟的部分为URL地址予以处理,并在此过程中绕过视图解析器环节,直接于项目根目录搜索指向的目标页面。

SpringMVC体系下的转发与重定向功能可通过双轨途径实施,一是沿袭传统的Servlet模式,二是利用SpringMVC自身集成的功能模块。

(1)遵循传统手段实行转发与重定位

让我们以前往index.jsp页面为例,揭示此法的具体应用:

请求转发的实际编码演示:

重定向行为的表现形式:

(2)采纳SpringMVC框架内置的转发与重定向方案

SpringMVC已将Servlet中原有的转发与重定向前置工作加以封装,使得开发者能够更为便捷地完成这两项任务。

以下展示了运用request对象传递参数的同时执行请求转发的过程,此时浏览器显示的URL保持不变。

接下来则是关于重定向动作的展示,尽管也可尝试借助request对象传参,但实际上这些参数并不会出现在后续请求地址中。面临此种需求——即希望在重定向阶段也能携带请求参数,有两种解决方案可供选择:

方法一:先将参数存入Session对象

方法二:利用RedirectAttributes类

采取第二种策略时,需在Controller层次负责重定向的方法签名处引入RedirectAttributes类型的参数,继而将待传输的数据填充进RedirectAttributes类所提供的addFlashAttribute方法之中。实质上,RedirectAttributes背后的核心原理同样是依赖Session进行数据暂存。

共性特征:

两者均为Web应用程序中常见的资源切换手法;

差异之处:

请求转发特性:
在服务器内部完成跳转流程;
浏览器地址栏不发生变更;
可依托request作用域传递信息;

重定向特点:
需浏览器自行触发针对新目标的请求行动;
地址栏内的URL会发生相应的更新;
不支持经由request作用域传送数据。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。