异常解析器:

  • 用于统一处理 servlet 中的异常;

拦截器:

  • 用于统一处理业务中需要统一处理的页面(比如登录判断等), 可抽取出来统一处理.

我们一般需要在每个页面都通过在session中寻找有无loginID来判断这个用户是否登录,如果没有找到就需要写一个逻辑重定向到login界面,如果每个控制器都这样来一下,代码就会重复,这个时候我们就可以用拦截器针对特定的url控制器进行判断是否要重定向

先修改一下界面

index.jsp

<button class="btn btn-primary"><a href="/attend">interceptor</a></button>

control

//该控制器注册了拦截器,此时session上没有loginID(很显然没有)就不会到attend界面,而是到login界面
@RequestMapping(value = "/attend")
public String getAttend(){ return "attend";
} //这是没有登录信息之后拦截器响应过来的login界面请求
@RequestMapping(value = "/login")
public String getLogin(){
return "login";
}

添加两个界面

使用拦截器

创建拦截器 MyInterceptor.java:(实现 HandlerInterceptor 接口并重写其三个方法)

//创建拦截器 MyInterceptor.java:(实现 HandlerInterceptor 接口并重写其三个方法)
public class MyInterceptor implements HandlerInterceptor {
//在control之前执行,在这里写control中重复的功能
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
if (session.getAttribute("loginID")!=null){
System.out.println("loginID有值");
//return true即放行,执行后来的control
return true;
}
//中断之前响应请求,为没有登录转向一个定好的界面
System.out.println("login无值");
response.sendRedirect("/login");
return false;
} //在control之后,响应之前执行,一般不会使用
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("control到请求响应时间段");
} //在视图渲染完毕之后执行,做一些资源的回收操作,一般不会使用
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}

注册拦截器(在springmvc配置文件)

<!--全部拦截器-->
<mvc:interceptors>
<!--添加一个拦截器-->
<mvc:interceptor>
<!--需要拦截的路径-->
<mvc:mapping path="/attend"/>
<!--使用哪个拦截器-->
<bean class="com.wang.converter.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>

拦截器的优先顺序

拦截器1

//拦截器1

public class Inteceptor1 implements HandlerInterceptor{

    //方法执行前1
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
//返回值boolean类型 决定是否放行
System.out.println("方法执行前1");
return true;
} //方法执行后1
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)throws Exception {
System.out.println("方法执行后1");
} //页面渲染后1
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {
System.out.println("页面渲染后1");
} }

拦截器2

//拦截器1

public class Inteceptor1 implements HandlerInterceptor{

    //方法执行前1
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
//返回值boolean类型 决定是否放行
System.out.println("方法执行前1");
return true;
} //方法执行后1
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)throws Exception {
System.out.println("方法执行后1");
} //页面渲染后1
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {
System.out.println("页面渲染后1");
} }

拦截器的配置(注意顺序)

//拦截器1

public class Inteceptor1 implements HandlerInterceptor{

    //方法执行前1
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
//返回值boolean类型 决定是否放行
System.out.println("方法执行前1");
return true;
} //方法执行后1
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)throws Exception {
System.out.println("方法执行后1");
} //页面渲染后1
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {
System.out.println("页面渲染后1");
} }

结果:

