springMVC -- 学习笔记
- 前言
- 简介
- 演示 ⇒ (最简单的原理,开发并不这样,理解一下就好)
- 演示 ⇒ 接近真实注解开发(好好理解一下)
- 重要的源码献上
- Controller 讲解
- RequestMapper ⇒ 没啥记的,第一个案例看看就行了
- RestFul 风格 ⇒ 简洁、有层次
- 演示
- 讲解
- 重定向和转发 ⇒ 一般都用return,不是很建议用这两个方法。
- 写项目遇到的问题(return返回的都是路径,但是重定向路径呢?怎么写)
- 回显除了 model ,还有 modelMap
- 过滤器 Filter 、Filter乱码 web.xml 过滤器
- 过滤器
- Json 和 Jackson
- @ResponseBody注解 (方法)/ @RestController(类)
- fastjson ⇒ 用于 java 和 json 进行转换 ⇒ 目前知道有这个功能,以后不会可以百度一下
- 报错细微问题讲解(有个报错,很重要,要小心)
- Ajax
- Ajax的优点
- 使用 ajax
- 写ajax时的问题
- 拦截器
- User 和 Password 登录案例
- 插一嘴,session节点注销,要记得哦。
- 文件上传下载(需要的时候,去复制粘贴哦)
前言
ssm: mybatis + Spring +SpringMVC ⇒ MVC 三层架构
模型(Dao、Service)、视图(Jsp)、控制器(Servlet)⇒ 转发或重定向
简介

演示 ⇒ (最简单的原理,开发并不这样,理解一下就好)



演示 ⇒ 接近真实注解开发(好好理解一下)



