正确的SpringMVC进阶案例详解,60%的人没搞懂

代码实现
springMVC的配置:
@Configuration
@ComponentScan(basePackages={"com.czxy.demo1.controller"})
public class MVCConfiguration {
    /**
     * 设置了一个视图解析器,交给spring管理
     * @return
     */
    @Bean
    public InternalResourceViewResolver getInternalResourceViewResolver(){
        InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
        //设置前缀
        internalResourceViewResolver.setPrefix("/");
        //设置后缀
        internalResourceViewResolver.setSuffix(".jsp");
        return internalResourceViewResolver;
    }
}
Demo1Controller:
@RequestMapping("/run5")
    public String run5(){
        System.out.println("run5");
//        return "/demo5.jsp";
        //视图解析器会自动补全为:   /demo5.jsp
        return "demo5";
    }
注意:光理论是不够的。在此顺便送大家十套2020最新JAVA架构项目实战教程及大厂面试题库,进我扣裙 :七吧伞吧零而衣零伞 (数字的谐音)转换下可以找到了,还可以跟老架构师交流
小结:
视图解析器: 控制器的返回值会经过视图解析器,自动补全 前缀和 后缀。
二.实用2: 绕开视图解析器
代码实现
Demo1Controller
@RequestMapping("/run6")
    public String run6(){
        System.out.println("run6");
        //绕开视图解析器方式一:重定向
//        return "redirect:/demo6.html";
        //绕开视图解析器方式二:完整版的请求转发
        return "forward:/demo6.html";
    }
小结:
绕开视图解析器:
重定向: return “redirect:/路径”;
完整版的请求转发:return “forward:/路径”;
三. 知识点:Controller方法返回值
返回字符串
三种:
使用视图解析器(请求转发): return “资源名”;
绕开视图解析器-请求转发:return “forward:/路径”;
绕开视图解析器-重定向:return “redirect:/路径”;
返回ModelAndView(SpringMVC特有)
/*
    * 需要跳转到demo5.jsp上   ModelAndView
    * */
    @RequestMapping("/run7")
    public ModelAndView run7(){
        ModelAndView mav = new ModelAndView();
        //设置request作用域传递参数 相当于request.setAttribute
        mav.addObject("uname","煌煌");
        //设置跳转路径
        mav.setViewName("demo5");//使用视图解析器,请求转发
//        mav.setViewName("forward:/demo5.jsp");//绕开视图解析器,请求转发
//        mav.setViewName("redirect:/demo5.jsp");//绕开视图解析器,重定向
        return mav;
    }
ModelAndView:springMVC专门用来封装作用域数据,并且跳转页面
四. 知识点:@RequestMapping
窄化请求路径
@RequestMapping放在类名上边,设置请求前缀
@RequestMapping放在方法名上边,设置方法对应请求路径。
完整请求:前缀 + 请求路径
多路径映射
/*
*   /项目名/d1/run8.action
*   /项目名/d1/8run.action
*   /项目名/d1/run88.action
* */
@RequestMapping(value = {"/run8","/8run","/run88"})
public String run8(){
    System.out.println("run8");
    return "index";
}
请求方式限定
默认情况下,不会限定请求方式,get/post或其他方式均可访问

/*
    该方法的请求方式,仅允许POST方式
* */
@RequestMapping(value = {"/run9"},method = {RequestMethod.POST})
public String run9(){
    System.out.println("run8");
    return "index";
}
今日总结:
视图解析器:
在控制器执行之后,为控制器补全前缀和后缀。
Controller方法的返回值:
demo1.jsp
使用视图解析器:return “demo1”;
绕开视图解析器:
请求转发:return “forward:/demo1.jsp”;
重定向:return “redirect:/demo1.jsp”;
ModelAndView:封装请求数据,跳转页面
addObject(); 向request作用域保存键值对
setViewName(); 设置跳转路径。
@RequestMapping:为方法/类设置访问路径。
@RequestMapping(value={“/run1”,”/1run”})
注意:最后送大家十套2020最新JAVA架构项目实战教程及大厂面试题库,进我扣裙 :七吧伞吧零而衣零伞 (数字的谐音)转换下可以找到了,还可以跟老架构师交流
本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号