springMVC-9-异常处理器和拦截器的更多相关文章

  1. springmvc文件上传和拦截器

    文件上传 用到这两个包 配置视图解析器:springmvc配置文件配置 <!-- id必须要是"multipartResolver" --> <bean id=& ...

  2. springMVC源码分析--HandlerInterceptor拦截器调用过程(二)

    在上一篇博客springMVC源码分析--HandlerInterceptor拦截器(一)中我们介绍了HandlerInterceptor拦截器相关的内容,了解到了HandlerInterceptor ...

  3. SpringMVC(五)-- springmvc的系统学习之拦截器

    资源:尚学堂 邹波 springmvc框架视频 一.拦截器简介 使用拦截器时, (1)实现HandlerInterceptor (2)在springmvc配置文件中配置以下信息 <mvc:int ...

  4. springmvc中拦截器与springmvc全局异常处理器的问题

    最近在做一个练手的小项目, 系统架构中用了springmvc的全局异常处理器, 做了系统的统一异常处理. 后来加入了springmvc的拦截器, 为了一些需求, 在拦截器中的 preHandle 方法 ...

  5. springMVC源码分析之拦截器

    一个东西用久了,自然就会从仅使用的层面上升到探究其原理的层面,在javaweb中springmvc更是如此,越是优秀的框架,其底层实现代码更是复杂,而在我看来,一个优秀程序猿就相当于一名武林高手,不断 ...

  6. SpringMVC -- 梗概--源码--贰--拦截器:Interceptor

    附:实体类 1.配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app versi ...

  7. SpringMvc(四)- 下载,上传,拦截器

    1.图片下载 图片下载:将服务器端的文件以流的形式写到客户端,通过浏览器保存到本地,实现下载: 1.1 图片下载步骤 1.通过session获取上下文对象(session.getServletCont ...

  8. springMVC源码分析--HandlerInterceptor拦截器(一)

    对SpringMVC有所了解的人肯定接触过HandlerInterceptor拦截器,HandlerInterceptor接口给我们提供了3个方法: (1)preHandle: 在执行controll ...

  9. SpringMVC学习(五)——拦截器示例

    部分内容摘自开涛的<跟我学SpringMVC.PDF> 拦截器,本质类似于AOP,主要的应用场景: 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV等. 2.权限检查 ...

  10. springMVC入门(八)------拦截器

    简介 springMVC拦截器针对处理器映射器进行拦截配置 如果在某个处理器映射器中配置拦截,经过该处理器映射器映射成功的Handler最终使用该拦截器 由于springMVC支持配置多个处理器映射器 ...

随机推荐

  1. 基于自动驾驶车辆的NVIDIA-TensorRT推理实时优化

    基于自动驾驶车辆的NVIDIA-TensorRT推理实时优化 Optimizing NVIDIA TensorRT Conversion for Real-time Inference on Auto ...

  2. 手把手使用Python语音识别,进行语音转文字

    0. 太长不看系列,直接使用 在1.2官网注册后拿到APISecret和APIKey,直接复制文章2.4demo代码,确定音频为wav格式,采样率为16K,在命令行执行 python single_s ...

  3. Java知识复习(四)

    最近准备跳槽,又要好好复习基本知识了.过了个年,前面刚接触的springboot也只能先放放了.就先把自己复习了哪些罗列出来吧. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用== ...

  4. 简述MSTP与配置

    一.简介 二.MSTP概述 三.功能 四.配置命令 一.简介 多生成树协议MSTP(Multiple Spanning Tree Protocol)是IEEE 802.1s中定义的生成树协议,通过生成 ...

  5. Excel对单元格设置上涨、下降箭头

    1.有以下学生成绩表,对期末考试设置上涨.下降箭头,体现考生成绩变动: 2.选中C2,"条件格式"-"管理规则"-"新建规则"-" ...

  6. 【原创】SystemVerilog中的多态和虚方法

    封装可以隐藏实现细节,使代码模块化,继承可以扩展已经存在的代码模块,目的都是为了代码重用.多态是为了实现接口的重用.在SystemVerilog中,子类和父类之间多个子程序使用同一个名字的现象称为Sy ...

  7. 什么是OSI的第7层

    1.什么是Internet的第7层? 第7层是指Internet的7层OSI模型的顶层,也称为"应用程序层".这是数据处理的顶层,位于用户与之交互的软件应用程序的表面之下或幕后.例 ...

  8. 服务器通信REST、gRPC,Swagger/OpenAPI,Consul

    服务间的通信方式是在采用微服务架构时需要做出一个最基本的决策.默认的选项是通过 HTTP 发送 JSON,也就是所谓的 REST API.我们也是从 REST 开始的,但最近我们决定改用 gRPC. ...

  9. 4、saltstack的使用

    官方文档地址:http://repo.saltstack.com/#rhel 4.1.saltstatck介绍: 用户要一致,这里使用的是root用户: 用于批量管理成百上千的服务器: 并行的分发,使 ...

  10. jquery 选择器 模糊匹配

    根据name值匹配 1.查询前缀为aa的数据 $("div[name^='aa']"); 2.查询后缀为aa的所有div的jquery对象 $("div[name$='a ...