4.SpringWeb

news2024/10/1 5:27:57

一、创建项目

LomBok:辅助开发工具,减少代码编写

Spring Web:带上Spring MVC,可以做Web开发了

Thymleaf: Web开发末班引擎(不常用)

创建好,如下:

static/ 放置静态资源的根目录

templates/ 放置模板文件的根目录

二、资源配置

1、静态资源:全部放在src/main/resuorces/static/ 目录下即可

2、动态资源:

  1. 必须是被Spring管理的Bean对象&&要求必须使用@Controller修饰
  1. SpringMVC会去判断,只处理@Controller修饰的Bean对象
  1. 和Servlet不同,动态资源不是以一个个类作为基本单位。

而是以@Controller修饰的bean下的一个个方法作为基本单位。

换言之,一个类可以提供多个动态资源

  1. 方法通过@RequestMapping(url)来明确是动态资源+绑定资源路径

如图,提供了两个动态资源路径:

  1. 资源路径: /hello

支持的HTTP方法是:GET、POST等

  1. 资源路径: /world

支持的HTTP方法是:GET、POST等

三、必须掌握的

  1. 如何利用配置文件做最常见的修改: server.port=8080

  1. 静态资源所在根目录 src/main/resources/static [实际上就是配置中的默认的值,可以利用配置文件修改]

  1. 动态资源: M-V

(1)@Controller + @RequestMapping

(2)Model + src/main/resources/templates 前提(勾选了thymeleaf模板)


根据请求+ @RequestMapping可以确定本次请求是 DemoController#hello(Model)

内部的逻辑处理,此时是适配器:

此时真正执行我们的方法,然后返回一个ModelAndView


四、Spring Web

  1. 连接的功能:

将用户(浏览器)和Java程序连接起来,也就是访问一个地址能够调用我们的Spring程序。

那么如何关联动态资源,总的来说:通过

  1. @Contorller注解修饰类

把类注册成Spring bean ;

表示该bean用于控制器。

  1. @RequestMapping注解修饰方法,给出方法表示的资源的路径

控制台测试:出现了405状态,说明支支持get,不支持send

特殊之处:

可以通过@RequestMapping(method= .... )或者 @GetMapping / @PostMapping来限制动态资源支持的HTTP方法;

可以通过 @RequestMapping修饰类,给该类下的所有资源添加统一的URL前缀(prefix)

2.获取参数的功能

用户访问的时候,会带一些参数,在程序中要想办法获取到参数。

3.输出数据的功能:

执行了业务逻辑之后,要把程序执行的结果返回给用户。

4.方法的签名到底是什么样?

  1. 形参类型有哪些? https://docs.spring.io/spring-framework/docs/current/reference/html#mvc-ann-arguments

  1. 返回值类型有哪些?

只要是文档上的作为形参,Spring都可以正确的调用

mappedHandleer 指明了哪个方法要被执行。

HandleerAdapter(句柄 适配器) 根据方法签名中的形参,可以适配创建实参对象,利用反射去调用正确的方法。

5.方法签名中,最常用的几种模式

  1. 传统Servlet模式

  1. 使用ResponseBody注解

  1. 前后端分离,直接返回JSON

  1. @RequestPara注解,当变量名就是参数名时,可以省略

请求参数可以直接指定Int类型,Spring会帮我们转换

请求参数如果比较多,可以用一个对象进行接收(dog)


五、User登陆/注册/用户列表JSON的例子演示

1.SpringMVC(SpringWeb)的基本流程

  1. 从Servlet的流程,走到了Spring的DispatchServletdoDispatch的方法中

  1. 根据请求中的各种信息(方法、URL),在已注册的所有bean对象中(这些对象被@Controller修饰),查找对应的方法进行请求处理(依赖@RequestMapping注解)

  1. 根据方法中的不同请求参数类型以及返回值类型,生成调用的方法的参数(实参)信息

HandllerAdapter中完成

  1. 调用handle.invoke(...)得到ModelAndView对象

  1. 根据对应的解析引擎(视图引擎),得到view对象

  1. 渲染并生成Response对象

  1. 走Servlet流程发送响应对象

