一.springmvc拦截器介绍和环境搭建

1.介绍:

过滤器:servlet中的一部分,可以拦截所有想要访问的资源。

拦截器:SpringMVC框架中的,只能在SpringMVC中使用并且只能过滤控制器的方法。

流程:用户访问页面->执行拦截器1->执行拦截器2->执行控制器方法->跳转页面->展示给用户

2.入门代码:

编写自定义的拦截器类MyInterceptor1:

  1. /**
  2. * 自定义拦截器类
  3. * @author USTC_WZH
  4. * @create 2019-12-04 12:26
  5. */
  6. public class MyInterceptor1 implements HandlerInterceptor {
  7.  
  8. /**
  9. * 预处理方法,controller方法被执行前先执行
  10. * return true 放行,执行下一个拦截器,若没有拦截器则执行Controller中的方法
  11. * return false 不放行,可以通过request或response进行页面跳转
  12. * @param request
  13. * @param response
  14. * @param handler
  15. * @return
  16. * @throws Exception
  17. */
  18. @Override
  19. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  20.  
  21. System.out.println("MyInterceptor1执行了...");
  22. return true;
  23. }
  24. }

配置springmvc.xml中拦截器属性:

  1. <!--配置拦截器-->
  2. <mvc:interceptors>
  3. <!--配置拦截器-->
  4. <mvc:interceptor>
  5. <!--设置具体要拦截的方法:path="/**"为拦截所有方法,path="/user/*"为拦截user下的方法-->
  6. <mvc:mapping path="/user/*"></mvc:mapping>
  7. <!--配置不要拦截的方法与<mvc:mapping path=""></mvc:mapping> 二者一般只设置一个-->
  8. <!--<mvc:exclude-mapping path=""></mvc:exclude-mapping>-->
  9. <!--配置拦截器对象为自己写的拦截器类-->
  10. <bean class="edu.ustc.interceptor.MyInterceptor1"></bean>
  11. </mvc:interceptor>
  12. </mvc:interceptors>

编写控制器方法:

  1. /**
  2. * @author USTC_WZH
  3. * @create 2019-12-04 12:13
  4. */
  5. @Controller
  6. @RequestMapping("/user")
  7. public class UserController {
  8.  
  9. @RequestMapping("/testInterceptor")
  10. public String testInterceptor(){
  11. System.out.println("testInterceptor执行了...");
  12.  
  13. return "success";
  14. }
  15. }

编写jsp:

index.jsp:

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>Title</title>
  5. </head>
  6. <body>
  7.  
  8. <h3>SpringMVC拦截器</h3>
  9. <a href="user/testInterceptor">SpringMVC拦截器</a>
  10.  
  11. </body>
  12. </html>

success.jsp:

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>success</title>
  5. </head>
  6. <body>
  7.  
  8. <h3>测试Interceptor成功</h3>
  9.  
  10. <% System.out.println("success.jsp执行了..."); %>
  11.  
  12. </body>
  13. </html>

执行结果:

3.拦截器接口演示

preHandle:预处理方法,在控制器方法执行之前执行,return true后执行控制器方法,return false并指定跳转页面则不执行控制器方法。可以用与检测用户是否登陆,未登录跳转登陆页面。

  1. /**
  2. * 预处理方法,controller方法被执行前先执行
  3. * return true 放行,执行下一个拦截器,若没有拦截器则执行Controller中的方法
  4. * return false 不放行,可以通过request或response进行页面跳转
  5. * @param request
  6. * @param response
  7. * @param handler
  8. * @return
  9. * @throws Exception
  10. */
  11. @Override
  12. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  13.  
  14. System.out.println("MyInterceptor1d的preHandle方法执行了...");
  15. // return true;
  16. request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);
  17. return false;
  18.  
  19. }

error.jsp:

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>error</title>
  5. </head>
  6. <body>
  7. <h3>这是错误页面</h3>
  8. </body>
  9. </html>

postHandle:后处理方法,在Controller之后执行并在Controller需要跳转的页面之前执行

  1. /**
  2. * 后处理方法,在Controller之后执行,在Controller需要跳转的success.jsp之前执行。
  3. * 注:当指定跳转页面后会执行后处理方法跳转的页面
  4. * @param request
  5. * @param response
  6. * @param handler
  7. * @param modelAndView
  8. * @throws Exception
  9. */
  10. @Override
  11. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  12. System.out.println("MyInterceptor1d的postHandle方法执行了...");
  13. request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);
  14.  
  15. }

afterCompletion方法在Controller方法执行之后执行并在产生的页面success.jsp后,执行该方法。主要用于回收资源。

