SSM7.1【Spring:SpringMVC拦截器interceptor】

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

复制代码
 1 <%--
 2   Created by IntelliJ IDEA.
 3   User: yubaby
 4   Date: 2021/7/20
 5   Time: 21:39
 6   To change this template use File | Settings | File Templates.
 7 --%>
 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 9 <html>
10 <head>
11     <title>Title</title>
12 </head>
13 <body>
14     <h2>hello world ${name}</h2>
15 </body>
16 </html>
复制代码
复制代码
 1 <%--
 2   Created by IntelliJ IDEA.
 3   User: yubaby
 4   Date: 2021/7/20
 5   Time: 22:34
 6   To change this template use File | Settings | File Templates.
 7 --%>
 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 9 <html>
10 <head>
11     <title>Title</title>
12 </head>
13 <body>
14     <h1>error</h1>
15 </body>
16 </html>
复制代码
复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>com.haifei</groupId>
 8     <artifactId>SSM7_spring_interceptor</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10     <packaging>war</packaging>
11 
12 
13     <dependencies>
14         <!--<dependency>
15             <groupId>org.springframework</groupId>
16             <artifactId>spring-context</artifactId>
17             <version>5.0.5.RELEASE</version>
18         </dependency>-->
19         <!--<dependency>
20             <groupId>org.springframework</groupId>
21             <artifactId>spring-web</artifactId>
22             <version>5.0.5.RELEASE</version>
23         </dependency>-->
24         <dependency>
25             <groupId>org.springframework</groupId>
26             <artifactId>spring-webmvc</artifactId>
27             <version>5.0.5.RELEASE</version>
28         </dependency>
29 
30         <dependency>
31             <groupId>javax.servlet</groupId>
32             <artifactId>javax.servlet-api</artifactId>
33             <version>3.0.1</version>
34             <scope>provided</scope>
35         </dependency>
36         <dependency>
37             <groupId>javax.servlet.jsp</groupId>
38             <artifactId>javax.servlet.jsp-api</artifactId>
39             <version>2.2.1</version>
40             <scope>provided</scope>
41         </dependency>
42 
43         <dependency>
44             <groupId>commons-logging</groupId>
45             <artifactId>commons-logging</artifactId>
46             <version>1.2</version>
47         </dependency>
48         <dependency>
49             <groupId>org.slf4j</groupId>
50             <artifactId>slf4j-log4j12</artifactId>
51             <version>1.7.7</version>
52         </dependency>
53         <dependency>
54             <groupId>log4j</groupId>
55             <artifactId>log4j</artifactId>
56             <version>1.2.17</version>
57         </dependency>
58     </dependencies>
59 
60 
61     <build>
62         <plugins>
63             <!--jdk编译插件-->
64             <plugin>
65                 <groupId>org.apache.maven.plugins</groupId>
66                 <artifactId>maven-compiler-plugin</artifactId>
67                 <version>3.1</version>
68                 <configuration>
69                     <target>1.8</target>
70                     <source>1.8</source>
71                     <encoding>UTF-8</encoding> <!--防止sout内部输出中文乱码-->
72                 </configuration>
73             </plugin>
74             <!--tomcat7插件-->
75             <plugin>
76                 <groupId>org.apache.tomcat.maven</groupId>
77                 <artifactId>tomcat7-maven-plugin</artifactId>
78                 <version>2.1</version>
79                 <configuration>
80                     <port>8080</port>
81                     <path>/ssm7</path>
82                     <uriEncoding>UTF-8</uriEncoding> <!--防止get请求url中中文参数乱码-->
83                 </configuration>
84             </plugin>
85         </plugins>
86     </build>
87 
88 
89 </project>
复制代码
复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
 5 
 6 
 7     <!--配置SpringMVC的核心组件:DispatcherServlet前端控制器-->
 8     <servlet>
 9         <servlet-name>DispatcherServlet</servlet-name>
