JAVA三大框架之SpringMVC,SpringMVC核心技术,SpringMVC注解式开发


前言

“实践出真知”,SpringMVC 也叫 Spring web mvc。是 Spring 框架的一部分,是在 Spring3.0 后发布的。


一、Spring MVC是什么?

作为 Spring框架中的一部分,能够使用Spring的IOC和AOP,方便整合Strtus,Mybatis,Hibernate,JPA等其他的框架。
Spring强化注解的使用,在控制器,Servicce,Dao都可以使用注解,方便灵活。
使用@Controller创建处理器对象,@Service创建业务对象,@Autowired或者@Resource在控制器类中注入Service,Service类中注入Dao。

1.SpringMVC执行流程图

在这里插入图片描述

2.执行流程简单分析

1.浏览器提交请求到中央调度器。
2.中央调度器直接将请求转发交给处理器映射器。
3.处理器映射器会根据请求,找到处理该请求的处理器。并将其封装为处理器执行链后返回给中央调度器。
4.中央调度器会根据处理器执行链中处理器,找到能够处理该处理器的处理适配器。
5.处理器适配器调用执行处理器。
6.处理器将处理的返回结果及要跳转的视图封装到一个对象(ModelAndView),并将其返回给处理器适配器。
7.处理器适配器直接将结果返回给中央调度器。
8.中央调度器调用视图解析器,将ModelAndView中的视图名称封装为视图对象。
9.视图解析器将分装的视图对象返回给中央调度器。
10.中央调度器调用视图对象,让其自己进行渲染,即进行数据的填充,形成相应对象。
11.中央调度器相应浏览器。

二、Spring MVC注解

1.简介

所谓的SpringMVC的注解式开发是指,在代码中通过对类与方法的注解,便可以完成处理器在SpringMVC容器的注册。注解式开发是重点。

2.@RequestMapping定义请求规则

通过@RequestMapping注解可以定义处理器对于请求的映射规则。该注解可以注解在方法上,可以注解在类上,但是意义不同,value属性常常是以“/”开始。
@RequestMapping 的 value 属性用于定义所匹配请求的 URI。但对于注解在方法上与类上,其 value 属性所指定的 URI,意义是不同的。
一个@Controller 所注解的类中,可以定义多个处理器方法。当然,不同的处理器方法所匹配的 URI 是不同的。这些不同的 URI 被指定在注解于方法之上的@RequestMapping 的value 属性中。但若这些请求具有相同的 URI 部分,则这些相同的 URI,可以被抽取到注解在类之上的@RequestMapping 的 value 属性中。此时的这个 URI 表示模块的名称。URI 的请求是相对于 Web 的根目录。
换个角度说,要访问处理器的指定方法,必须要在方法指定 URI 之前加上处理器类前定义的模块名称

3.处理器方法的返回值

使用@Controller 注解的处理器的处理器方法,其返回值常用的有四种类型:
➢ 第一种:ModelAndView
➢ 第二种:String
➢ 第三种:无返回值 void
➢ 第四种:返回自定义类型对象

  1. 返回ModelAndView
    若处理器方法处理完后,需要跳转到其它资源,且又要在跳转的资源间传递数据,此时处理器方法返回 ModelAndView 比较好。当然,若要返回 ModelAndView,则处理器方法中需要定义 ModelAndView 对象。
    在使用时,若该处理器方法只是进行跳转而不传递数据,或只是传递数据而并不向任何资源跳转(如对页面的 Ajax 异步响应),此时若返回ModelAndView,则将总是有一部分多余:要么Model 多余,要么 View 多余。即此时返回 ModelAndView 将不合适。
  2. 返回 String
    处理器方法返回的字符串可以指定逻辑视图名,通过视图解析器解析可以将其转换为物理视图地址
  3. 返回 void
    对于处理器方法返回 void 的应用场景,AJAX 响应.
    若处理器对请求处理后,无需跳转到其它任何资源,此时可以让处理器方法返回 void
  4. 返回Object
    处理器方法也可以返回 Object 对象。这个 Object 可以是 Integer,String,自定义对象,Map,List 等。但返回的对象不是作为逻辑视图出现的,而是作为接在页面显示的数据出现的。
    返回对象,需要使用@ResponseBody 注解,将转换后的 JSON 数据放入到响应体中。

三. SpringMVC核心技术

1. 请求重定向和转发

当处理器对请求处理完毕后,向其它资源进行跳转时,有两种跳转方式:请求转发与重定向。而根据所要跳转的资源类型,又可分为两类:跳转到页面与跳转到其它处理器。
在这里插入图片描述

2. 异常处理

SpringMVC 框架处理异常的常用方式:使用@ExceptionHandler 注解处理异常。
使用注解@ExceptionHandler 可以将一个方法指定为异常处理方法。该注解只有一个可选属性 value,为一个 Class<?>数组,用于指定该注解的方法所要处理的异常类,即所要匹配的异常

而被注解的方法,其返回值可以是 ModelAndView、String,或 void,方法名随意,方法参数可以是 Exception 及其子类对象、HttpServletRequest、HttpServletResponse 等。系统会自动为这些方法参数赋值。

对于异常处理注解的用法,也可以直接将异常处理方法注解于 Controller 之中。

也可以使用注解@ControllerAdvice是给控制器对象增强功能的,使用@ControllerAdvice修饰的类可以使用@ExceptionHanlder
当使用@ResourceMapping 注解发生异常的时候,会执行上面的@ExceptionHanlder注解修饰时的方法

3. 拦截器

SpringMVC 中的 Interceptor 拦截器是非常重要和相当有用的,它的主要作用是拦截指定的用户请求,并进行相应的预处理与后处理。
第一个方法是preHandle(request,response,object handle):这个方法实在处理器执行之前,其返回值为boolean,若为ture,则会紧接着执行处理器方法。
第二个方法为: postHandle(request,response,object handle)该方法在处理器方法执行之后执行。
第三个方法为:afterCompletion(request,response, Object handler, Exception ex):当 preHandle()方法返回 true 时,会将该方法放到专门的方法栈中,等到对请求进行响应的所有工作完成之后才执行该方法。即该方法是在中央调度器渲染(数据填充)了响应页面之后执行的,此时对 ModelAndView 再操作也对响应无济于事

在这里插入图片描述


总结

SpringMVC大致也就是这些理论上的知识,还有一些重要的注解没有说,后面会慢慢补上,之后我还会把SSM框架整合开发案例做一个,希望大家多多指导。

猜你喜欢

转载自blog.csdn.net/qq_41837249/article/details/113919419