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自动注入策略.
    还有其他注解,在这就不一一举例,本人比较懒散.希望文章对你有所帮助.水平有限,不能深入的研究,只能把表象的一些知识和本人的理解和大家分享,如有错误请及时指正,本人感激不尽.
  • 相关阅读:
    函数式宏定义与普通函数
    linux之sort用法
    HDU 4390 Number Sequence 容斥原理
    HDU 4407 Sum 容斥原理
    HDU 4059 The Boss on Mars 容斥原理
    UVA12653 Buses
    UVA 12651 Triangles
    UVA 10892
    HDU 4292 Food
    HDU 4288 Coder
  • 原文地址:https://www.cnblogs.com/wang620/p/8404927.html
Copyright © 2011-2022 走看看