当前位置: 首页 > news >正文

springmvc的拦截器,全局异常处理和文件上传

拦截器:

拦截不符合规则的,放行符合规则的。 等价于过滤器。

拦截器只拦截controller层API接口。

如何定义拦截器。

定义一个类并实现拦截器接口

public class MyInterceptor implements HandlerInterceptor {public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//获取session对象HttpSession session=request.getSession();//获取session当前用户的信息Object userinfo = session.getAttribute("userinfo");if(userinfo==null){//没有登录,跳转到登录页面response.sendRedirect("/login.jsp");return false;}return true; //如果返回值为true,表示拦截器放行。否则,拦截器不放行}
}

注册拦截器并配置拦截规则--springmvc配置文件中

   <!--注册自定义拦截器以及拦截规则--><mvc:interceptors><mvc:interceptor><!--path:拦截的路径 /**表示拦截多层路径--><mvc:mapping path="/**"/><!--排除的路径。--><mvc:exclude-mapping path="/user/login"/><!--放置自定义的拦截器类--><bean class="com.aaa.interceptor.MyInterceptor"/></mvc:interceptor></mvc:interceptors>

全局异常处理

如果controller发生异常,我们需要对controller层中的所有方法都进行处理。这样比较麻烦。我们可以对所有controller中的接口提供一个统一的异常处理。

定义全局异常类

//全局异常处理类.
@ControllerAdvice
public class MyGlobalException {@ExceptionHandler(Exception.class) //当发生Exception类型的异常会执行该方法,并异常对象传递给该方法的参数。@ResponseBodypublic String handlerException(Exception e){System.out.println(e.getMessage());System.out.println("错误~~~~~~~~~~~~~~~~~~~~~~~~~");return "error2222222222222222222222";//经过视图解析器: /views/error.jsp}@ExceptionHandler(ArithmeticException.class)@ResponseBodypublic String handlerArithmeticException(Exception e){System.out.println("错误****************************");return "error2222222222222222222";}
​
}
​

注意:保证springmvc能够扫描到该异常处理类

function loadEmp(){$.ajax({url:"/emp/list",type:"get",dataType:"json",//服务器响应成功success:function(data){console.log(data)var str="";for(var i=0;i<data.length;i++){str+="<tr>"str+="<td>"+data[i].empId+"</td>"str+="<td>"+data[i].empName+"</td>"str+="<td>"+data[i].empJob+"</td>"str+="<td>"+data[i].empSalary+"</td>"str+="<td>"+data[i].dept.deptName+"</td>"str+="<td><a οnclick='deleteEmp("+data[i].empId+")'>删除</a><a οnclick='/views/update.jsp'>修改</a></td>"str+="</tr>"
​}document.getElementById("empBody").innerHTML=str;},//服务器响应故障error: function (data){console.log(data);}})}

文件上传

原理

完成文件上传--本地服务器保存

引入文件上传的依赖jar

    <!--文件上传依赖--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.5</version></dependency>

配置文件上传解析器

 <!--文件上传解析器--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!--最大上传的大小。单位byte字节。5M=5*1024*1024--><property name="maxUploadSize" value="5242880"/><!--设置文件上传的编码--><property name="defaultEncoding" value="utf-8"/></bean>

编写文件上传的页面

   <%--文件上传的表单提交方式必须为post.而且需要设置表单提交的编码格式。enctype="multipart/form-data" 该类型表示既能上传文本又能上传文件。--%><form action="/upload" method="post" enctype="multipart/form-data">选择文件:<input type="file" name="myfile"/><br>姓名:<input type="text" name="username"/><br><input type="submit"/></form>

编写上传的api接口

  @RequestMapping("/upload")public String upload(MultipartFile myfile, HttpServletRequest request) throws IOException {//1.获取保存文件的路径String realPath = request.getSession().getServletContext().getRealPath("/images");//2.根据上面的路径创建文件对象File file=new File(realPath);//3.判断该文件夹是否存在if(!file.exists()){file.mkdirs();}//4.获取上传文件的名称. 获取登录者ip+登录者id+登录者的时间戳String filename = UUID.randomUUID().toString().replace("-","")+myfile.getOriginalFilename();//5.把上传的文件保存到指定服务器下的路径。File target=new File(realPath+"/"+filename);myfile.transferTo(target);System.out.println("上传成功");return "main";}

完成文件上传--文件保存到文件服务器

如果把文件存在本地服务器,服务器与服务器之间无法共享文件。我们需要一个专门存放文件的服务器。

可以自己搭建文件服务器[FastDFS Hadoop] 或者租第三方阿里云。

相关文章:

springmvc的拦截器,全局异常处理和文件上传

拦截器: 拦截不符合规则的&#xff0c;放行符合规则的。 等价于过滤器。 拦截器只拦截controller层API接口。 如何定义拦截器。 定义一个类并实现拦截器接口 public class MyInterceptor implements HandlerInterceptor {public boolean preHandle(HttpServletRequest reque…...

【coredump】笔记

coredump 是什么&#xff1f;最标准的解释是什么&#xff1f; Core dump&#xff08;也称为 core 文件或 core dump 文件&#xff09;是计算机程序在运行时崩溃时生成的文件&#xff0c;它捕获了程序在崩溃时的内存状态。这些文件通常用于调试目的&#xff0c;以帮助开发人员分…...

【Linux】磁盘空间莫名消失,找不到具体原因的思路

磁盘空间莫名消失&#xff0c;找不到具体原因的思路 先说下常见的几种原因&#xff1a; 1、删除的文件未释放空间 2、日志或过期文件未及时清理 3、inode导致 4、隐藏文件夹或者目录 6、磁盘碎片 最后一种单独介绍。 环境&#xff1a;情况是根分区&#xff08;/&#xf…...

智能体实战(需求分析助手)一、需求概述及迭代规划

需求分析助手开发迭代规划 功能概述 需求分析助手是一款基于大模型的智能系统,旨在帮助用户高效完成需求获取、需求分析、需求文档编写及需求验证的全流程工作。通过对用户输入的智能处理和分析,需求分析助手能够简化需求管理流程,并根据不同业务场景提供定制化支持。 核心…...

idea | maven项目标红解决方案 | 强制刷新所有依赖

场景&#xff1a;父pom多模块&#xff0c;新增时&#xff0c;依赖正常&#xff0c;但是application.yml看起来没被springboot识别&#xff0c;试过rebuild、重开idea清除缓存&#xff0c;重新maven面板reload all maven projects, 试过pom文件的依赖先移除再重新粘贴导入进来&a…...

*【每日一题 基础题】 [蓝桥杯 2023 省 B] 飞机降落

题目描述 N 架飞机准备降落到某个只有一条跑道的机场。其中第 i 架飞机在 Ti 时刻到达机场上空&#xff0c;到达时它的剩余油料还可以继续盘旋 Di 个单位时间&#xff0c;即它最早可以于 Ti 时刻开始降落&#xff0c;最晚可以于 Ti Di 时刻开始降落。降落过程需要 Li个单位时间…...

在Windows本地用网页查看编辑服务器上的 jupyter notebook

​ Motivation: jupyter notebook 可以存中间变量&#xff0c;方便我调整代码&#xff0c;但是怎么用服务器的GPU并在网页上查看编辑呢&#xff1f; 参考 https://zhuanlan.zhihu.com/p/440080687 服务端(Ubuntu)&#xff1a; 激活环境 source activate my_env安装notebook …...

OpenCV圆形标定板检测算法findGrid原理详解

OpenCV的findGrid函数检测圆形标定板的流程如下: class CirclesGridClusterFinder {CirclesGridClusterFinder(const CirclesGridClusterFinder&); public:CirclesGridClusterFinder...

自动图像标注可体验

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…...

武汉市电子信息与通信工程职称公示了

2024年武汉市电子信息与通信工程专业职称公示了&#xff0c;本次公示通过人员有109人。 基本这已经是今年武汉市工程相关职称最后公示了&#xff0c;等待出证即可。 为什么有人好奇&#xff0c;一样的资料&#xff0c;都是业绩、论文等&#xff0c;有的人可以过&#xff0c;有的…...

Ansible基本用法

Ansible 1 Ansible概念 Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;Pubbet和Saltstack能实现的功能&#xff0c;Ansible基本上都可以实现。 Ansible能批量配置、部署、管理…...

MFC 应用程序语言切换

在开发多语言支持的 MFC 应用程序时&#xff0c;如何实现动态语言切换是一个常见的问题。在本文中&#xff0c;我们将介绍两种实现语言切换的方式&#xff0c;并讨论其优缺点。同时&#xff0c;我们还会介绍如何通过保存配置文件来记住用户的语言选择&#xff0c;以及如何在程序…...

Swift 的动态性

Swift 的动态性指的是 Swift 编程语言支持运行时操作的一些特性&#xff0c;使得代码的行为能够在运行时作出一定的调整或决策。这些特性通常可以让程序在运行时动态地添加、删除或修改对象的属性、方法等&#xff0c;而不是在编译时完全确定。 Swift 的动态性主要体现在以下几…...

用.Net Core框架创建一个Web API接口服务器

我们选择一个Web Api类型的项目创建一个解决方案为解决方案取一个名称我们这里选择的是。Net 8.0框架 注意&#xff0c;需要勾选的项。 我们找到appsetting.json配置文件 appsettings.json配置文件内容如下 {"Logging": {"LogLevel": {"Default&quo…...

lua dofile 传参数

cat 1.lua arg[1] 111 arg[2] 222 dofile(./2.lua) cat 2.lua print("First argument is: " .. arg[1]) print("Second argument is: " .. arg[2]) 执行 lua 1.lua&#xff0c;结果为&#xff1a; First argument is: 111 Second argument is: 222 l…...

HTML 有效 DOCTYPES

HTML 有效 DOCTYPES 介绍 HTML文档类型定义&#xff08;DOCTYPE&#xff09;是HTML文档中的一个声明&#xff0c;它告诉浏览器该文档使用的HTML版本。这有助于浏览器正确地解析和渲染页面。本文将探讨各种有效的HTML DOCTYPE声明&#xff0c;并解释它们的作用。 HTML5 DOCTY…...

岁末回望,追梦远方

又到了岁末年初&#xff0c;按惯例&#xff0c;风云我都会写一篇长长的感悟&#xff0c;给自己辞旧的总结复盘&#xff0c;迎新的追梦定调&#xff0c;今年赋诗一首&#xff0c;畅想一下诗和远方&#xff0c;简洁而又虚无&#xff0c;缥缈中坚定初心。 岁末回首步履深&#xf…...

通过阿里云 Milvus 和 LangChain 快速构建 LLM 问答系统

背景介绍 阿里云向量检索 Milvus 版是一款云上全托管服务&#xff0c;确保了与开源Milvus的100%兼容性&#xff0c;并支持无缝迁移。在开源版本的基础上增强了可扩展性&#xff0c;能提供大规模 AI 向量数据的相似性检索服务。相比于自建&#xff0c;目前阿里云Milvus具备易用…...

语音识别失败 chrome下获取浏览器录音功能,因为安全性问题,需要在localhost或127.0.0.1或https下才能获取权限

环境&#xff1a; Win10专业版 谷歌浏览器 版本 131.0.6778.140&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09; 问题描述&#xff1a; 局域网web语音识别出现识别失败 chrome控制台出现下获取浏览器录音功能&#xff0c;因为安全性问题&#xff0c;需要在…...

全域数据集成平台ETL

全域数据集成平台ETL Restcloud 工作原理 RestCloud数据集成平台采用SpringCloud微服务架构技术开发&#xff0c;底层基于纯Java语言采用前后端分离架构&#xff0c;前端采用React技术进行开发。 RestCloud数据集成平台是基于数据流工作流引擎的架构进行研发的&#xff0c;底…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...