springmvc机制拦截器aop异常

上传人:夏** 文档编号:560335802 上传时间:2023-05-09 格式:DOC 页数:10 大小:260.50KB
返回 下载 相关 举报
springmvc机制拦截器aop异常_第1页
第1页 / 共10页
springmvc机制拦截器aop异常_第2页
第2页 / 共10页
springmvc机制拦截器aop异常_第3页
第3页 / 共10页
springmvc机制拦截器aop异常_第4页
第4页 / 共10页
springmvc机制拦截器aop异常_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《springmvc机制拦截器aop异常》由会员分享,可在线阅读,更多相关《springmvc机制拦截器aop异常(10页珍藏版)》请在金锄头文库上搜索。

1、Spring-mvc 知识概念Spring Web MVC是一种基于Java的实现了 Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了 MVC架构模式的思想,将 web层进行职责解耦,基于请求驱动指的就 是使用请求-响应模型,框 架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我理解这张图之前我们得先知道以下的几个名词:前端控制器( DispatcherServlet)、请求 到处理器映射(HandlerMapping )、处理器适配器(HandlerAdapter )、视图解析器(ViewResolver、处理器或页面控制器 (Con troller、验证

2、器(Validator、命令对象(Comma nd 请求参数绑定到的对象就叫命令对象)、表单对象(Form Object提供给表单展示和提交到的对象就叫表单对象)步骤解析:核心架构的具体流程步骤如下:1、首先用户发送请求DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;2、DispatcherServlet HandlerMapping , HandlerMapping 将会把请求映射为HandlerExecutionChain 对象(包含一个 Handler 处理器(页面控制器)对象、多个 Handle

3、rInterceptor 拦截器)对象,通过这种策略模式,很容易添加新的映射策略;3、DispatcherServlet HandlerAdapter ,HandlerAdapter 将会把处理器包装为适配器, 从而支持多种类型的处理器, 即适配器设计模式的应用, 从而很容易支持很多类型的处理器;4、HandlerAdapter 处理器功能处理方法的调用, HandlerAdapter 将会根据适配的 结果调用真正的处理器的功能处理方法, 完成功能处理; 并返回一个 ModelAndView 对象(包 含模型数据、逻辑视图名) ;5、ModelAndView 的逻辑视图名 ViewResolv

4、er, ViewResolver 将把逻辑视图名解 析为具体的 View ,通过这种策略模式,很容易更换其他视图技术;6、 View渲染,View会根据传进来的 Model模型数据进行渲染,此处的 Model 实际是一个 Map 数据结构,因此很容易支持其他视图技术;7、返回控制权给 DispatcherServlet ,由 DispatcherServlet 返回响应给用户,到此一个流 程结束。当然以上步骤中并没有去说明拦截器、事务、安全性,其描述的是具体的对象的流程, 前者所说的是框架对象,所以使用的技术和原理则不一样。Handlerinterceptor 拦截器概念SpringMVC 中

5、的 Interceptor 拦截器也是相当重要和相当有用的, 它的主要作用是拦截 用户的请求并进行相应的处理, 其他的作用比如通过它来进行权限验证, 或者是来判断用户 是否登陆,日志记录,或者限制时间点访问。Interceptor 实现类及其方法SpringMVC 中的 Interceptor 拦截请求是通过 HandlerInterceptor 来实现的。在 SpringMVC 中定义一个 Interceptor 非常简单,主要有两种方式,第一种方式是要定义的 Interceptor 类要实现了 Spring 的 HandlerInterceptor 接口,或者是这个类继承实现了 Handl

6、erInterceptor 接口的类,比如 Spring 已经提供的实现了 HandlerInterceptor 接口的抽 象类 HandlerInterceptorAdapter ;第二种方式是实现 Spring 的 WebRequestInterceptor 接口, 或者是继承实现了 WebRequestInterceptor 的类。HandlerInterceptor 接口中定义了三个方法,我们就是通过这三个方法来对用户的请求 进行拦截处理的。( 1 )preHandle (HttpServletRequest request, HttpServletResponse response,

7、 Object handle) 方法。 该方法将在请求处理之前进行调用。 SpringMVC 中的 Interceptor 是链式的调 用的,在一个应用中或者说是在一个请求中可以同时存在多个 Interceptor 。每个 Interceptor 的调用会依据它的声明顺序依次执行,而且最先执行的都是 Interceptor 中的 preHandle 方 法,所以可以在这个方法中进行一些前置初始化操作或者是对当前请求的一个预处理, 也可 以在这个方法中进行一些判断来决定请求是否要继续进行下去。该方法的返回值是布尔值 Boolean 类型的,当它返回为 false 时,表示请求结束,后续的 Int

8、erceptor 和 Controller 都 不会再执行;当返回值为 true 时就会继续调用下一个 Interceptor 的 preHandle 方法,如果 已经是最后一个 Interceptor 的时候就会是调用当前请求的 Controller 方法。( 2 )postHandle (HttpServletRequest request, HttpServletResponse response, Object handle, ModelAndView modelAndView) 方法, 由 preHandle 方法的解释我们知道这个方法包 括后面要说到的 afterCompletio

9、n 方法都只能是在当前所属的 Interceptor 的 preHandle 方法 的返回值为 true 时才能被调用。 postHandle 方法,顾名思义就是在当前请求进行处理之后, 也就是 Controller 方法调用之后执行, 但是它会在 DispatcherServlet 进行视图返回渲染之前 被调用, 所以我们可以在这个方法中对 Controller 处理之后的 ModelAndView 对象进行操作。 postHandle 方法被调用的方向跟 preHandle 是相反的,也就是说先声明的 Interceptor 的 postHandle 方法反而会后执行,这和 Struts2

10、 里面的 Interceptor 的执行过程有点类型。 Struts2 里面的 Interceptor 的执行过程也是链式的,只是在 Struts2 里面需要手动调用 ActionInvocation 的 invoke 方法来触发对下一个 Interceptor 或者是 Action 的调用,然后每invoke 方一个Interceptor中在invoke方法调用之前的内容都是按照声明顺序执行的,而 法之后的内容就是反向的。(3 )afterCompletion(HttpServletRequest request, HttpServletResponse response, Object h

11、andle, Exception ex)方法,该方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行。顾名思义,该方法将在整个请求结束之后,也就是在DispatcherServlet渲染了对应的视图之后执行。这个方法的主要作用是用于进行资源清理工 作的。我们的系统日志的拦截在这个方法中,可以记录日志的相关的参数,检测方法的执行。拦截器的配置!-左載彌f: Intel ceil?rg, pringrfrdme workjf(a. support * Gpenfn t i tyMa 2(a ge rln Vleyln ter 匚 ep t oe 4丄!一

12、日*b=aTi class=niius.niodnles.sysinterceptorLo?tiit&Fcptorrx/t)edTi图2系统springmvc拦截器这三个方法的代码可以参考In terceptor.java拦截器日志模块运用1. 获取MAC地址2. 获取用户请求的参数3. 获取异常4. 获取其所操作的所有的类可以访问 LogI nterceptor.javaAOP的原理与实现概念AOP 是 OOP 的延续,是 Aspect Oriented Programming 的缩写,意思是面向切面编程。 可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加 功能

13、的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦, AOP可以说也是这种目标的一种实现。我们现在做的一些非业务,如:日志、事务、安全等都会写在业务代码中 (也即是说, 这些非业务类横切于业务类 ),但这些代码往往是重复,复制 粘贴式的代码会给程序的 维护带来不便,AOP就实现了把这些业务需求与系统需求分开来做。 这种解决的方式也称代 理机制。先来了解一下 AOP的相关概念,Spring参考手册中定义了以下几个 AOP的重要概念, 结合以上代码分析如下:切面(Aspect):官 方的抽象定义为 一个关注点的模块化,这个关注点可能会横切多个对象”在本

14、例中, 切面就是类TestAspect所关注的具体行为, 例女口,AServicelmpl.barA() 的调用就是切面 TestAspect所关注的行为之一。 切面在ApplicationContext中 来配置。连接点(Joinpoint):程序执行过程中的某一行为,例如, UserService.get的调用或者 UserService.delete 抛出异常等行为。通知(Advice):切面对于某个 连接点所产生的动作,例如, TestAspect中对com.spring.service包下所有类的方法进行日志记录的动作就是一个Advice。其中,一个 切面可以包含多个 “Advice

15、,例如ServiceAspect。切入点(Pointcut):匹配连接点的断言,在 AOP中通知和一个切入点表达式关联。例如,TestAspect中的所有通知所关注的连接点,都由切入点表达式execution(*com.spring.service.*.*(.) 来决定。目标对象( Target Object ) :被一个或者多个切面所通知的对象。例如,AServcieImpl和BServicelmpI,当然在实际运行时,Spring AOP采用代理实现,实际 AOP操作的是 TargetObject 的代理对象。AOP代理(AOP Proxy):在Spring AOP中有两种代理方式,JDK动态代理和 CGLIB代理。默认情况下,TargetObject实现了接口时,则采用JDK动态代理,例女口,AServiceImpl ; 反之,采用 CGLIB代理,例如,BServiceImpl。强制使用 CGLIB代理需要将 aop:config的 proxy-target-class 属性设为 true 。通知(Advice)类型

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号