Spring MVC 结构体系

小新
2022-01-17 / 0 评论 / 299 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年01月17日,已超过129天没有更新,若内容或图片失效,请留言反馈。

MVC设计模式

视图(View) -对应组件:JSP或者HTML文件

控制器(Controller)-对应组件:Servlet

模型(Model)- 对应组件:javaBean

JSP Model2:

JSP:负责生成动态网页

Servlet:负责流程控制

javaBean:负责业务逻辑处理

MVC处理过程

- 控制器
接收用户请求

调用模型响应用户请求

选择视图显示响应结果

- 视图

​ 解析模型

​ 接收数据更新请求

​ 发送用户输入给控制器

​ 允许控制器选择视图

- 模型

​ 封装应用程序状态

​ 响应状态查询

​ 处理业务流程

​ 通知视图业务状态更新

MVC优点

多视图共享一个模型,大大提高代码得可重用性

MVC三个模块相互独立,松耦合架构

控制器提高了应用程序得灵活性和可配置性

有利于软件工程化管理

MVC缺点

原理复杂

增加了系统结构和实现得复杂性

视图对模型数据得低效率访问

Spring MVC

结构最清晰得MVC Model2实现

Controller

ModelAndView

注解驱动控制器

基于注解得处理器

<context:component-scan>

  • Controller:标注一个普通得javaBean成为可以处理请求得控制器
  • @RequestMapping:通过请求URL进行映射

<mvc:annotation-driven>

  • 一键式配置,通过注解得方式进行Spring MVC开发

​ defaultAnnotationHandlerMapping

​ AnnotationMethodHandlerAdapter

Test
Test

400 :参数类型转化异常

Spring MVC体系结构

DispatcherServlet(前端控制器)

​ Spring MVC最核心的类

​ web.xml中配置

Handler(处理器):对应MVC中c(Controller层)

类型:Object

作用:实际处理请求

标注了@RequesMapping的所有方法都可以看作是一个Handler

ModelAndView

逻辑视图名

模型对象

核心组件

HandlerMapping(处理器映射)

  • BeanNameUrlHandlerMapping(默认)

    • 将请求URL映射到同名的控制器Bean上
  • DefaultAnnotationHandleMapping

    • 将请求映射到标注@RequestMapping注解的控制器和处理方法上
    • RequestMappingHandlerAdapter
  • ViewResolver(视图解析器)

    • InternalResourceView

Spring MVC框架特点

  • 清醒地角色划分
  • 灵活的配置功能
  • 提供了大量的控制器接口和实现类
  • 真正做到与View层的实现无关(JSP、Velocity、Xslt等)
  • 国际化支持
  • 面向接口编程
  • Spring提供了Web应用开发的一整流程,不仅仅是MVC,他们之间可以很方便的结合一起

参数传递

Controller方法中参数前加@RequestParam进行直接入参
例如:

@RequestMapping("/index.html")
public String index(@RequestParam(required=false,defaultValue="未填写姓名") String name,@RequestParam() int age){
    System.out.println("进入了index方法 name:"+name+",age:"+age);
    return "index.jsp";
}

ModelAndView(返回数据)

包含视图信息和模型数据信息

4种方法


    @RequestMapping("/test4.html")
    public String test1(@RequestParam String name,HttpServletRequest request){
        request.setAttribute("msg","test4欢迎你:"+name);
        return "index.jsp";
    }
    
    
    @RequestMapping("/test3.html")
    public String test1(@RequestParam String name,Map<String, Object> map){
        map.put("msg","test3欢迎你:"+name);
        return "index.jsp";
    }
    
    @RequestMapping("/test2.html")
    public String test1(@RequestParam String name,Model m){
        m.addAttribute("msg","test2欢迎你:"+name);
        return "index.jsp";
    }
    
    
    @RequestMapping("/test1.html")
    public ModelAndView test1(@RequestParam String name){
        ModelAndView mv = new ModelAndView("index.jsp");
        mv.addObject("msg","test1欢迎你:"+name);
        return mv;
    }
0

评论 (0)

取消