2.如何进行动态资源绑定

@Controller

@RequestMapping、@GetMapping、@PostMapping

3.参数的形式

  1. void (HttpServletRequest request,HttpServletResponse resp) 完全按照Servlet的模式处理即可

  1. @ResponseBody

String(@RequestParam(....) String paramName) 直接处理

其中,@RequestParam可以省略 修饰形参,表示形参的值来自请求参数

可以不写String

可以直接包装成对象

  1. @ResponseBody 用来修饰方法表示返回值会被完整的当成响应体

XXXObject(...) 返回JSON串

4.....(HttpSession session)

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

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

相关文章

新来的23岁软件测试员上来秀了波操作,把几个老员工看傻了

春招了,公司来了个小伙子,一看简历,嘿?22岁,这不刚毕业的小毛孩子嘛,结果没想到人家上来就把现有项目的性能优化了一遍,给公司节省了一半的成本,这种“王炸”打法,直接给…

152、【动态规划】leetcode ——416. 分割等和子集:滚动数组+二维数组(C++版本)

题目描述 原题链接:416. 分割等和子集 解题思路 题目要求是划分出两个相等的集合,那么这两个相等的集合相加,一定等于偶数并且为总集合的二分之一,若总集合求和后不为偶数,则一定不可以划分,直接返回fals…

黄绮珊“绮望三十”巡回演唱会3月4日广州中山纪念堂暖春开唱!

•中年成名 四十余载静待盛放歌手黄绮珊,1991年正式进入歌坛,至今已满三十周年。黄绮珊前半生的歌手之路好像并不是那么顺畅。虽然一直有着华语乐坛的顶尖歌唱实力,但在45岁之前,黄绮珊一直处于“歌红人不红”的状态。不少人听过黄…

GPU服务器安装显卡驱动、CUDA和cuDNN

GPU服务器安装cuda和cudnn1. 服务器驱动安装2. cuda安装3. cudNN安装4. 安装docker环境5. 安装nvidia-docker25.1 ubuntu系统安装5.2 centos系统安装6. 测试docker容调用GPU服务1. 服务器驱动安装 显卡驱动下载地址https://www.nvidia.cn/Download/index.aspx?langcn显卡驱动…

Zabbix 构建监控告警平台(三)

Zabbix User parametersZabbix Trigger1.Zabbix User parameters 1.1即自定义KEY 注意:mysql安装在被监测主机 [rootlocalhost ~]# yum -y install mariadb-server mariadb [rootlocalhost ~]# systemctl start mariadb [rootlocalhost ~]# mysqladmin -uroot statu…

[electron] 一 vue3.2+vite+electron 项目集成

一 开发环境系统:windows开发工具: git , vscode,termial环境依赖: node, npm 二 步骤2.1 通过vite 创建vue项目通过 终端执行命令,选择 模板 vuenpm init vite cd 项目目录 npm install npm run dev2.2 集成 electro…

T06 成绩排序

查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理。 示例: jack 70 peter 96 Tom 70 smith 67 从高到低 成…

LC-70-爬楼梯

原题链接:爬楼梯 个人解法 思路: 动态规划 状态表示:f[i]表示走到第n阶台阶有几种方法 状态转移:f[i] f[i -1] f[i - 2] 这实际上就是斐波那契数列,通过转移可以看到,我们只用了三个变量,故…

Java、JSP职工人事管理系统设计与实现

技术:Java、JSP等摘要:现在随着我们这个社会的计算机技术的快速发展,计算机在企业管理中得到普遍的应用,现在我们利用计算机在实现企业职工的管理越来越重要。当今社会是快速发展的信息社会,自动化信息的作用也变得越来…

Python 之 NumPy 简介和创建数组

文章目录一、NumPy 简介1. 为什么要使用 NumPy2. NumPy 数据类型3. NumPy 数组属性4. NumPy 的 ndarray 对象二、numpy.array() 创建数组1. 基础理论2. 基础操作演示3. numpy.array() 参数详解三、numpy.arange() 生成区间数组四、numpy.linspace() 创建等差数列五、numpy.logs…

