spring MVC (4) spring MVC 的重定向和源码解析

本文详细解析了Spring MVC中重定向的工作原理,从Handler方法到DispatcherServlet处理流程,再到视图解析过程,深入探讨了视图名称以redirect:开头时如何触发重定向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,示例
1,在handler类中添加方法如下:

//重定向
    @RequestMapping("/testRedirect")
    public String testRedirect() {
        System.out.println("testRedirect");
        return "redirect:/index.jsp";
    }

二,源码解析
1,进入DispatcherServlet的doDispatch方法
2,找到视图mv
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
3,进入processDispatchResult方法
processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);
4,进入渲染视图 方法为render
render(mv, request, response);
5,进入解析视图 方法为resolveViewName
view = resolveViewName(mv.getViewName(), mv.getModelInternal(), locale, request);
6,再进入如下代码中的resolveViewName,是一个接口
View view = viewResolver.resolveViewName(viewName, locale);
7,找到resolveViewName接口的实现类AbstractCachingViewResolver
8,进入创建视图 createView方法 是一个抽象类,找到他的继承子类UrlBasedViewResolver
return createView(viewName, locale);
9,createView的继承子类UrlBasedViewResolver分析
在UrlBasedViewResolver的createView方法中可以看到如下代码

//如果返回名字是以redirect开头就返回一个redirect视图,如果返回名字以forWord开头就返回InternalResourceView视图
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);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值