SpringMVC 框架(架构+ 处理流程 + 优势 +注解)

(一)Spring MVC

           Spring MVC 是一个典型的MVC框架,是Spring内置的Web框架可以作为应用项目的展示层,继Spring 2.0对Spring

MVC进行重大升级后,Spring 2.5又为Spring MVC引入了注解驱动功能,再到3.0时代,全面支持REST的网络服务和更容易的网

络编程Spring MVC 3.0)(最新Spring MVC 4.0

            Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面,Spring MVC 分离了控制器、模型对

象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制,适用在我们的表现层到action模块中,是MVC架构模式

中真正的Controller,在流程处理方面更加灵活,可以很容易的进行扩展,可以和Spring框架进行无缝集成

                

(二)SpringMVC 架构

          Spring Web MVC框架也是一个基于请求驱动的Web框架,并且也使用了前端控制器模式来进行设计,再根据请求映射规

则分发给相应的页面控制器(动作/处理器)进行处理。首先让我们整体看一下Spring Web MVC处理请求的流程:

        *  Spring Web MVC处理请求的流程

                    

           *  Spring Web MVC架构

                          

           (1)Spring MVC的核心是DispatcherServlet,当客户端发送一个请求时,这个请求经过一系列过滤器处理,然后

DispatcherServlet会接收到这个请求;

           (2)DispatcherServlet会从HandlerMapping对象中查找与请求匹配的Controller,并将结果返回给

DispatcherServlet;

           (3)DispatcherServlet将请求转发给目标Controller,如果定义有拦截器,则会经过这些拦截器处理;

           (4)标Controller处理完成业务逻辑后,会返回一个结果给DispatcherServlet;

           (5)DispatcherServlet根据结果查询ViewResolver,找到与之对应的视图对象,同样将结果返回给

DispatcherServlet;

           (6)DispatcherServlet根据指定的显示结果,调用模板对象渲染view;

           (7)将view返回给客户端;

          根据上面的说明,可以很很明显的看出,Spring MVC的核心是Servlet,并且创建的Controller其实也是一个Servlet

(三)SpringMVC 优势

            1、清晰的角色划分:前端控制器(DispatcherServlet)、请求到处理器映射(HandlerMapping)、处理器适配器

(HandlerAdapter)、视图解析器(ViewResolver)、处理器或页面控制器(Controller)、验证器(   Validator)、命令对

象(Command,请求参数绑定到的对象就叫命令对象)、表单对象(Form Object,提供给表单展示和提交到的对象就叫表单

对象);

         2、分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要;

         3、由于命令对象就是一个POJO,无需继承框架特定API,可以使用命令对象直接作为业务对象;

         4、和Spring 其他框架无缝集成,是其它Web框架所不具备的;

         5、可适配,通过HandlerAdapter可以支持任意的类作为处理器;

         6、可定制性,HandlerMapping、ViewResolver等能够非常简单的定制;

         7、功能强大的数据验证、格式化、绑定机制;

         8、利用Spring提供的Mock对象能够非常简单的进行Web层单元测试;

         9、本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。

        10、强大的JSP标签库,使JSP编写更容易;还有比如RESTful风格的支持、简单的文件上传、约定大于配置的契约式编程

支持、基于注解的零配置支持等等

(四)SpringMVC 注解(Controller与Requestmapping)

         @Controller  
         @RequestMapping("/helloworld")   
         public class Helloworld {   
            @RequestMapping(method=RequestMethod.GET)   
            public ModelAndView hello() {   
              ModelAndView mv = new ModelAndView();   
              mv.setViewName("helloworld");   
              return mv;   
            }   
          }  

      @Requestmapping的可选参数:

              (1)value:表示需要匹配的url的格式

              (2)method:表示所需处理请求的http 协议(如get,post,put,delete等),可选值为RequestMethod这个enum的值。

              (3)params:格式为”paramname=paramvalue” 或 “paramname!=paramvalue”。不带参数则表示paramvalue可以为

任意值。如params =  {"param1=1","param2!=2","param3"},表示对应的url必须包括param1,param2,param3三个参数,其中

param1的值必须为1,param2的值不能为2,param3的值可以为任意值。

             (4)headers:用来限定对应的reqeust请求的headers中必须包括的内容,例如headers={"Connection=keep-alive"}, 表

示请求头中的connection的值必须为keep-alive

(五)SpringMVC 总结

       Spring mvc处理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void      

     (1)ModelAndView(模型视图)

          通过ModelAndView构造方法可以指定返回的页面名称,也可以通过setViewName()方法跳转到指定的页面 , 使用

addObject()设置需要返回的值,addObject()有几个不同参数的方法,可以默认和指定返回对象的名字。 调用addObject()方法

将值设置到一个名为ModelMap的类属性,ModelMap是LinkedHashMap的子类, 具体请看类

               @RequestMapping("show1")
               public ModelAndView show1(HttpServletRequest request,
                   HttpServletResponse response) throws Exception {
                       ModelAndView mav = new ModelAndView("/demo2show");
                       mav.addObject("account", "account -1");
                  return mav;
              }

    小结:

        1、使用 String 作为请求处理方法的返回值类型是比较通用的方法,这样返回的逻辑视图名不会和请求 URL 绑定,具有很

大的灵活性,而模型数据又可以通过 ModelMap 控制。 

       2、使用void、map、Model 时,返回对应的逻辑视图名称真实url为:prefix前缀+视图名称 +suffix后缀组成。 

       3、使用String、ModelAndView返回视图名称可以不受请求的url绑定,ModelAndView可以设置返回的视图名称。

猜你喜欢

转载自blog.csdn.net/qq_25523265/article/details/83628606
今日推荐