SpringMVC 的详细介绍

一,用SpringMVC的简介

SpringMVC是一种基于Spring实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,使用了MVC的架构模式思想,将Web层进行指责解耦,并管理应用所需的生命周期,为简化日常开发,提供了很大便利。

SpringMVC提供了总开关DispatcherServlet;请求处理映射器(Handler Mapping)和处理适配器(Handler Adapter),视图解析器(View Resolver)进行视图管理;动作处理器Controller接口(包含ModelAndView,以及处理请求响应对象请求和响应),配置灵活,支持文件上传,数据简单转化等强大功能。

二,用SpringMVC的常用注解标签

  1. @Controller   用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping注解。@ Controller只是定义了一个控制器类,而使用@RequestMapping注解的方法才是真正处理请求的处理器。单个使用@Controller标记在一个类上还不能真正意义上的说它就是SpringMVC的一个控制器类,因为这个时候Spring还不认识它。那么要如何做Spring才能认识它呢?这个时候就需要我们把这个控制器类交给Spring来管理。有两种方式:(1)在SpringMVC的配置文件中定义MyController的bean对象。(2)在SpringMVC的配置文件中告诉Spring该到哪里去找标记为@Controller的Controller控制器。
    <!--方式一-->
    <bean class="com.host.app.web.controller.MyController"/>
    <!--方式二-->
    < context:component-scan base-package = "com.host.app.web" />//路径写到controller的上一层(扫描包详解见下面浅析)
  2. @RequestMapping     RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
  3. @Resource和@Autowired      @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。
  4. @ModelAttribute和@SessionAttributes     该控制器的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的控制器继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。@ SessionAttributes即将值放到session作用域中,写在类上面。
  5. @PathVariable       用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出URI模板中的变量作为参数。
    @Controller  
    public class TestController {  
         @RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET)  
         public String getLogin(@PathVariable("userId") String userId,  
             @PathVariable("roleId") String roleId){  
             System.out.println("User Id : " + userId);  
             System.out.println("Role Id : " + roleId);  
             return "hello";  
         }  
         @RequestMapping(value="/product/{productId}",method = RequestMethod.GET)  
         public String getProduct(@PathVariable("productId") String productId){  
               System.out.println("Product Id : " + productId);  
               return "hello";  
         }  
         @RequestMapping(value="/javabeat/{regexp1:[a-z-]+}",  
               method = RequestMethod.GET)  
         public String getRegExp(@PathVariable("regexp1") String regexp1){  
               System.out.println("URI Part 1 : " + regexp1);  
               return "hello";  
         }  
    }
  6. @ReauestParam      主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter(“name”),它有三个常用参数:defaultValue =“0”,required = false,value =“isApp”; defaultValue表示设置默认值,required铜过布尔设置是否是必须要传入的参数,值值表示接受的传入的参数类型。
  7. @ResponseBody     该注解用于将控制器的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到响应对象的身体数据区。使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如JSON,XML等)使用;
  8. @Component      相当于通用的注解,当不知道一些类归到哪个层时使用,但是不建议。
  9. @Repository       用于注解道层,在daoImpl类上面注解。

三,用​​SpringMVC的工作流程与介绍

(1)客户端通过URL发送请求

(2-3)核心控制器Dispatcher Servlet接收到请求,通过系统或自定义的映射器配置找到对应的处理程序,并将url映射的控制器控制器返回给核心控制器。

(4)通过核心控制器找到系统或默认的适配器

(5-7)由找到的适配器,调用实现对应接口的处理器,并将结果返回给适配器,结果中包含数据模型和视图对象,再由适配器返回给核心控制器

(8-9)核心控制器将获取的数据和视图结合的对象传递给视图解析器,获取解析得到的结果,并由视图解析器响应给核心控制器

(10)核心控制器将结果返回给客户端

扫描二维码关注公众号,回复: 4515863 查看本文章

四,用SpringMVC与Struts2的的主要区别

  1. 区别一                                                                                                                                                                                               Struts2的核心是基于一个Filter即StrutsPreparedAndExcuteFilter                                                                                       SpringMvc的核心是基于一个Servlet即DispatcherServlet(前端控制器)
  2. 区别二

         Struts2的基于的英文开发的,传递的参数是通过类的属性传递(属性驱动和模型驱动),所以只能设计成多例原型

         SpringMvc是基于类中的方法开发的,也就是一个url对应一个方法,传递参数是传到方法的形参上面,所以既可以是单例模式也可以是多例模式singiton

  3. 区别三

          Struts2的采用的是值栈存储请求以及响应数据,OGNL存取数据

          用SpringMVC采用请求来解析请求内容,然后由其内部的的getParameter给方法中形参赋值,再把后台处理过的数据通过ModelAndView的对象存储,型号存储数据,查看存储返回的页面,再把对象通过请求传输到页面去。
     

猜你喜欢

转载自blog.csdn.net/qq_42494445/article/details/83926216