SpringMVC学习篇(八)

news2024/10/5 13:48:46

SpringMVC拦截器

1.拦截器和过滤器的区别

过滤器拦截器
servlet规范中(java ee)规范中的一部分,任何java web工程都可以使用拦截器是框架提供的,如只有在SpringMVC框架下的工程才能使用其提供的拦截器
在url-pattern中配置了/*之后,可以拦截任何一切资源拦截器只会拦截控制器方法,像jsp页面、css资源都是不会拦截的

2 拦截器执行流程

2.1 准备工作

2.1.1 导入spring-api依赖

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>servlet-api</artifactId>
    <version>6.0.53</version>
</dependency>

2.1.2 在SpringMvc2.xml配置拦截器

<mvc:interceptors>
      <mvc:interceptor>
            <mvc:mapping path="/emps/**"/>
            <mvc:exclude-mapping path="/emps/find*"/>
            <!--拦截器对象的地址-->
            <bean class="com.interceptor.MyInterceptor"></bean>
      </mvc:interceptor>
</mvc:interceptors>

2.1.3 创建EmpController类

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("emps")
public class EmpController {
}

2.1.4 创建HandlerInterceptor接口的实现子类

package com.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/*这个是需要导入servlet-api依赖才可以使用的*/
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle 1");
        return true;
    }

    @Override
    public void postHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle 1");
    }

    @Override
    public void afterCompletion(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion 1");
    }
}

2.2 查询员工流程测试

2.2.1 示例代码

 @RequestMapping("find")
    public String find(){
        System.out.println("查询员工");
        return "index";
    }

2.2.2 运行截图

a 前台访问部分

在这里插入图片描述

b 控制台部分

在这里插入图片描述

2.3 删除员工流程测试

2.3.1 示例代码

@RequestMapping("delete")
    public String delete(){
        System.out.println("删除员工");
        return "index";
    }

2.3.2 运行截图

a 前台访问部分

在这里插入图片描述

b 控制台部分

在这里插入图片描述

2.4 添加员工流程测试

2.4.1 示例代码

 @RequestMapping("add")
    public String add(){
        System.out.println("添加员工");
        return "index";
    }

2.4.2 运行截图

a 前台访问部分

在这里插入图片描述

b 控制台部分

在这里插入图片描述

3 多个拦截器之间的执行流程

3.1 准备工作

3.1.1 导入spring-api依赖

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>servlet-api</artifactId>
    <version>6.0.53</version>
</dependency>

3.1.2 在SpringMvc2.xml配置拦截器

  <!--拦截器配置 一个mvc:interceptor就是一个拦截器
          mvc:mapping 要拦截的地址 支持Ant的格式
          mvc:exclude-mapping  不需要拦截的地址
          拦截器里头如何配置: 要配置先拦的,再配置后拦截的
          bean就是拦截器对象是谁
          多个拦截器之间的拦截顺序: 按照书写顺序从上往下依次执行
      -->
      <mvc:interceptors>
            <mvc:interceptor>
                  <mvc:mapping path="/emps/**"/>
                  <mvc:exclude-mapping path="/emps/find*"/>
                  <!--拦截器对象的地址-->
                  <bean class="com.interceptor.MyInterceptor"></bean>
            </mvc:interceptor>
            <mvc:interceptor>
                  <mvc:mapping path="/emps/**"/>
                  <mvc:exclude-mapping path="/emps/find*"/>
                  <!--拦截器对象的地址-->
                  <bean class="com.interceptor.MyInterceptor02"></bean>
            </mvc:interceptor>
      </mvc:interceptors>

3.1.3 创建EmpController类

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("emps")
public class EmpController {
}

3.1.4 创建HandlerInterceptor接口的实现子类MyInterceptor

package com.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/*这个是需要导入servlet-api依赖才可以使用的*/
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle 1");
        return true;
    }

    @Override
    public void postHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle 1");
    }

    @Override
    public void afterCompletion(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion 1");
    }
}

3.1.5 创建HandlerInterceptor接口的实现子类MyInterceptor02

