Spring MVC

devtools/2024/9/25 3:53:36/

Spring MVC:以前在编写网页时,会将网页的编写分为三个部分,MVC其分别表示三个不同的部分模型(Mode),视图(View),控制器(Controller),来进行分布实现,同时展开。

现在,由于前端和后端的界线开始划清,工作中的分工开始明显,所以后端现在基本上只负责后端的处理,也就没有了View层了,现在View表示的是视图所需要的数据。

Spring MVC分为三大部分,建立连接,请求,响应。

1.建立连接

RequestMapping路由映射,可以通过url来进行连接的建立,并且其修饰方法,也修饰类。

访问地址:类的路径+方法路径

RequestMapping支持get和post

POSt(????)

传递请求数据

请求最关键的就是使用如何传递不同的参数,传递一个参数,多个参数,对象,数组/集合

1.传递单个参数

  @RequestMapping("/t3")public String t3(String name){return "name:" + name;}

当请求传递name时,接收到了name,并返回

2.传递多个参数

 @RequestMapping("/t4")public String t4(String name,int age){return "name:" + name +"age:"+age;}

和传递单个参数一样,传递name和age,接收然后并返回,并且这两个参数的位置不是必需与代码中的参数位置一一对应。

并且使用基本数据类型必需进行有效传值,0或者NULL这种一样会报错。

但是使用包装类型可以不用传值,其返回的是NULL

 @RequestMapping("/t5")public String t5(String name,Integer age){return "name:" + name +"age:"+age;}

3.传递对象

@RequestMapping("/t6")public String t5(Student student){return "Student" + student.toString();}

4.后端参数重命名

使用@RequestParam重命名时,
1)传递的参数必须和@RequestParam声明的参数名称一样,这个参数为必传


 

  @RequestMapping("/t7")public String t7(@RequestParam("name")String student_name){return "Student_name" + student_name ;}
  • 后面定义的为重命名的,随着程序的运行数据增多可能分不清这个是什么具体的数据,态笼统,不能细分,这样就可以细分。如最开始设计的时候只有姓名,随着功能开始拓展就可能会出现各种名字的 划分如学生名,老师名等,不想大变的情况下这样较好,最主要不会改变原有的逻辑。

2)使用required=faslse设置为不是必需要传递

@RequestMapping("/t8")public String t8(@RequestParam(value = "name",required = false)String student_name,int age){return "Student_name" + student_name +age;}

5.传递数组

当请求中,同一个参数有多个时,浏览器会将其封装成一个数组

 @RequestMapping("/t9")public String t9(String[] array){return "接收到的数组"+ Arrays.toString(array)+array.length;}

6.传递集合

  @RequestMapping("/t1")public  String t1(@RequestParam List<String> array){return "长度"+ array.size();}

 如果不在参数列表中写@RequestParam就会报错并且一般情况下

5开头的通常旨服务端发生错误

4开头的通常旨客户端发生错误

 

上面那些响应码是叫HTTP响应码,不是后端自定义的
2XX:成功3XX:重定向4XX:客户端错误5XX:服务端错误

后端自定义的叫做业务状态码

比如用户登录:
1.密码正确:恭喜登录成功

2.密码错误:密码错误

这样根据自己写的业务逻辑返回的。

这里也可以将参数设置为不是必需要传递

@RequestMapping("/t1")public  String t1(@RequestParam(required = false) List<String> array){return "长度"+ array.size();}


7.传递json数据

传递JSON数据使用需要使用@RequestBody

  @RequestMapping("/t2")public  String t2(@RequestBody Student student ){student.getAge();student.getAge();return student.toString() +" ";}

8.获取URL中的参数

注意里面的注解变化为了@PathVariable,以及请求URL格式必须和后端定义的URL格式必需匹配
,切记不要错误,并且也可以一次获取多个,并进行重命名。

获取一个:

@RequestMapping("/t3/{studentid}")public  String t3(@PathVariable Integer studentid ){return "studentid"+studentid;}

 获取多个:

获取多个URL时,注意/一定要将其分隔开

//获取多个并进行重命名
@RequestMapping("/t3/{studentid}/{studentage}")public  String t3(@PathVariable Integer studentid ,@PathVariable("studentage") Integer age){return "studentid"+studentid + "age"+age;}

9.上传图片

注意注解名称和文件类型

 @RequestMapping("/t4")public  String t4(@RequestPart MultipartFile file) {System.out.println(file.getOriginalFilename());return "success";}

10.获取cook,session,Header

Cookie是客户端机制用来保存记录的,Session是服务端机制用来保存记录的二者的联系在于会与Sessionid联系起来,通过Sessionid来确保这份记录在Cookie和Session都有。

cookie

其下面获cookie代码中如果不加判断为空会出现空指针异常。切记当页面中出现500错误时,一定要返回编辑器的控制台看报错信息

第一种获取cookie//想错了(????)

  @RequestMapping("/getCookie")public  String getCookie(HttpServletRequest request, HttpServletResponse response) throws IOException {Cookie[] cookies = request.getCookies();if(cookies != null) {for (Cookie cookie : cookies) {System.out.println(cookie.getName() + ":" + cookie.getValue());return  "cookie的值"+cookie;}Arrays.stream(cookies).forEach(cookie -> {System.out.println(cookie.getName() +":" +cookie.getValue());});}return "success";}

