微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SpringMVC基础知识

1、什么是SpringMVC

        SpringMVC是Spring的一个重要模块,因为作为开源的JavaEE应用框架,很多Web应用是由Spring来支撑的。MVC模式在UI设计中使用得非常普遍,在GoF设计模式的经典著作中,开篇就提到了这个模式。

这个模式的主要特点是:分离了模型、视图、控制器三种角色,将业务处理从UI设计中独立出来,封装到模型和控制器设计中去,使得他们相互之间解耦,可以独立拓展而不需彼此依赖。

        了解SpringMVC,首先要了解Spring IoC容器是如何在Web环境中被载入并起作用的。Spring IoC是一个独立的模块,它并不是直接在Web容器中发挥作用的,如果要是在Web环境中使用IoC容器,需要Spring为

IoC设计一个启动过程,把IoC容器导入,并在Web容器中建立起来。具体说来,这个启动过程是和Web容器的启动过程集成在一起的。在这个过程中,一方面处理Web容器的启动,另一方面通过设计特定的Web容器拦截器,

将IoC容器载入到Web环境中来,并将其初始化。在这个过程建立起来以后,IoC容器才能正常工作,而SpringMVC是建立在IoC容器的基础上的,这样才能建立起MVC框架的运行机制,从而响应从Web容器传递的HTTP请求。

        运行原理如图所示:

        

       SpringMVC流程:

       (1)客户端(浏览器)发送请求,直接请求到dispatcherServlet。

       (2)dispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler。

       (3)解析到对应的Handler后,开始由HandlerAdapter适配器处理。

       (4)HandlerAdapter会根据Handler来调用真正的处理器开处理请求,并处理相应的业务逻辑。

       (5)处理器处理完业务后,会返回一个ModelAndView对象,Model是返回的数据对象,View是个逻辑上的View。

       (6)ViewResolver会根据逻辑View查找实际的View。

       (7)dispaterServlet把返回的Model传给View。

       (8)通过View返回给请求者(浏览器)

2、SpringMVC主要组件

   (1)前端控制器(disatcherServlet):接收请求,响应结果,返回可以是json,String等数据类型,也可以是页面(Model)。

   (2)处理器映射器(HandlerMapping):根据URL去查找处理器,一般通过xml配置或者注解进行查找。

   (3)处理器(Handler):就是我们常说的controller控制器。

   (4)处理器适配器(HandlerAdapter):可以将处理器包装成适配器,这样就可以支持多种类型的处理器。

   (5)视图解析器(ViewResovler):进行视图解析,返回view对象(常见的有JSP,FreeMark,Thymeleaf等)。

3、SpringMVC中常用的注解

       (1)组件型注解:

  • @Component 在类定义之前添加@Component注解,他会被spring容器识别,并转为bean。
    • @Repository 对Dao实现类进行注解 (特殊的使用@Component)
    • @Service 用于对业务逻辑层进行注解, (特殊的使用@Component)
    • @Controller 用于控制层注解 , (特殊的使用@Component)
    • @component 把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>

              以上注解都是注解在类上的,被注解的类将被spring初始话为一个bean,然后统一管理

       (2)请求和参数型注解

@RequestMapping:用于处理请求地址映射,可以作用于类和方法上。

  • value:定义request请求的映射地址
    • method:定义地request址请求的方式,包括【GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE.】认接受get请求,如果请求方式和定义的方式不一样则请求无法成功。
    • params:定义request请求中必须包含的参数值。
    • headers:定义request请求中必须包含某些指定的请求头,如:RequestMapping(value = "/something", headers = "content-type=text/*")说明请求中必须要包含"text/html", "text/plain"这中类型的Content-type头,才是一个匹配的请求。
  • consumes:定义请求提交内容的类型。
    • produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
    • @RequestParam:用于获取传入参数的值
  • value:参数的名称
    • required:定义该传入参数是否必须,认为true,(和@RequestMapping的params属性有点类似)


      两种请入参方式是一样的,显示声明value的名称时,入参参数名和value一样,没有显示声明的话,像第一种方式声明的,入参参数名和函数参数变量名一样。
    • @PathViriable:用于定义路径参数值
  • value:参数的名称
  • required:定义传入参数是否为必须值


这个路径声明了{myname}作为路径参数,那么这一段路径将为任意值,@PathVariable将可以根据value获取路径的值。

  • @ResponseBody:作用于方法上,可以将整个返回结果以某种格式返回,如json或xml格式。如果不加,返回的字符串是一个页面的路径。
  • @CookieValue:用于获取请求的Cookie值
  • @modelattribute:用于把参数保存到model中,可以注解方法或参数,注解在方法上的时候,该方法将在处理器方法执行之前执行,然后把返回的对象存放在 session(前提时要有@SessionAttributes注解) 或模型属性中,@modelattribute(“attributeName”) 在标记方法的时候指定,若未指定,则使用返回类型的类名称(首字母小写)作为属性名称

  • @SessionAttributes:认情况下Spring MVC将模型中的数据存储到request域中。当一个请求结束后,数据就失效了。如果要跨页面使用。那么需要使用到session。而@SessionAttributes注解就可以使得模型中的数据存储一份到session域中。配合@modelattribute("user")使用的时候,会将对应的名称的model值存到session中

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