重要的源码献上
web.xml:
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>
springmvc-servlet.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.2.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"><!-- IOC注解支持 --><context:component-scan base-package="controller" /><!-- 静态资源解析--><mvc:default-servlet-handler /><!-- MVC注解支持 --><mvc:annotation-driven /><!-- 配置内部视图解析器 --><!-- 视图路径:/WEB-INF/jsp/*.jsp --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean><!-- 静态资源解析 --><mvc:resources location="/static/" mapping="/static/**" /><!-- 全局异常处理 --><beanclass="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"><property name="exceptionMappings"><props><prop key="java.lang.RuntimeException">error</prop></props></property></bean>
</beans>
Controller 讲解
| 曾经的@兄弟 | 组件 |
|---|---|
| @Component | 组件 |
| @Service | service |
| @Controller | controller |
| @Repository | dao |
RequestMapper ⇒ 没啥记的,第一个案例看看就行了
RestFul 风格 ⇒ 简洁、有层次
演示

讲解

我们可以把利用这种方式,吧变量 绑定 在 url 地址栏中。

如上图,我们可以看到,目前有两种方法来限定提交的方式,但是尽量用 下面这种 哦 ~ ~。毕竟方便、快捷、准确率高嘛,而且还挺安全 ~ ~。

重定向和转发 ⇒ 一般都用return,不是很建议用这两个方法。
resp.sendRedirect("xx.jsp")
.
req.getRequestDispatcher("\xx.jsp").forword(req,resp);
.
public String test ( @RequestParam ( "userName" String name ) ) { xxx }
获取前端 的 参数:

写项目遇到的问题(return返回的都是路径,但是重定向路径呢?怎么写)
一般来说,return 返回的都是jsp页面,重定向可以使用以下方式去找路径
return"redirect:/get";

回显除了 model ,还有 modelMap
过滤器 Filter 、Filter乱码 web.xml 过滤器


过滤器
<filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern></filter-mapping>
Json 和 Jackson
是一种轻量级的数据交换格式,目前使用的特别特别特别广泛!
示例:'{"name":"xxx","age":15}'
@ResponseBody注解 (方法)/ @RestController(类)
会返回字符串,而不会走视图解析器,会直接return字符串。
fastjson ⇒ 用于 java 和 json 进行转换 ⇒ 目前知道有这个功能,以后不会可以百度一下
① 导包 ⇒ maven 中找
②使用。例如: xxx.json ,xxx.toJsonString()
示例:


报错细微问题讲解(有个报错,很重要,要小心)
我在导入 这个包的时候,添加了以上的解决乱码统一代码 的时候,有以下报错,我一直在排错。但是还是一直不能解决问题。
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.49</version></dependency>

==============================================

后来发现有一个大神说,少了一个jar包,我 附到下面了。添加之后则解决。
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.16.1</version></dependency>
来自一个小白得到结论:排错一定很重要,要看完所有的报错信息,找一个最重要的查找,而不是一直去查找最后一个报错,这样效率真的很低很低
Ajax
我们为什么要学习 ajax ?
笨的,我们从后端 传递过来的 json 数据,肯定需要接收呀
Ajax的优点
Ajax最大的优点就是,发送请求的时候不会影响用户的操作,相当于两条平行线一样,“你忙你的,我忙我的”,不需要去等待页面的跳转而浪费时间
使用 ajax
①先下载 JQuery 包
官网拿走: https://jquery.com/download/
②导包
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
或者引入js文件
<script src="xxx.js"></script>
③使用
示例代码呈上,如下
$.ajax({url: "/api/getUserInfo",type: "GET",data: { userId: 123 },dataType: "json",success: function(result) {console.log(result);},error: function(xhr, status, error) {console.log(error);}
});
写ajax时的问题
在写ajax的时候,我遇到了一个问题

我在想未什么得不到 返回的 json 中的 name属性值呢?
在查找了半天答案知道自己错了,并且错的很离谱

拦截器
自带 资源过滤 ,只会拦截 controller 里面的请求,而不会拦截 jsp/html/css等资源。减少了资源损耗。


User 和 Password 登录案例

解释一下: contains ⇒ 包含 (英汉互译)


插一嘴,session节点注销,要记得哦。

文件上传下载(需要的时候,去复制粘贴哦)
第一步:导包
第二步:写页面
第三部:配置
<!-- 处理文件上传与下载--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 必须和用户JSP 的pageEncoding属性一致,以便正确解析表单的内容 --><property name="defaultEncoding" value="UTF-8"></property><!-- 文件最大大小(字节) 1024*1024*50=50M--><property name="maxUploadSize" value="52428800"></property><!--resolveLazily属性启用是为了推迟文件解析,以便捕获文件大小异常--><property name="resolveLazily" value="true"/></bean>
jsp页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>图片上传</title>
</head>
<body>
<form action="${pageContext.request.contextPath }/clazz/upload" method="post" enctype="multipart/form-data"><label>班级编号:</label><input type="text" name="cid" readonly="readonly" value="${param.cid}"/><br/><label>班级图片:</label><input type="file" name="xxx"/><br/><input type="submit" value="上传图片"/>
</form>
</body>
</html>
文件上传
1 // 文件上传2 // @RequestMapping(value = "/upload", method = RequestMethod.POST) 等价于 @PostMapping()3 @PostMapping(value = "upload")4 @ResponseBody5 public String fileUpload(MultipartFile[] uploadFile) {6 for (MultipartFile file : uploadFile) {7 //获取原始文件名8 String originalFilename = file.getOriginalFilename();9
10
11 try {
12 // 生成UUID
13 // 修正文件名出现乱码 防止文件名重复造成覆盖
14 originalFilename = new String(originalFilename.getBytes("ISO-8859-1"), "UTF-8");
15 } catch (UnsupportedEncodingException e) {
16 throw new RuntimeException(e);
17 }
18 System.out.println("文件名:" + originalFilename);
19 // UUID随机
20 String newFile = UUID.randomUUID().toString() + "_" + originalFilename;
21
22 // 指定文件上传路径
23 // Windows版--方式
24 String serverWin = "E:\\Chrom\\Download\\pictures\\";
25
26 // Linux版--方式
27 // String serverLinux = "/home";
28
29 File fileWin = new File(serverWin);
30 // 文件夹是否存在
31 if (!fileWin.exists()) {
32 fileWin.mkdir();
33 }
34 try {
35 // 文件与文件夹
36 file.transferTo(new File(serverWin + newFile));
37 } catch (IOException e) {
38 throw new RuntimeException(e);
39 }
40 }
41 return "success";
42 }

文件下载
// 文件下载@GetMapping(value = "download")public ResponseEntity<byte[]> download(HttpServletRequest httpServletRequest, String filename) {// 指定文件下载目录// 文件在服务器的目录String fileDownloadWin = "E:\\Chrom\\Download\\pictures\\";// 指定文件下载名称File file = new File(fileDownloadWin + File.separator + filename);HttpHeaders httpHeaders = new HttpHeaders();filename = getFilename(httpServletRequest, filename);httpHeaders.setContentDispositionFormData("attachment", filename);httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);try {return new ResponseEntity<>(FileUtils.readFileToByteArray(file), httpHeaders, HttpStatus.OK);} catch (IOException e) {throw new RuntimeException(e);}}

相关文章:
springMVC -- 学习笔记
前言简介演示 ⇒ (最简单的原理,开发并不这样,理解一下就好)演示 ⇒ 接近真实注解开发(好好理解一下)重要的源码献上 Controller 讲解RequestMapper ⇒ 没啥记的,第一个案例看看就行了RestFul 风…...
修复本地终端(windows)连接服务器使用zsh出现乱跳的问题
目前市面上还没有发现解决方案,记录一下! 1.起因: 在服务器配置了zsh后,用本地的windows去连接的时候,终端内容会出现乱跳,比如输入了一个“l”,后面出现多个“lll”,如下: ⚡ roo…...
【扒代码】regression_head.py
import torch from torch import nnclass UpsamplingLayer(nn.Module):# 初始化 UpsamplingLayer 类def __init__(self, in_channels, out_channels, leakyTrue):super(UpsamplingLayer, self).__init__() # 调用基类的初始化方法# 初始化一个序列模型,包含卷积层、…...
vue2 使用axios 请求后台返回文件流导出为excel
目录 步骤 1: 安装 Axios 步骤 2: 创建 Axios 实例 步骤 3: 发起请求并处理文件流 说明 步骤 1: 安装 Axios 首先,确保项目中已经安装了 Axios。如果没有,可以通过以下命令进行安装: npm install axios 步骤 2: 创建 Axios 实例 为了更…...
MATLAB数据可视化:在地图上画京沪线的城市连线
matlab自带的geoplot(lat,lon) 可以在地理坐标中绘制线条。使用 lat和lon分别指定以度为单位的经度和纬度坐标。 绘制京沪线所经城市线条: citys [116.350009,39.853928; 116.683546,39.538304; 117.201509,39.085318; 116.838715,38.304676;...116.359244,37.436…...
【AI】CV基础1
定期更新,建议关注更新收藏。 本站友情链接: OCR篇1 可变形卷积Deformable Conv opencv-python形态学操作合集 目录 仿射变换图像二阶导数本质探讨PIL通道、模式、尺寸、坐标系统、调色板、信息滤波器实现图像格式转换 OpenCV轮廓提取 仿射变换 仿射变换…...
数据结构《栈》
数据结构《栈》 1、栈的概念及结构2、栈的实现3、练习: 1、栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO&…...
说一说mysql的having?和where有什么区别?
在 MySQL 中,HAVING 子句和 WHERE 子句都是用于过滤查询结果的,但它们之间有一些重要的区别。下面我将详细介绍这两个子句的区别以及它们的使用场景。 1. HAVING 子句 作用: HAVING 子句用于过滤聚合后的结果集。它通常与 GROUP BY 子句一起使用&#x…...
LeetCode45. 跳跃游戏 II
题目链接: 45. 跳跃游戏 II - 力扣(LeetCode) 思路分析:这属于上一题的变种,思路有所不同,要用到贪心的思想。从第一步开始,在可以跳跃的范围内,选择能够到达最远位置的点将其作为…...
算法打卡 Day19(二叉树)-平衡二叉树 + 二叉树的所有路径 + 左叶子之和 + 完全二叉树的节点个数
Leetcode 101-平衡二叉树 文章目录 Leetcode 101-平衡二叉树题目描述解题思路 Leetcode 257-二叉树的所有路径题目描述解题思路 Leetcode 404-左叶子之和题目描述解题思路 Leetcode 222-完全二叉树的节点个数题目描述解题思路 题目描述 https://leetcode.cn/problems/balanced…...
国际以太网专线 (IEPL)/国际专线(IPLC)-全球覆盖,无界沟通
中国联通国际公司产品:国际以太网专线 (IEPL)/国际专线(IPLC)—— 跨境数据传输的坚实桥梁 在全球化日益加深的今天,跨境、跨地域的数据传输需求激增,企业对数据传输的速度、安全性和稳定性提出了前所未有的高要求。中…...
信息安全管理知识体系攻略(至简)
信息安全管理知识体系主要包括信息安全管理体系、信息安全策略、信息安全系统、信息安全技术体系等。 一、信息安全管理 1、信息安全管理体系(ISMS)。ISO27001是国际标准化组织(ISO)和国际电工委员会(ICE)…...
HCIE学习笔记:IPV6 地址、ICMP V6、NDP 、DAD (更新补充中)
系列文章目录 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、IPV4、IPv6包头对比1. IPV4包头2.IPv6包头3.IPV6扩展包头 二、IPV6基础知识地址结构、地址分类三、ICMPV4、ICMPV61、 lnternet控…...
人工智能】Transformers之Pipeline(九):物体检测(object-detection)
目录 一、引言 二、物体检测(object-detection) 2.1 概述 2.2 技术原理 2.3 应用场景 2.4 pipeline参数 2.4.1 pipeline对象实例化参数 2.4.2 pipeline对象使用参数 2.4 pipeline实战 2.5 模型排名 三、总结 一、引言 pipel…...
[SWPUCTF 2021 新生赛]easy_md5
分析代码:1.包含flag2.php 2.GET传name,POST传password $name ! $password && md5($name) md5($password) 属于MD5绕过中的php 弱类型绕过 解题方法: 方法一 import requests# 网站的URL url "http://node7.anna.nssctf.cn:28026&q…...
Redis面试题大全
文章目录 Redis有哪几种基本类型Redis为什么快?为什么Redis6.0后改用多线程?什么是热key吗?热key问题怎么解决?什么是热Key?解决热Key问题的方法 什么是缓存击穿、缓存穿透、缓存雪崩?缓存击穿缓存穿透缓存雪崩 Redis…...
【langchain学习】BM25Retriever和FaissRetriever组合 实现EnsembleRetriever混合检索器的实践
展示如何使用 LangChain 的 EnsembleRetriever 组合 BM25 和 FAISS 两种检索方法,从而在检索过程中结合关键词匹配和语义相似性搜索的优势。通过这种组合,我们能够在查询时获得更全面的结果。 1. 导入必要的库和模块 首先,我们需要导入所需…...
【C语言】预处理详解(上)
文章目录 前言1. 预定义符号2. #define 定义常量3. #define定义宏4. 带有副作用的宏参数5. 宏替换的规则 前言 在讲解编译和链接的知识点中,我提到过翻译环境中主要由编译和链接两大部分所组成。 其中,编译又包括了预处理、编译和汇编。当时,…...
uni-app内置组件(基本内容,表单组件)()二
文章目录 一、 基础内容1.icon 图标2.text3.rich-text4.progress 二、表单组件1.button2.checkbox-group和checkbox3.editor 组件4.form5.input6.label7.picker8.picker-view 和 picker-view-column9.radio-group 和 radio10.slider11.switch12.textarea 一、 基础内容 1.icon…...
linux搭建redis超详细
1、下载redis包 链接: https://download.redis.io/releases/ 我以7.0.11为例 2、上传解压 mkdir /usr/local/redis tar -zxvf redis-7.0.11.tar.gz3、进入redis-7.0.11,依次执行 makemake install4、修改配置文件redis.conf vim redis.conf为了能够远程连接redis…...
别再被JJWT新版坑了!手把手教你从0.12.x降级到0.11.2解决parseClaimsJws报错
JJWT版本降级实战:从0.12.x回退0.11.2解决parseClaimsJws报错指南 最近在Spring Boot项目中整合JWT时,不少开发者反馈升级到JJWT 0.12.x后突然遭遇parseClaimsJws方法消失的编译错误。这个看似简单的API变动背后,其实是JJWT团队对安全架构的重…...
告别本地跑不动:用PyCharm+AutoDL SSH远程调试PAI0具身智能项目,模型视频一键生成
云端开发新范式:PyCharmAutoDL高效调试具身智能项目实战 最近在复现PAI0具身智能项目时,我发现了一个让本地低配笔记本也能流畅开发AI模型的绝佳组合——PyCharm专业版AutoDL云服务器。这种开发模式完美解决了本地算力不足的痛点,同时保留了I…...
017、任务运行时间统计与运行状态跟踪:你的系统真的在“干活”吗?
017、任务运行时间统计与运行状态跟踪:你的系统真的在“干活”吗? 去年调试一个电机控制项目,系统偶尔会丢脉冲。用逻辑分析仪抓信号,发现任务调度周期出现了几毫秒的抖动。老板问我:“到底是哪个任务偷了时间?”我愣了半天——FreeRTOS默认只告诉我任务在运行,可没告诉…...
AnalogTouch:面向车载系统的电阻屏触摸驱动库
1. AnalogTouch 库概述AnalogTouch 是面向 CARIAD 平台设计的模拟电阻式触摸屏(Resistive Touch Panel, RTP)驱动库,专为嵌入式车载显示系统优化。其核心目标并非通用触摸抽象层,而是深度适配 CARIAD 架构下 TFT/LCD 显示子系统的…...
Harness Engineering 的三个 Scaling 维度:统一框架下的技术架构深度解析
当我们谈论「Harness Engineering」时,究竟在讨论什么?这个看似简单的问题,却揭示了当前AI agent领域最核心的架构挑战。 术语混乱的根源:同一个词,三件完全不同的事 2026年第一季度,OpenAI、Cursor和Ant…...
从音频到全身动捕:手把手教你用AudCast和DITs生成带手势的AI视频(附开源项目分析)
从音频到全身动捕:手把手教你用AudCast和DITs生成带手势的AI视频(附开源项目分析) 在数字内容创作领域,AI视频生成技术正经历从静态图像到动态交互的跨越式发展。传统音频驱动视频方案往往局限于面部表情同步,而全身动…...
终极Nintendo Switch文件解析工具:NSTool完整使用指南
终极Nintendo Switch文件解析工具:NSTool完整使用指南 【免费下载链接】nstool General purpose read/extract tool for Nintendo Switch file formats. 项目地址: https://gitcode.com/gh_mirrors/ns/nstool Nintendo Switch Tool(简称NSTool&am…...
STM32H7 SPI4 FLASH HAL库配置优化实践
1. STM32H7 SPI4与FLASH通信基础 最近在做一个基于STM32H743IIT6的项目时,遇到了SPI4与FLASH通信的配置问题。SPI4工作在50MHz的高时钟频率下,调试过程中发现了一些有趣的细节。比如分频系数低于SPI_BAUDRATEPRESCALER_8时读取就会失败,而高于…...
颠覆式网盘直连提取革新:ctfileGet让高速下载成为现实
颠覆式网盘直连提取革新:ctfileGet让高速下载成为现实 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 副标题:突破下载限速困境,3步实现城通网盘直链高效提取 ctfil…...
《YOLOv11 实战:从入门到深度优化》002、环境搭建:从零配置YOLOv11开发与训练环境
002、环境搭建:从零配置YOLOv11开发与训练环境 昨天深夜调试一个边缘设备上的推理异常,问题最终定位到CUDA版本和torch不匹配——这种环境配置埋下的坑,往往比算法本身更难排查。今天咱们就老老实实把YOLOv11的环境从头搭一遍,这份…...