package com.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/*这个是需要导入servlet-api依赖才可以使用的*/
public class MyInterceptor02 implements HandlerInterceptor {
    @Override
    public boolean preHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle 2");
        return true;
    }

    @Override
    public void postHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle2");
    }

    @Override
    public void afterCompletion(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion 2");
    }
}

3.2 查询员工流程测试

3.2.1 示例代码

 @RequestMapping("find")
    public String find(){
        System.out.println("查询员工");
        return "index";
    }

3.2.2 运行截图

a 前台访问部分

在这里插入图片描述

b 控制台部分

在这里插入图片描述

3.3 删除员工流程测试

3.3.1 示例代码

@RequestMapping("delete")
    public String delete(){
        System.out.println("删除员工");
        return "index";
    }

3.3.2 运行截图

a 前台访问部分

在这里插入图片描述

b 控制台部分

在这里插入图片描述

2.4 添加员工流程测试

2.4.1 示例代码

 @RequestMapping("add")
    public String add(){
        System.out.println("添加员工");
        return "index";
    }

2.4.2 运行截图

a 前台访问部分

在这里插入图片描述

b 控制台部分

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/13687.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

easyrecovery工具2023最新版一键恢复丢失数据免费下载

通常&#xff0c;许多人会将工作或生活中的数据存储在我们的计算机上。很多时候&#xff0c;由于我们的误操作或其他一些问题&#xff0c;很容易错误地删除一些文件和数据。特别是&#xff0c;一些计算机故障总是会导致数据丢失&#xff0c;这是非常麻烦的。当需要重新安装系统…

JS 对象总结

对象 创建对象 有两种方式&#xff1a; 通过 new 操作符实例化一个对象&#xff0c;再添加属性。 let person new Object(); person.name "孤城浪人"; person.sayName function() { console.log(this.name); };构造函数&#xff0c;若不需要传参&#xff0…

代码随想录——单词接龙(图论)

题目 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列&#xff1a; 序列中第一个单词是 beginWord 。 序列中最后一个单词是 endWord 。 每次转换只能改变一个字母。 转换过程中的中间单词必须是字典 wordList 中的单词。 给你两个单词 b…

AWVS的简介与安装

目录预备知识实验目的实验环境实验步骤一任务描述&#xff1a;AWVS的简介实验步骤二任务描述&#xff1a;进行AWVS10.5的安装、界面介绍和简单的使用实验步骤三任务描述&#xff1a;AWVS 11.x的安装与简单使用预备知识 Acunetix Web Vulnerability Scanner&#xff08;简称AWV…

Qtcreator中文显示乱码问题终于解决

问题描述&#xff1a;Qtcreator安装好后打印中文在控制台输出乱码&#xff08;自己也在网上查找了好久&#xff0c;终于找到解决方法了&#xff09;。 原因剖析&#xff1a;因为项目的编码与控制台的编码不一致导致的&#xff0c;而qt编码设置里并没有控制台的默认编码&#xf…

华为M-LAG跨设备链路聚合技术理论讲解

目录 为什么会出现M-LAG M-LAG基本概念 M-LAG建立过程 M-LAG的协议兼容性 M-LAG的防环机制 M-LAG正常工作流量转发 单播流量转发 组播流量转发 广播流量转发 M-LAG故障场景流量转发 上行链路故障 下行链路故障 M-LAG主设备故障 Peer-link故障 M-LAG二次故障&…

Kafka部署实验

一、实验介绍 1.1实验内容 实验在Hadoop集群上部署Kafka分布式发布订阅消息系统&#xff0c;并完成kafka消息管理验证。 1.2实验知识点 Kafka集群部署 Kafka消息处理流程 1.3实验环境 Kafka2.11 网易云平台 1.4实验资源 资源名称存储目录Kafka安装包/opt/software/pack…

工业数采网关 工业数采模块 工业数采工业数采终端硬件

计讯物联TG462工业数据采集网关&#xff0c;支持工业采集、边缘计算、无线通信、远程控制、远程运维&#xff0c;广泛应用于智慧工业远距离通信自动化管控物联网场景。计讯工业数采网关TG462接口丰富、丰富协议库、支持主流PLC&#xff0c;对接第三方云平台&#xff0c;工业级设…

【软件测试面试题】面试官:你在工作中发现最有意义的bug?让他满意的回答......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试面试中被问的问…

