zoukankan      html  css  js  c++  java
  • 浅谈对SpringMVC的认识

    SpringMVC概念:

    他是一个轻量级的开源框架,应用于表现层,基于MVC的设计模式.

    SpringMVC的特点:

    1.他是单例的可以设置成多例.
    2.他的线程是安全的
    3.他是基于方法级别的拦截
    4.接受请求参数的方式是参数绑定
    5.携带参数到页面是通过request域对象.

    SpringMVC流程(重点)

    1.用户向服务器发送一个请求,被SpringMVC的前端控制器DispatchServlet 捕获.
    2.DispatcherServlet接收到请求后调用HandlerMapping处理器映射器.
    3.处理器映射器找到具体的处理器(xml配置或者注解,RequesrtMapper),生成处理器对象及处理器拦截器一并返回给DispatcherServlet
    4.DispatcherServlet调用HandlerAdapter处理器适配器
    5.HandlerAdapter经过适配器调用具体的处理器(Controller)
    6.Controller执行完成后返回ModelAndView
    7.HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet
    8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器
    9.ViewReslover解析后返回具体的View
    10.DispatcherServlet根据View进行渲染视图
    11.DispatcherServlet将渲染完的视图界面最后响应给用户.
    SpringMVC中的几个组件说明
    DispatcherServlet:前端控制器,控制整个流程,他是SpringMVC的入口
    HandlerMapper:处理器映射器
    HandlerAdapter:处理器适配器
    ViewResolver:视图解析器,可以解析JSP,freemarker,pdf等
    SpringMVC的三大件:(面试可能会问)
    HandlerMapperHandlerAdapterViewResolver

    MVC设计模式概念

    M-Model(模型,完成业务逻辑:主要有JavaBean构成,service+dao+entity)
    V-View(视图层,主要是做页面的展示,jsp,html...)
    C-Controller(控制器,主要是接受请求之后调用模型层(M)根据结果返回页面)

    SpringMVC常用注解

    1.@Controller:标记在类上,他会表明这个类是一个SpringMVC Controller对象.处理器将会扫描该注解的类的方法,并检测该方法是否使用了@RequestMapping注解.@Controller只是定义类控制器类,真正处理请求的注解是@RequestMapping.
    大多数框架使用的时候都是整合因此在一个类上标记@Controller还不能真正意义上说他是SpringMVC的控制器,这个时候Spring不认识这个注解,需要把控制器类交给Spring来管理,一下又两种方式:
    1.直接写这个类的全路径
    <bean class="com.xxx.xxx.当前类"/>
    2. 路径写到当前Controller注解类的上一层
    <context:component-scan base-package = "com.xxx"/>注意当前配置@Controller这个类就不要写上去了
    Controller不会依赖HttpServletRequest和HttpServletResponse等HttpServlet对象,他是可以直接通过Controller的方法参数获取到的.小Demo
    @Controller
    public class SaveController() {
    @RequestMapping("/save")
    public String save() {
    System.out.println("保存save");
    return "success";
    }
    }
    2.@RequestMapping
    RequestMapping是用来处理请求url的注解
    RequestMapping中的六个属性:
    2.1--value:请求的实际地址
    2.2--method:请求的类型.GET,POST,PUT,DELETE等
    @RequestMapping(value="",method="RequestMethod.GET")
    2.3--consumes:指定请求的提交内容的类型(Content-Type),例如text/html
    2.4--produces:指定返回的内容类型
    2.5--params:指定request中必须包含某些参数值,才让该方法进行处理
    2.6--headers: 指定request中必须包含某些指定的header值,才让该方法处理请求
    3.@ResponseBody
    该注解用于将Controller的方法返回对象通过HtpMessageConverter转换成指定个时候写到Response对象的body数据中,
    使用场景:当返回的数据不是html标签,而是其他的数据格式比如json,xml等使用.
    4.@PathVariable
    用于将请求url中的模版变量映射到功能处理方法的参数上,取出url模版中的变量作为参数
    5.@RequestParam
    用于将请求参数区数据映射到功能处理方法的参数上.
    6.@CookieValue
    参数: value 参数名
    required:是否必须
    defaultValue:默认值
    7.@Resource和@Autowired
    他们都是做bean注入时候使用,@Resource不是Spring的注解他的宝石javax.annotation.Resource需要导包,但是Spring支持该注解的注入
    共同点:两者都可以卸载字段和setter方法上,如果都写在字段上就不需要在写setter方法
    不同点:
    @Autowired是Spring提供的注解需要导报,按照byType注入,默认情况下他要求依赖对象必须存在,如果允许为null值,设置他的required属性为false.
    @Resource默认按照byName自动注入,他有两个重要的属性,name和type,Spring将该注解的name属性解析为bean的名字,type属性解析为bean的类型,如果想要使用name属性,需要使用byName的自动注入,使用type属性需要使用byType自动注入策略.如果什么属性都不制定,她会通过反射使用byName自动注入策略.

  • 相关阅读:
    used内存较大,实际top查看系统进程中并没有占用这么多内存
    查看LINUX进程内存占用情况
    关于ConcurrentHashMap的key和value不能为null的深层次原因
    Linux修改用户所在组方法
    原因可能是托管的PInvoke签名与非托管的目标签名不匹配
    vs2019 实现C#调用c++的dll两种方法
    java jvm 参数 -Xms -Xmx -Xmn -Xss 调优总结
    java 读取文件的几种方式和通过url获取文件
    Idea中Maven的默认配置 (非常好)
    去哪儿网models数据更新
  • 原文地址:https://www.cnblogs.com/weigy/p/12574294.html
Copyright © 2011-2022 走看看