• (续)SSM整合之springmvc笔记(拦截器)(P164-168)


    目录

    一 准备工作  

    1. 创建spring_mvc_extension     com.atguigu

     2 .导入依赖

    3.   添加web模块

    4 .web.xml

    5 . springmvc.xml

    6   index.html

    7   控制层

    8  success.html

    9 .添加到tomcat

    ​10 测试

    二 .  测试拦截器

    1 . index.html

     2 .  FirstInterceptor

    三  拦截器的配置

    四  拦截器的三个抽象方法

    五  多个拦截器的执行顺序

    1. 在创建一个拦截器SecondInterceptor

    2.  配置拦截器

    3.  重新启动

     总结


    一 准备工作  

     1. 创建spring_mvc_extension     com.atguigu

     2 .导入依赖

    war
    
    
        
        
            org.springframework
            spring-webmvc
            5.3.1
        
    
        
        
            ch.qos.logback
            logback-classic
            1.2.3
        
    
        
        
            javax.servlet
            javax.servlet-api
            3.1.0
            provided
        
    
        
        
            org.thymeleaf
            thymeleaf-spring5
            3.0.12.RELEASE
        
    
        
        
            commons-fileupload
            commons-fileupload
            1.3.1
        
    
    

    3.   添加web模块

    4 .web.xml

    1. "1.0" encoding="UTF-8"?>
    2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    5. version="4.0">
    6. <filter>
    7. <filter-name>CharacterEncodingFilterfilter-name>
    8. <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
    9. <init-param>
    10. <param-name>encodingparam-name>
    11. <param-value>UTF-8param-value>
    12. init-param>
    13. <init-param>
    14. <param-name>forceEncodingparam-name>
    15. <param-value>trueparam-value>
    16. init-param>
    17. filter>
    18. <filter-mapping>
    19. <filter-name>CharacterEncodingFilterfilter-name>
    20. <url-pattern>/*url-pattern>
    21. filter-mapping>
    22. <filter>
    23. <filter-name>HiddenHttpMethodFilterfilter-name>
    24. <filter-class>org.springframework.web.filter.HiddenHttpMethodFilterfilter-class>
    25. filter>
    26. <filter-mapping>
    27. <filter-name>HiddenHttpMethodFilterfilter-name>
    28. <url-pattern>/*url-pattern>
    29. filter-mapping>
    30. <servlet>
    31. <servlet-name>SpringMVCservlet-name>
    32. <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    33. <init-param>
    34. <param-name>contextConfigLocationparam-name>
    35. <param-value>classpath:springmvc.xmlparam-value>
    36. init-param>
    37. <load-on-startup>1load-on-startup>
    38. servlet>
    39. <servlet-mapping>
    40. <servlet-name>SpringMVCservlet-name>
    41. <url-pattern>/url-pattern>
    42. servlet-mapping>
    43. web-app>

    5 . springmvc.xml

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. xmlns:mvc="http://www.springframework.org/schema/mvc"
    6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    7. <context:component-scan base-package="com.atguigu">context:component-scan>
    8. <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
    9. <property name="order" value="1"/>
    10. <property name="characterEncoding" value="UTF-8"/>
    11. <property name="templateEngine">
    12. <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
    13. <property name="templateResolver">
    14. <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
    15. <property name="prefix" value="/WEB-INF/templates/"/>
    16. <property name="suffix" value=".html"/>
    17. <property name="templateMode" value="HTML5"/>
    18. <property name="characterEncoding" value="UTF-8" />
    19. bean>
    20. property>
    21. bean>
    22. property>
    23. bean>
    24. <mvc:default-servlet-handler />
    25. <mvc:annotation-driven />
    26. <mvc:view-controller path="/" view-name="index">mvc:view-controller>
    27. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    28. bean>
    29. beans>

    6   index.html

    1. html>
    2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>首页title>
    6. head>
    7. <body>
    8. <h1>index.htmlh1>
    9. body>
    10. html>

    7   控制层

    1. @Controller
    2. public class TestController {
    3. @RequestMapping("/test/hello")
    4. public String testHello(){
    5. return "success";
    6. }
    7. }

    8  success.html

    1. html>
    2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>成功title>
    6. head>
    7. <body>
    8. <h1>success.htmlh1>
    9. body>
    10. html>

    9 .添加到tomcat

     

    10 测试

    二 .  测试拦截器

    1 . index.html

    1. html>
    2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>首页title>
    6. head>
    7. <body>
    8. <h1>index.htmlh1>
    9. <a th:href="@{/test/hello}">测试拦截器a>
    10. body>
    11. html>

     2 .  FirstInterceptor

    1. package com.atguigu.interceptor;
    2. import org.springframework.stereotype.Component;
    3. import org.springframework.web.servlet.HandlerInterceptor;
    4. import org.springframework.web.servlet.ModelAndView;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. /**
    8. * 拦截器的三个方法:
    9. * preHandle():在控制器方法执行之前执行,其返回值表示对控制器方法的拦截(false)或放行(true)
    10. * postHandle():在控制器方法执行之后执行
    11. * afterCompletion():在控制器方法执行之后,且渲染视图完毕之后执行
    12. *
    13. * 多个拦截器的执行顺序和在SpringMVC的配置文件中配置的顺序有关
    14. * preHandle()按照配置的顺序执行,而postHandle()和afterCompletion()按照配置的反序执行
    15. *
    16. * 若拦截器中有某个拦截器的preHandle()返回了false
    17. * 拦截器的preHandle()返回false和它之前的拦截器的preHandle()都会执行
    18. * 所有的拦截器的postHandle()都不执行
    19. * 拦截器的preHandle()返回false之前的拦截器的afterCompletion()会执行
    20. */
    21. @Component
    22. public class FirstInterceptor implements HandlerInterceptor {
    23. @Override
    24. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    25. System.out.println("FirstInterceptor-->preHandle");
    26. return true;
    27. }
    28. @Override
    29. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    30. System.out.println("FirstInterceptor-->postHandle");
    31. }
    32. @Override
    33. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    34. System.out.println("FirstInterceptor-->afterCompletion");
    35. }
    36. }

    三  拦截器的配置

    SpringMVC 中的拦截器用于拦截控制器方法的执行

    SpringMVC中的拦截器需要实现HandlerInterceptor

    1. <mvc:interceptors>
    2. <mvc:interceptor>
    3. <mvc:mapping path="/**" />
    4. <mvc:exclude-mapping path="/abc" />
    5. <ref bean="firstInterceptor" />
    6. mvc:interceptor>
    7. mvc:interceptors>

    /*   上下文路径的一层目录

     /**

     

     

     

     

    四  拦截器的三个抽象方法

    SpringMVC 中的拦截器有三个抽象方法:
    preHandle :控制器方法执行之前执行 preHandle() ,其 boolean 类型的返回值表示是否拦截或放行,返 true 为放行,即调用控制器方法;返回 false 表示拦截,即不调用控制器方法
    postHandle :控制器方法执行之后执行 postHandle()
    afterCompletion :处理完视图和模型数据,渲染视图完毕之后执行 afterCompletion()

    五  多个拦截器的执行顺序

    ①若每个拦截器的 preHandle() 都返回 true
    此时多个拦截器的执行顺序和拦截器在 SpringMVC 的配置文件的配置顺序有关:
    preHandle() 会按照配置的顺序执行,而 postHandle() afterCompletion() 会按照配置的反序执行
    ②若某个拦截器的 preHandle() 返回了 false
    preHandle() 返回 false 和它之前的拦截器的 preHandle() 都会执行, postHandle() 都不执行,返回 false的拦截器之前的拦截器的 afterCompletion() 会执行

    1. 在创建一个拦截器SecondInterceptor

    1. package com.atguigu.interceptor;
    2. import org.springframework.stereotype.Component;
    3. import org.springframework.web.servlet.HandlerInterceptor;
    4. import org.springframework.web.servlet.ModelAndView;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. /**
    8. * Date:2022/7/10
    9. * Author:ybc
    10. * Description:
    11. * 拦截器的三个方法:
    12. * preHandle():在控制器方法执行之前执行,其返回值表示对控制器方法的拦截(false)或放行(true)
    13. * postHandle():在控制器方法执行之后执行
    14. * afterCompletion():在控制器方法执行之后,且渲染视图完毕之后执行
    15. *
    16. * 多个拦截器的执行顺序
    17. */
    18. @Component
    19. public class SecondInterceptor implements HandlerInterceptor {
    20. @Override
    21. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    22. System.out.println("SecondInterceptor-->preHandle");
    23. return true;
    24. }
    25. @Override
    26. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    27. System.out.println("SecondInterceptor-->postHandle");
    28. }
    29. @Override
    30. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    31. System.out.println("SecondInterceptor-->afterCompletion");
    32. }
    33. }

    2.  配置拦截器

    1. <mvc:interceptors>
    2. <ref bean="firstInterceptor" />
    3. <ref bean="secondInterceptor" />
    4. mvc:interceptors>

    3.  重新启动

     

     现在我们把配置顺序修改一下

    1. <mvc:interceptors>
    2. <ref bean="secondInterceptor" />
    3. <ref bean="firstInterceptor" />
    4. mvc:interceptors>

    重新启动

     总结

    拦截器的三个方法:
    * preHandle():在控制器方法执行之前执行,其返回值表示对控制器方法的拦截(false)或放行(true)
    * postHandle():在控制器方法执行之后执行
    * afterCompletion():在控制器方法执行之后,且渲染视图完毕之后执行
    *
    * 多个拦截器的执行顺序和在SpringMVC的配置文件中配置的顺序有关
    * preHandle()按照配置的顺序执行,而postHandle()和afterCompletion()按照配置的反序执行
    *
    * 若拦截器中有某个拦截器的preHandle()返回了false
    * 拦截器的preHandle()返回false和它之前的拦截器的preHandle()都会执行
    * 所有的拦截器的postHandle()都不执行
    * 拦截器的preHandle()返回false之前的拦截器的afterCompletion()会执行

     

  • 相关阅读:
    双十一购物狂欢节准备好买什么了吗?双十一这些好物不能错过
    5 大核心能力+1 套全局防护策略,星环科技 Defensor 构建企业数据安全护城河
    怎么选工作流表单设计器?
    5、【办公自动化】Python实现PDF转Word
    JVM 内存结构
    Elasticsearch上手指南
    OS>>多线程
    Ajax——跨域解决
    LightningChart .NET 10.3.2.2 -Crack-2022-08-09
    Python日期与时间模块datetime、time、Calendar、dateuil 相关使用讲解
  • 原文地址:https://blog.csdn.net/m0_59281987/article/details/127957092