目录
1.SpringMVC执行流程
执行流程的简要分析:
(1)浏览器提交请求到中央调度器
(2)中央调度器直接将请求转给处理器映射器。
(3)处理器映射器会根据请求,找到处理该请求的处理器,并将其封装为处理器执行链后
返回给中央调度器。
(4)中央调度器根据处理器执行链中的处理器,找到能够执行该处理器的处理器适配器。
(5)处理器适配器调用执行处理器。
(6)处理器将处理结果及要跳转的视图封装到一个对象
ModelAndView
中,并将其返回给
处理器适配器。
(7)处理器适配器直接将结果返回给中央调度器。
(8)中央调度器调用视图解析器,将
ModelAndView
中的视图名称封装为视图对象。
(9)视图解析器将封装了的视图对象返回给中央调度器
(
10
)中央调度器调用视图对象,让其自己进行渲染,即进行数据填充,形成响应对象。
(
11
)中央调度器响应浏览器、
2.SpringMVC中常用的注解
(1)
@Controller :表示当前类为处理器
(2)@RequestMapping:表示当前方法为处理器方法。该方法要对 value 属性所指定的 URI
进行处理与响应。被注解的方法的方法名可以随意。
(3)@RequestParam:校正请求参数名,指定请 求 URL 所携带参数的名称。该注解是对处理器方法参数进行修饰的。
(4)<mvc:annotation-driven/>:声明注解驱动,将 Object 数据转化为 JSON 数据,需要由消息转换器 HttpMessageConverter 完成。而转 换器的开启,需要由<mvc:annotation-driven/>来完成。
(5)@ResponseBody:将java对象(可以是array类型,string类型,list类型)转为json数据输出
3.SpringMVC核心技术
3.1请求转发
处理器方法返回
ModelAndView
时,需
在 setViewName()指定的视图前添加 forward:,且
此时的视图不再与视图解析器一同工作,这样可以在配置了解析器时指定不同位置的视图。
视图页面必须写出相对于项目根的路径。forward 操作不需要视图解析器。
处理器
方法返回
String,
在视图路径前面加入
forward:
视图完整路径。
3.2请求重定向
在处理器方法返回的
视图字符串的前面添加 redirect:,则可实现重定向跳转
3.3@ExceptionHandler 注解
使用注解
@ExceptionHandler
可以将一个方法指定为异常处理方法。该注解只有一个可
选属性
value
,为一个
Class<?>
数组,用于指定该注解的方法所要处理的异常类,即所要匹
配的异常。
而被注解的方法,其返回值可以是
ModelAndView
、
String
,或
void
,方法名随意,方法
参数可以是
Exception
及其子类对象、
HttpServletRequest
、
HttpServletResponse
等。系统会
自动为这些方法参数赋值。
对于异常处理注解的用法,也可以直接将异常处理方法注解于
Controller
之中。
3.4拦截器
SpringMVC
中的
Interceptor 拦截器是非常重要和相当有用的,它的主要作用是拦截指定
的用户请求,并进行相应的预处理与后处理。其拦截的时间点在“处理器映射器根据用户提
交的请求映射出了所要执行的处理器类,并且也找到了要执行该处理器类的处理器适配器,
在处理器适配器执行处理器之前”。当然,在处理器映射器映射出所要执行的处理器类时,
已经将拦截器与处理器组合为了一个处理器执行链,并返回给了中央调度器。
自定义拦截器,需要实现 HandlerInterceptor 接口。而该接口中含有三个方法:
(1)preHandle(request,response, Object handler)
(2)postHandle(request,response, Object handler,modelAndView)
(3)
afterCompletion(request,response, Object handler, Exception ex)
3.4.1拦截器执行流程如下:
3.4.2注册拦截器方法
<mvc:mapping/>
用于指定当前所注册的拦截器可以拦截的请求路径,而
/**
表示拦截所
有请求。