注解获取cookie

  @RequestMapping("/getCookie2")public  String getCookie2 (@CookieValue String test) {return "cookie存取的值"+test;}

测试能不能取到cookie 在浏览器中按F12或者在网页中右键有个检查按钮点进去其中应用里面就可以设置cookie值

并且其最后输出时

第一种方式会直接获取到所有cookie的值????

第二种方式只能获取到指定cook的值,但是可以一定获取多个,由自己定义的参数决定

session

因为要从请求中来获取session,我们要先设置一个session。在设置session时,我们可以从抓到的包中看到请求发出之后,响应那边会出现Set-Cookie,并且其在其后面的JSESSIONID就是设置的session的id,右侧就是其值,相互对应,返回到客户端中存储起来。

Set-Cookie: JSESSIONID=B4409B5559B2E5966289A99290C51E6B;

@RequestMapping("/setSession")public  String setSession(HttpServletRequest request, HttpServletResponse response) throws IOException {HttpSession session = request.getSession();session.setAttribute("name","张三");return "success";}

 在获取session时,因为会将想要读取的seesionid也进行enconde解码变成一串字母只有相同的才会变成相同的字母,如果在客户端字母相同的话,就会返回其存储的值。

@RequestMapping("/getSession")public  String getSession(HttpServletRequest request, HttpServletResponse response) throws IOException {HttpSession session = request.getSession(false);if(session !=null){String username = (String) session.getAttribute("name");return "用户名"+username;}return "没有记录";}

 注解获取session

 @RequestMapping("/getSession2")public  String getSession2(@SessionAttribute String name){return "session" + name ;}

 在参数列表中直接创建session对象

 @RequestMapping("/getSession3")public  String getSession3(HttpSession session){String name = (String) session.getAttribute("name");return "session" + name ;}

获取Header

两中方式创建没有太大区别

 @RequestMapping("/getHeader")public  String getHeader(HttpServletRequest request){String userAgent = request.getHeader("user-Agent");return "userAgent" +userAgent ;}@RequestMapping("/getHeader2")public  String getHeader2(@RequestHeader("user-Agent") String userAgent){return "userAgent" +userAgent ;}


http://www.ppmy.cn/devtools/4331.html

相关文章

Java并发:从超卖问题到锁的升级过程

假如我们现在有一百个线程&#xff0c;商品A库存量为100&#xff0c;售出方法为sale() 在没有上锁是&#xff0c;即时我们设置当库存量为零时停止售卖&#xff0c;但是也极有可能出现超卖的情况&#xff0c;这是由于我们售卖的方法没有原子性&#xff0c;在售出的过程中&#…

账号安全基本措施2

sudo命令 sudo(superuser do)&#xff0c;允许系统管理员让普通用户执行一些或者全部的root命令的一个工具。 其配置在/etc/sudoers权。它允许系统管理员集中的管理用户的使用权限和使用的主机。属性必须为0440。 语法检查&#xff1a; 检查语法&#xff1a; 修改文件时&…

<script>和<script setup>的区别

在Vue 3中&#xff0c;<script setup>是Composition API的一个语法糖&#xff0c;它提供了一种更简洁的方式来编写组件逻辑。使用<script setup>&#xff0c;您可以在组件外部直接导入或定义方法和响应式数据&#xff0c;而不需要在setup()函数内部进行。 <scr…

屏幕状态自动检测+鼠标自动操作

目录 一、写在前面 1.1适用场景 1.2涉及到的库 二、函数库 2.1pyautogui-屏幕截图&鼠标操作 2.1.1屏幕截图screenshot函数 2.1.2鼠标移动及单击 2.2Opencv-模板匹配 2.2.1matchTemplate函数 2.2.2minMaxLoc函数 2.2.3相关代码 2.3base64-图片转base64 2.3.1在线…

Linux环境部署MySQL

LINUX环境下部署MySQL MySQL官网&#xff1a;https://www.mysql.com/ MySQL是一种关系型数据库管理系统&#xff0c;所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策&#xff0c;分为社区版和商业版&#xff0c;由于其体积小、速度快、总体…

若依框架后台管理系统_修改后台管理密码

若依框架后台管理系统_修改后台管理密码 1. 找见加密函数&#xff1a; /*** 生成BCryptPasswordEncoder密码** param password 密码* return 加密字符串*/public static String encryptPassword(String password){BCryptPasswordEncoder passwordEncoder new BCryptPasswordE…

关于Python中install edge_tts记录

如下代码&#xff1a; #!/usr/bin/env python3""" Basic audio streaming example.This example shows how to stream the audio data from the TTS engine, and how to get the WordBoundary events from the engine (which could be ignored if not needed).…

PHP 爬虫如何配置代理 IP(CURL 函数)

在 PHP中 配置代理IP&#xff0c;可以通过设置 CURL 库的选项来实现&#xff0c;代码如下&#xff1a; 当然你要有代理ip来源&#xff0c;比如我用的这个 代理商 &#xff0c;如果想服务稳定不建议找开源代理池&#xff0c;避免被劫持。 <?php // 初始化cURL会话 $ch cu…