• 8.学习springmvc的拦截器


    一.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     /**
    10      * 预处理方法,controller方法被执行前先执行
    11      * return true 放行,执行下一个拦截器,若没有拦截器则执行Controller中的方法
    12      * return false 不放行,可以通过request或response进行页面跳转
    13      * @param request
    14      * @param response
    15      * @param handler
    16      * @return
    17      * @throws Exception
    18      */
    19     @Override
    20     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    21 
    22         System.out.println("MyInterceptor1执行了...");
    23         return true;
    24     }
    25 }

    配置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后,执行该方法。主要用于回收资源。

    执行成功!

  • 相关阅读:
    html悬停文字
    在线表单验证
    无法定位ul列表的下拉选项
    HDU 4576 Robot(概率dp+滚动数组)
    HDU 4405 Aeroplane chess(期望dp)
    CodeForces 401C Team(简单构造)
    POJ 2253 Frogger(最短路Dijkstra or flod)
    HDU 4763 Theme Section(kmp)
    【JZOJ5462】好文章【哈希】
    【JZOJ5462】好文章【哈希】
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/11982175.html
Copyright © 2020-2023  润新知