`

Spring4MVC之请求转发和重定向

 
阅读更多

 

 

关于重定向

 

一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理

如果返回的字符串中带 forward: 或 redirect: 前缀时,SpringMVC 会对他们进行特殊处理:

将 forward: 和redirect: 当成指示符,其后的字符串作为 URL 来处理

redirect:success.jsp:会完成一个到 success.jsp 的重定向的操作

forward:success.jsp: 会完成一个到 success.jsp 的转发操作

 

示例

 

1. 添加请求handler

 

/**
 * 类定义处标记的@RequestMapping 限定了处理器类可以处理所有 URI 为 /user 的请求,它相对于 WEB 容器部署的根路径
 * 
 * @author RabbitX
 */
@Controller
@SessionAttributes(value={"user","time"},types={String.class})
@RequestMapping("/user")
public class UserController {
    	/**
	 * 请求转发和重定向之转发
	 * 
	 */
	@RequestMapping("/testForward")
	public String testForward()
	{
		System.out.println("--------------testForward----------------");
		return "forward:/pages/login.jsp";
	}
	
	/**
	 * 请求转发和重定向之重定向
	 * 
	 */
	@RequestMapping("/testRedirect")
	public String testRedirect()
	{
		System.out.println("--------------testRedirect----------------");
		return "redirect:/pages/login.jsp";
	}
}

 

 

2. 添加jsp内容

 

<li><a href="user/testForward">请求转发和重定向之转发</a></li>
<li><a href="user/testRedirect">请求转发和重定向之重定向</a></li>

 

原理分析

 

1. 在UserController的testForward或testRedirect方法中添加断点调试;

2. 启动调试

 

在调试栈中选中:DispatcherServlet.doDispatch(HttpServletRequest, HttpServletResponse) line: 945

 

 

mv = ha.handle(processedRequest, response, mappedHandler.getHandler());

 

 

进入上面代码后面的方法processDispatchResult:

 

 

processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);

 

进入上面方法内的方法render:

 

 

render(mv, request, response);

 

 

进入上面方法内的方法resolveViewName:

 

view = resolveViewName(mv.getViewName(), mv.getModelInternal(), locale, request);

 

进入上面方法内的方法resolveViewName:

 

View view = viewResolver.resolveViewName(viewName, locale);

 

进入方法resolveViewName时,选择类AbstractCachingViewResolver

进入类AbstractCachingViewResolver的方法resolveViewName中的方法createView:

 

return createView(viewName, locale);

 

或者

 

view = createView(viewName, locale);

 

进入方法createView时,选择实现类UrlBasedViewResolver

 

	@Override
	protected View createView(String viewName, Locale locale) throws Exception {
		// If this resolver is not supposed to handle the given view,
		// return null to pass on to the next resolver in the chain.
		if (!canHandle(viewName, locale)) {
			return null;
		}
		// Check for special "redirect:" prefix.
		if (viewName.startsWith(REDIRECT_URL_PREFIX)) {
			String redirectUrl = viewName.substring(REDIRECT_URL_PREFIX.length());
			RedirectView view = new RedirectView(redirectUrl, isRedirectContextRelative(), isRedirectHttp10Compatible());
			return applyLifecycleMethods(viewName, view);
		}
		// Check for special "forward:" prefix.
		if (viewName.startsWith(FORWARD_URL_PREFIX)) {
			String forwardUrl = viewName.substring(FORWARD_URL_PREFIX.length());
			return new InternalResourceView(forwardUrl);
		}
		// Else fall back to superclass implementation: calling loadView.
		return super.createView(viewName, locale);
	}

  

阅读此段代码,可以知道SpringMVC对以redirect:和forward:开头的返回值进行了特殊处理。即进行了请求转发和重定向的处理。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    请求转发与重定向的区别

    4. 学习框架:许多Web框架如Spring MVC提供了高级的导航控制,它们底层可能用到了请求转发和重定向。了解这些框架如何封装和使用这些概念,可以让你的编程更高效。 5. 思考安全性:重定向可能被恶意利用,例如开放...

    (代码)SpringMVC第6讲:请求转发和重定向

    在Spring MVC框架中,请求转发和重定向是两种常见的页面跳转方式,它们在处理用户请求和构建应用程序的流程控制中扮演着重要角色。本文将深入探讨这两种技术,并结合实际的代码示例来阐述其工作原理和使用场景。 ...

    详解spring mvc 请求转发和重定向

    相比之下,请求重定向(Redirecting)则是通过`HttpServletResponse.sendRedirect()`方法完成的。重定向涉及到两次HTTP请求: 1. 服务器向浏览器发送一个响应,指示浏览器发起一个新的HTTP请求到指定的URL。 2. ...

    转发和重定向的区别

    在工具选择上,如Spring MVC框架中,可以通过`RedirectAttributes`来方便地实现重定向,并传递附加信息。 总之,转发和重定向都是Web开发中的重要概念,它们各有优缺点,理解其工作原理并合理应用,能够帮助我们...

    SpringMVCDemo:Spring MVC 框架知识案例

    7.Spring MVC 请求转发与请求重定向案例 8.Spring MVC 下载 Excel 文档的需求案例 9.Spring MVC RESTful 风格的请求方式案例 10.Spring + Spring MVC + JDBCTemplate 整合并通过 RESTful 风格获取所有用户信息案例 ...

    spring3.0_mvc框架_05_相关注解的用法_ModelAndView的用法_请求转发和重定向_方法返回值处理.flv

    这里是我自学 springmvc 框架的基本教程,按照这个教程可以轻松的掌握SpringMvc的搭建和使用,同时下一步本人会将 SpringMVC和数据库操作集成学习也进行分项,本次学习共八节,这里是第五节。 剩余章节,后续更新

    spring学习: spring mvc在redirect请求中传递数据

    这涉及到Spring MVC的请求转发和重定向概念,以及如何在这些操作中保持请求参数或模型属性。 Spring MVC是Spring框架的一部分,专门用于构建Web应用程序。它提供了模型-视图-控制器(MVC)架构模式的实现,简化了...

    Spring MVC 教程快速入门 深入分析

    十四、Spring MVC转发与重定向:详细讲解了在Spring MVC中如何使用转发和重定向操作来处理请求的导航。 十五、Spring MVC处理ajax请求:讲解了如何在Spring MVC中处理异步JavaScript和XML(AJAX)请求,包括配置和...

    Spring MVC入门教程

    十四、spring mvc 转发与重定向 十五、spring mvc 处理ajax请求 十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean 十八、spring mvc 多视图控制器 十九、 &lt;mvc:annotation-...

    Spring MVC 教程 快速入门 深入分析

    十四、spring mvc 转发与重定向 十五、spring mvc 处理ajax请求 十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean 十八、spring mvc 多视图控制器 十九、 &lt;mvc:annotation-...

    基于框架的Web开发-处理数据模型、转发和重定向.docx

    本文将详细讲解如何处理模型数据、转发和重定向,这些都是Spring MVC中核心的流程控制机制。 首先,`@RequestMapping`注解是Spring MVC用来映射HTTP请求到处理方法的关键工具。它允许我们将HTTP请求路径与特定的...

    Spring_MVC_教程_快速入门_深入分析 高清文字版PDF

    为了提高用户体验,Spring MVC提供了对静态资源(如图片、JavaScript、CSS等)的支持,并且能够处理转发和重定向操作。此外,它还支持Ajax请求的处理,以及通过&lt;mvc:annotation-driven/&gt;标签启用注解驱动的请求映射...

    spring mvc重定向导致内存溢出解决方案

    ### Spring MVC 重定向导致内存溢出解决方案 在Spring MVC框架中进行页面重定向...综上所述,通过合理的策略和技术手段,我们可以在Spring MVC项目中有效避免由重定向导致的内存溢出问题,提高系统的稳定性和可靠性。

    Spring_MVC 3.0整理汇总

    七至二十,这部分主要涵盖了Spring_MVC中的各种核心特性,如访问静态资源、请求映射、拦截器的使用、异常处理、单元测试、转发与重定向、处理AJAX请求、配置文件管理、获取Spring管理的bean、多视图控制器等。...

    Spring mvc 教程

    - **异步请求的处理**:Spring MVC 支持异步处理,可以提高应用的响应性和性能。 - **对控制器测试**:Spring 提供了工具和支持来方便地测试控制器的行为。 #### 处理器映射 (Handler Mapping) - **使用 ...

    spring mvc

    #### 十四、Spring MVC 转发与重定向 **转发** 是指服务器内部的页面跳转,不会改变浏览器地址栏中的 URL;而 **重定向** 会重新加载一个新的请求,浏览器地址栏中的 URL 会发生变化。 #### 十五、Spring MVC 处理...

    Spring_MVC_教程_快速入门_深入分析

    spring mvc 核心类与接口 spring mvc 核心流程图 spring mvc DispatcherServlet说明 spring mvc 双亲上下文的说明 springMVC-mvc.xml 配置...spring mvc 转发与重定向 如何给spring3 MVC中的Action做JUnit单元测试?

    Spring Portlet MVC参考文档(中文版)

    Spring Portlet MVC作为支持Portlet开发的框架,其独特之处在于并未将Portlet处理简单转换为Servlet支持的方式,而是专门针对JSR-168规范设计,以适应Portlet特有的生命周期和请求处理模式。此文档基于Spring框架...

Global site tag (gtag.js) - Google Analytics