iOS开发之自定义的framework添加第三方framework,lipo和ar命令看.o文件

由于需要将之前生成的mediapipe.framework添加到自己的framework中&#xff0c;但是很奇怪用普通的拖拽方式添加&#xff0c;项目工程在加载运行自己的framework时&#xff0c;总是找不到mediapipe.framework中的头文件&#xff0c;而只编译自己的framework时&#xff0c;也是可…

免费域名证书最新申请方式大全

目前市场环境下&#xff0c;可获得域名SSL证书的方式有很多&#xff0c;一般有付费和免费划分。对于想免费使用域名SSL证书的朋友&#xff0c;这里收集整理了几个常用的SSL证书申请方式。 对于SSL证书的用处&#xff0c;简单的来说&#xff0c;就是加密数据传输&#xff0c;使…

这么讲不怕你不懂负载均衡

现在前沿技术领域一个很有突破口和争议性的领域就是分布式系统以及高并发的解决与处理。而解决高并发其中一个很有意思的方法就是负载均衡。 那么&#xff0c;究竟什么才是负载均衡呢&#xff1f; 首先&#xff0c;维基百科是这样说的&#xff1a; 负载平衡&#xff08;英语&a…

Java_多态

作者&#xff1a;爱塔居的博客_CSDN博客-JavaSE领域博主 专栏&#xff1a;JavaSE 作者简介&#xff1a;大三学生&#xff0c;希望跟大家一起进步 文章目录 目录 文章目录 一、多态概念 二、多态实现条件 三、重写 四、向上转型和向下转型 4.1 向上转型 4.2 向下转型 五、多态的…

社交电商平台的消费返利模式——共享购

实际上目前很多商家平台提到做电商平台&#xff0c;坚信最先第一个想到的是一些大型好像淘宝、某猫、某多多这些&#xff0c;但是随着社交媒体电商行业发展&#xff0c;大量商业运营模式及其商业平台&#xff0c;第一个的自然也就相对于交易返利模式的渠道&#xff0c;那大家在…

ubuntu中redis客户端与服务端命令、redis数据类型、字符串string、哈希hash、列表list、集合set、有序集合zset操作命令

一、NoSQL概述 NoSQL(not only SQL)&#xff1a;泛指非关系型数据库&#xff0c;是一类新出现的数据库&#xff0c;不支持SQL语法&#xff0c;其存储的数据都是kv形式&#xff0c;存储结构与关系型数据库中的关系表完全不同 NoSQL产品种类&#xff1a;主要有Redis、MongoDB、…

超百万人用它生成3D头像,这项技术刚刚中选了SIGGRAPH Asia 2022

如何才能做一个和真人一样的 3D 头像&#xff1f; 先上传一张照片&#xff1a; 变成这样&#xff1a; 换一个人的照片&#xff1a; 再看一个例子&#xff1a; 眼镜也可以放进来&#xff1a; 在此基础上&#xff0c;还可以换上各种各样的发型、饰品&#xff0c;眼睛、帽子、发色…

Css定位

定位 为什么需要定位&#xff1f; 提问&#xff1a;以下情况使用标准流或者浮动能实现吗&#xff1f; 某个元素可以自由的在一个盒子内移动位置&#xff0c;并且压住其他盒子。当我们滚动窗口的时候&#xff0c;盒子是固定在屏幕的某个位置的 所以&#xff1a; 浮动可以让多…

笨办法学 Python(第三版)习题 2: 注释和#号

参考书籍 代码 # -*- coding: utf-8 -*-# A comment, this is so you can read your program later. # Anything after the # is ignored by python.print("I could have code like this.") # and the comment after is ignored# You can also use a comment to &qu…

北京外国语大学2023年上半年公派英语高级培训班开始招生

教育部指定出国留学人员培训部的“培训班结业证书”是国家留学基金委&#xff08;CSC&#xff09;公派项目认可的外语水平证明文件之一。近日&#xff0c;北京外国语大学发出2023年上半年公派英语高级培训班招生简章。为方便培训者了解情况&#xff0c;知识人网小编特转载如下。…

LeetCode[112]路径总和

难度&#xff1a;简单 题目&#xff1a; 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c…