4、spring----MVC

spring MVC 示意图

在这里插入图片描述

spring MVC执行过程

在这里插入图片描述

  • 用户端发送请求至前端控制器 DispatcherServlet
  • DispatcherServlet接收到请求后调用处理器映射器 HandlerMapping
  • 处理器映射器根据URL 找到具体的处理器,生成处理器执行链HandlerExcutionChain(包含处理器对象和处理器拦截器),将处理器执行链返回给DispatcherServlet
  • DispatcherServlet根据处理器Handler获取处理器适配器HandlerAdapter,并执行HanderAdapter的一系列操作,比如:参数封装、数据格式转换、数据校验等
  • 执行处理器Handler(Controller层,也叫页面控制器)
  • Handler返回MoudelAndView
  • HandlerAdapter将Handler的执行结果MoudelAndView返回到DispatcherServlet
  • DispatcherServlet将MoudelAndView传给ViewReslover 视图解析器
  • ViewReslover解析完后返回View
  • DispatcherServlet将视图进行渲染(即将模型数据moudel填充至视图)----------此处处理器执行链HandlerExcutionChain执行完成,拦截器中的完成后执行,就在这一步骤后面
  • DispatcherServlet响应用户

参数控制

  • 使用@RequestParam获取参数:
    @RequestMapping("/index")
    @ResponseBody
    private Result getBannerList(@RequestParam("num") Integer number){
        return null;
    }
  • 传递数组:前端入参:http://localhost:8080/my/requestArray?intArr=1,2,3&longArr=4,5,6&strArr=str1,str2,str3
@GetMapping("/requestArray")@ResponseBodypublic Map<String, Object> requestArray(int [] intArr, Long []longArr, String[] strArr) {
    Map<String, Object> paramsMap = new HashMap<>();
    paramsMap.put("intArr", intArr);
    paramsMap.put("longArr", longArr);
    paramsMap.put("strArr", strArr);return paramsMap;}
  • 传递JSON:@RequestBody ,传入的JSON字符串会根据字段自动转化为对象
/**
     * 新增用户
     * @param user 通过@RequestBody注解得到JSON参数
     * @return 回填id后的用户信息
     */@PostMapping("/insert")@ResponseBodypublic User insert(@RequestBody User user) {
        userService.insertUser(user);return user;}}
  • 获取格式化参数:
    下面代码中是日期格式化和 千分位的金额字符串格式化
    前端的入参为 date=“2020-05-24” number=“1,222,333”
// 映射JSP页面
@GetMapping("/format/form")public String showFormat() {return "/format/formatter";}

// 获取提交参数
@PostMapping("/format/commit")@ResponseBodypublic Map<String, Object> format(@DateTimeFormat(iso=ISO.DATE) Date date,
 @NumberFormat(pattern = "#,###.##") Double number) {
    Map<String, Object> dataMap = new HashMap<>();
    dataMap.put("date", date);
    dataMap.put("number", number);return dataMap;}

参数验证和一对一入参格式转换

使用数据模型

/****imports****/@RequestMapping("/data")@Controllerpublic class DataModelController {// 注入用户服务类
    @Autowiredprivate UserService userService = null;

    // 测试Model接口
    @GetMapping("/model")public String useModel(Long id, Model model) {
        User user = userService.getUser(id);
        model.addAttribute("user", user);// 这里返回字符串,在Spring MVC中,会自动创建ModelAndView且绑定名称
        return "data/user";}

    // 测试modelMap类
    @GetMapping("/modelMap")public ModelAndView useModelMap(Long id, ModelMap modelMap) {
        User user = userService.getUser(id);
        ModelAndView mv = new ModelAndView();// 设置视图名称
        mv.setViewName("data/user");// 设置数据模型,此处modelMap并没有与mv绑定,这步系统会自动处理
        modelMap.put("user", user);return mv;}

    // 测试ModelAndView
    @GetMapping("/mav")public ModelAndView useModelAndView(Long id, ModelAndView mv) {
        User user = userService.getUser(id);// 设置数据模型
        mv.addObject("user", user);// 设置视图名称
        mv.setViewName("data/user");return mv;}}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值