第四章 Opencv图像色彩空间与通道

文章目录1.色彩空间1-1.RGB/BGR色彩空间1-2.GRAY色彩空间1-3.HSV色彩空间2.通道2-1.拆分通道:split()方法1.拆BGR色彩空间图像的通道2.拆HSV色彩空间图像的通道2-2.合并通道:merge()方法1.B、G、R 通道的合并2.H、S、V 通道的合并3.B、G、R、A 通道的合并…

M100嵌入式自动吞吐式读写器|电动读卡机如何通过C#程序读取社保卡号

M100嵌入式自动吞吐式读写器|电动读卡机是一款双保护门功能读卡器,第一层防尘防异物机械门,第二层电动门。 M100嵌入式自动吞吐式读写器|电动读卡机采用耐高温、耐磨擦、高强度、抗老化的复合型塑胶为主体,在走卡通道两侧镶有不锈钢金属&…

YUV数据和格式

一、YUV简介 1.YUV说明 YUV是一种颜色编码方法&#xff0c; 与RGB&#xff08;红 - 绿 - 蓝&#xff09;不同。 <1>Y表示亮度分量&#xff0c;也叫灰阶值&#xff1a;如果只显示Y&#xff0c;图片会是一张黑白照 <2>U&#xff08;Cb&#xff09;表示色度分量&…

2022年12月电子学会Python等级考试试卷(三级)答案解析

目录 一、单选题(共25题&#xff0c;共50分) 二、判断题(共10题&#xff0c;共20分) 三、编程题(共3题&#xff0c;共30分) 青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;三级&#xff09; 一、单选题(共25题&#xff0c;共50分) 1. 列表L1中全是…

你知道ChatGPT能搞钱吗?哎呦喂,不知道,那没意思

这段时间&#xff0c;热度zui大的是什么&#xff1f;答案是—— &#x1f389;&#x1f389;ChatGPT&#x1f389;&#x1f389;。去年11月底上线&#xff0c;当时仅在AI和科技圈内小火了一把&#xff0c;没想到在今年春节后&#xff0c;火爆出圈。 ChatGPT的爆火&#xff0c;对…

微信小程序nodej‘s+vue警局便民服务管理系统

本文首先介绍了设计的背景与研究目的,其次介绍系统相关技术,重点叙述了系统功能分析以及详细设计,最后总结了系统的开发心得在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括“最多跑一次”微信小程序的网络应用,在外国小程序的使用已经是很普遍的方…

java多线程开发

1.并发和并行 并发&#xff1a;同一时间段内多个任务同时进行。 并行&#xff1a;同一时间点多个任务同时进行。 2.进程线程 进程&#xff08;Process&#xff09;&#xff1a;进程是程序的一次动态执行过程&#xff0c;它经历了从代码加载、执行、到执行完毕的一个完整过程…

当资深程序员深夜去“打劫”会发生什么?——打家劫舍详解

文章目录一、前言二、概述三、打家劫舍第一晚四、打家劫舍第二晚五、打家劫舍第三晚......一、前言 大家好久不见&#xff0c;正如标题所示&#xff0c;今天我不打算聊一些枯燥的算法理论&#xff0c;我们来聊一聊程序员有多厉害&#xff01; 注意&#xff01;&#xff01;&am…

JDBC(新版)

文章目录JDBC概念优势总结JDBC核心api和使用路线涉及具体核心类和接口DriverManagerConnectionstatement、preparedstatement、callablestatementResult核心API使用步骤总结基于statement演示查询基于statement方式问题基于preparedstatement的优化基于preparedstatement的curd…

浅谈动态代理

什么是动态代理&#xff1f;以下为个人理解:动态代理就是在程序运行的期间&#xff0c;动态地针对对象的方法进行增强操作。并且这个动作的执行者已经不是"this"对象了&#xff0c;而是我们创建的代理对象&#xff0c;这个代理对象就是类似中间人的角色&#xff0c;帮…