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)组件型注解:
以上注解都是注解在类上的,被注解的类将被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:定义请求提交内容的类型。
- value:参数的名称
- value:参数的名称
- required:定义传入参数是否为必须值
这个路径声明了{myname}作为路径参数,那么这一段路径将为任意值,@PathVariable将可以根据value获取路径的值。
- @ResponseBody:作用于方法上,可以将整个返回结果以某种格式返回,如json或xml格式。如果不加,返回的字符串是一个页面的路径。
- @CookieValue:用于获取请求的Cookie值
- @modelattribute:用于把参数保存到model中,可以注解方法或参数,注解在方法上的时候,该方法将在处理器方法执行之前执行,然后把返回的对象存放在 session(前提时要有@SessionAttributes注解) 或模型属性中,@modelattribute(“attributeName”) 在标记方法的时候指定,若未指定,则使用返回类型的类名称(首字母小写)作为属性名称。
- 如上代码中,使用了@modelattribute("user")注解,在执行控制器前执行,然后将生成一个名称为user的model数据,在控制器中我们通过注解在参数上的@modelattribute获取参数,然后将model应用到控制器中,在jsp页面中我们同样可以使用它。
- @SessionAttributes:默认情况下Spring MVC将模型中的数据存储到request域中。当一个请求结束后,数据就失效了。如果要跨页面使用。那么需要使用到session。而@SessionAttributes注解就可以使得模型中的数据存储一份到session域中。配合@modelattribute("user")使用的时候,会将对应的名称的model值存到session中
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。