执行成功!

8.学习springmvc的拦截器的更多相关文章

  1. SpringMVC—Struts2拦截器学习网址整理

    引自:http://blog.csdn.net/wp1603710463/article/details/49982683 SpringMVC—Struts2拦截器学习网址整理 最近项目中遇到权限相关 ...

  2. springmvc的拦截器

    什么是拦截器                                                         java里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使 ...

  3. SpringMVC利用拦截器防止SQL注入

    引言 随着互联网的发展,人们在享受互联网带来的便捷的服务的时候,也面临着个人的隐私泄漏的问题.小到一个拥有用户系统的小型论坛,大到各个大型的银行机构,互联网安全问题都显得格外重要.而这些网站的背后,则 ...

  4. SpringMVC经典系列-14自己定义SpringMVC的拦截器---【LinusZhu】

    注意:此文章是个人原创.希望有转载须要的朋友们标明文章出处.假设各位朋友们认为写的还好,就给个赞哈.你的鼓舞是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系linusz ...

  5. 基于注解风格的Spring-MVC的拦截器

    基于注解风格的Spring-MVC的拦截器 Spring-MVC如何使用拦截器,官方文档只给出了非注解风格的例子.那么基于注解风格如何使用拦截器呢? 基于注解基本上有2个可使用的定义类,分别是Defa ...

  6. springMVC的拦截器工作流程

    首先,springmvc的拦截器配置在这就不多说了.主要讲一下拦截器的三个方法的执行顺序. preHandle方法一定是最先执行的方法,如果它返回为false下面的方法均不执行. postHandle ...

  7. 转 :关于springmvc使用拦截器

    原博客: http://elim.iteye.com/blog/1750680 SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的 ...

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

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

  9. springMVC配置拦截器、过滤器、前端控制器时遇到的问题总结

    1.业务场景:使用vuejs+springMVC+spring框架搭建一个mis系统,集成SSO单点登录: 2.遇到问题:使用interceptor拦截器配置SSO单点登录,直接敲域名,或者ip+端口 ...

随机推荐

  1. Oracle排序(中文)

    一.中文排序      1. 按照笔划排序       select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_STROKE_M'); ...

  2. sqlserver获得数据库非聚集索引的代码

    创建Index DECLARE @zindex_sql NVARCHAR(max); SET @zindex_sql = N''; SELECT @zindex_sql = @zindex_sql + ...

  3. 如何通过 IntelliJ IDEA 来提升 Java8 Stream 的编码效率

    本文翻译整理自:https://winterbe.com/posts/2015/03/05/fixing-java-8-stream-gotchas-with-intellij-idea 作者:@Wi ...

  4. opencv常用数据结构

    2019/10/29 1.Mat 成员函数:cols.rows.channels.ptr获取任意行的首地址.at处理像素 2.InputArray/OutArray相当于Mat 2019/11/4 1 ...

  5. Ubuntu 18.04 RTX2080(ti) + tensorflow-gpu + cuda9.0 + gcc5 兼容性问题解决

    0.下载display driver.cuda和cudnn RTX2080 Display Driver cuda cudnn 1. 禁止系统默认的显卡驱动 打开系统黑名单 sudo gedit /e ...

  6. 上传文件至Github仓库

    Github的使用 创建一个本地的版本库(也就是一个文件夹) 新建文件夹,或使用Git bash命令行窗口创建 $ mkdir test $ cd test 在命令行中输入 git init把这个文件 ...

  7. JavaScript 流程控制(一)顺序结构与分支结构

    语句:语句可以理解为一个行为,循环语句和判断语句就是典型的语句.一个程序有很多个语句组成,一般情况下分号;分割一个一个的语句:如果省略分号,则由解析器确定语句的结尾(不推荐使用) 一.流程控制 流程控 ...

  8. 英语chalchite蓝绿松石chalchite单词

    蓝绿松石是铜和铝的磷酸盐矿物集合体,以不透明的蔚蓝色最具特色.也有淡蓝.蓝绿.绿.浅绿.黄绿.灰绿.苍白色等色.一般硬度5~6,密度2.6~2.9,折射率约1.62.长波紫外光下,可发淡绿到蓝色的荧光 ...

  9. Java深入学习(3):线程池原理

    线程池的特点: 降低资源:通过重复利用已创建的线程降低线程创建和销毁的损耗 提高效率:当任务到底时,不需要等待,立即执行 方便管理:统一分配,调优和监控等 线程池的创建方式: 1.CachedThre ...

  10. android 连接wifi案例

    1.xml布局文件: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmln ...