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…...
OpenClaw内存优化:Qwen2.5-VL-7B在4GB显卡上的运行秘诀
OpenClaw内存优化:Qwen2.5-VL-7B在4GB显卡上的运行秘诀 1. 当多模态大模型遇上小显存显卡 上周三凌晨2点,我的MacBook Pro风扇突然狂转——屏幕上是OpenClaw控制台不断弹出的显存不足警告。当时我正在尝试用Qwen2.5-VL-7B处理一批产品截图,…...
AlienFX Tools终极控制方案:彻底释放Alienware设备潜力的完整攻略
AlienFX Tools终极控制方案:彻底释放Alienware设备潜力的完整攻略 【免费下载链接】alienfx-tools Alienware systems lights, fans, and power control tools and apps 项目地址: https://gitcode.com/gh_mirrors/al/alienfx-tools 如果你对Alienware官方臃…...
从YOLOv8到SpikeYOLO:在边缘设备上部署脉冲神经网络目标检测的完整实践指南
从YOLOv8到SpikeYOLO:边缘设备超低功耗目标检测实战手册 在无人机巡检、智能安防摄像头和可穿戴设备等边缘计算场景中,持续运行的目标检测系统常受限于电池容量与散热条件。传统卷积神经网络(CNN)如YOLOv8虽能实现实时检测&#x…...
python pyinstaller
# 关于 PyInstaller,一位 Python 老手的随想 最近在整理一些旧项目,又用到了 PyInstaller 这个工具。说起来,它算是 Python 开发中一个既熟悉又容易被忽视的存在。很多开发者第一次接触它,往往是为了把写好的脚本发给不会装 Pytho…...
Amadeus的知识库 | 告别碎片化集成:深度解析 AI 时代的“USB 协议” —— MCP
一、引文在 LLM(大语言模型)飞速发展的今天,我们正从“对话框 AI”转向“智能体(Agent)”。然而,开发者在集成 AI 时一直面临一个巨大的痛点:数据孤岛。为了解决这个问题,Anthropic …...
4步打造专属《无人深空》体验:NomNom存档编辑器全功能指南
4步打造专属《无人深空》体验:NomNom存档编辑器全功能指南 【免费下载链接】NomNom NomNom is the most complete savegame editor for NMS but also shows additional information around the data youre about to change. You can also easily look up each item …...
Agent 中的记忆系统:短期记忆、长期知识库与情境缓存最佳实践
Agent 中的记忆系统:短期记忆、长期知识库与情境缓存最佳实践 摘要/引言 开门见山:当我们说AI Agent要“有记忆”时,我们在说什么? 你有没有过这样的经历:和OpenAI的ChatGPT连续聊了20轮Python爬虫优化,…...
计算机毕业设计:Python城市交通出行模式挖掘系统 Django框架 可视化 数据分析 PyEcharts 交通 深度学习(建议收藏)✅
博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ > 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与…...
ThinkPHP3.x核心特性全解析
好的,我们来梳理一下 ThinkPHP 3.x 版本的主要特性:MVC 架构支持:严格遵循模型(Model)-视图(View)-控制器(Controller)的设计模式。清晰分离业务逻辑、数据操作和页面展示,便于协作开发和维护。路由支持:支持多种 URL …...
植物大战僵尸革新辅助工具:PVZ Toolkit全方位功能解析与使用指南
植物大战僵尸革新辅助工具:PVZ Toolkit全方位功能解析与使用指南 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 植物大战僵尸作为经典塔防游戏,多年来一直拥有庞大的玩家群…...



