SpringMVC隐藏的小技巧

本文解释了SpringMVC框架中,当Controller方法没有显式设置视图且未使用Response对象时,如何自动选择默认视图名并将其解析到JSP页面的过程。
// 获取视图名,如果没有设置视图名,返回一个默认的视图名,就是url对应的字符串当做视图
// 在处理请求时会做的事情
org.springframework.web.servlet.DispatcherServlet.applyDefaultViewName(processedRequest, mv);{
    // 如果没有异常,并且modeAndView中没有设置视图
    // 在Controller的方法中,没有添加ResponseBody注解,也没有添加String返回值,也没有使用Response响应
    // 此时springmvc默认会返回一个空的modeAndView,符合这个条件
    // 例如: @GetMapping("haha") public void haha(HttpServletRequest req) {  req.setAttribute("luck", "luck");}
    // 视图名会被解析成haha,因为不管有没有返回值,都会返回一个ModelAndView
    // 大胆猜测,如果我的方法返回void,然后将设置属性到request,或者model中,然后SpringMVC会自动跳转到路径对应的jsp页面
    // 也就是haha.jsp中,这个时候,在jsp中${luck}是可以获取到值的
    if (mv != null && !mv.hasView()) {
        // 获取一个默认的视图名,就是url对应的字符串当做视图
        String defaultViewName = getDefaultViewName(request);
        // 将这个当做是视图名,到时候找对应文件渲染
        if (defaultViewName != null) {
            mv.setViewName(defaultViewName);
        }
    }
}

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值