10         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
11         <init-param>
12             <param-name>contextConfigLocation</param-name>
13             <param-value>classpath:spring-mvc.xml</param-value>
14         </init-param>
15         <load-on-startup>1</load-on-startup>
16     </servlet>
17     <servlet-mapping>
18         <servlet-name>DispatcherServlet</servlet-name>
19         <url-pattern>/</url-pattern> <!--配置为缺省目的是所有请求都要过前端控制器-->
20     </servlet-mapping>
21 
22 
23 </web-app>
复制代码
复制代码
 1 package com.haifei.controller;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.servlet.ModelAndView;
 6 
 7 @Controller
 8 public class TargetController {
 9 
10     @RequestMapping("/target")
11     public ModelAndView show(){
12         System.out.println("目标资源正在执行。。。");
13 
14         ModelAndView modelAndView = new ModelAndView();
15         modelAndView.addObject("name","itcast");
16         modelAndView.setViewName("index");
17         return modelAndView;
18 
19         /*
20         编写拦截器及其配置前:
21 
22         访问 http://localhost:8080/ssm7/target
23         页面 hello world itcast
24         控制台 目标资源正在执行。。。
25          */
26     }
27 
28 }
复制代码
复制代码
 1 package com.haifei.interceptor;
 2 
 3 import org.springframework.web.servlet.HandlerInterceptor;
 4 import org.springframework.web.servlet.ModelAndView;
 5 
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 
 9 /**
10  *  拦截器
11  *      相关方法执行顺序:preHandle() --> show() --> postHandle() --> afterCompletion()
12  */
13 public class MyInterceptor1 implements HandlerInterceptor {
14 
15     //在目标方法(例如show())执行之前执行
16     @Override
17     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
18         System.out.println("preHandle....");
19 
20         /*return false; //false拦截
21         //preHandle....*/
22 
23         /*return true; //true放行
24 //        preHandle....
25 //        目标资源正在执行。。。
26 //        postHandle.....
27 //        afterCompletion......*/
28 
29         String param = request.getParameter("param");
30 //        if (param.equals("yes")){ //空指针异常
31         if ("yes".equals(param)){
32             return true; //true放行
33         }else {
34             request.getRequestDispatcher("/error.jsp").forward(request, response); //请求转发
35             return false; //false拦截
36         }
37         //http://localhost:8080/ssm7/target             error
38         //http://localhost:8080/ssm7/target?param=yes   hello world itcast
39     }
40 
41     //在目标方法执行之后、视图对象(ModelAndView)抵达页面之前执行
42     @Override
43     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
44         System.out.println("postHandle.....");
45 
46         modelAndView.addObject("name", "itheima");
47         //http://localhost:8080/ssm7/target?param=yes   hello world itheima
48     }
49 
50     //在流程执行完毕之后执行
51     @Override
52     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
53         System.out.println("afterCompletion......");
54     }
55 
56 }
复制代码
复制代码
 1 <?xml version="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:mvc="http://www.springframework.org/schema/mvc"
 5        xmlns:context="http://www.springframework.org/schema/context"
 6        xsi:schemaLocation="
 7         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 8         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
 9         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
10 
11 
12     <!--1、mvc注解驱动-->
13     <mvc:annotation-driven/>
14 
15     <!--2、配置视图解析器-->
16     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
17         <property name="prefix" value="/"/>
18         <property name="suffix" value=".jsp"/>
19     </bean>
20 
21     <!--3、静态资源权限开放-->
22     <mvc:default-servlet-handler/>
23 
24     <!--4、组件扫描  扫描Controller-->
25     <context:component-scan base-package="com.haifei.controller"/>
26     
27     
28     <!--配置拦截器-->
29     <mvc:interceptors>
30         <mvc:interceptor>
31             <!--对哪些资源执行拦截操作-->
32             <mvc:mapping path="/**" /> <!--对所有资源-->
33             <bean class="com.haifei.interceptor.MyInterceptor1"/>
34         </mvc:interceptor>
35         <mvc:interceptor>
36             <mvc:mapping path="/**" />
37             <bean class="com.haifei.interceptor.MyInterceptor2"/>
38         </mvc:interceptor>
39     </mvc:interceptors>
40 
41 </beans>
复制代码
复制代码
 1 package com.haifei.interceptor;
 2 
 3 import org.springframework.web.servlet.HandlerInterceptor;
 4 import org.springframework.web.servlet.ModelAndView;
 5 
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 
 9 /**
10  * http://localhost:8080/ssm7/target?param=yes
11  *      preHandle....
12  *      preHandle2222....
13  *      目标资源正在执行。。。
14  *      postHandle2222.....
15  *      postHandle.....
16  *      afterCompletion2222......
17  *      afterCompletion......
18  *
19  *      MyInterceptor1和MyInterceptor2 中相应方法的执行顺序跟spring-mvc.xml中两者的配置顺序有关
20  */
21 public class MyInterceptor2 implements HandlerInterceptor {
22 
23     //在目标方法执行之前执行
24     @Override
25     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
26         System.out.println("preHandle2222....");
27         return true;
28     }
29 
30     //在目标方法执行之后、视图对象(ModelAndView)抵达页面之前执行
31     @Override
32     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
33         System.out.println("postHandle2222.....");
34     }
35 
36     //在流程执行完毕之后执行
37     @Override
38     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
39         System.out.println("afterCompletion2222......");
40     }
41 
42 }
复制代码

 

posted @   yub4by  阅读(62)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示