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

Spring MVC/Web

1.Spring MVC 的介绍

Spring Web MVC是基于Servlet API构建的原始Web框架,也是Spring框架的一部分。它提供了灵活可扩展的MVC架构,方便开发者构建高性能的Web应用程序,并与 Spring 生态系统无缝集成。

2.MVC 设计模式


MVC(Model-View-Controller)是一种常见的软件设计模式,用于将应用程序的逻辑分离成三个独立的组件:

  • 模型(Model):模型是应用程序的数据和业务逻辑的表示。它负责处理数据的读取、存储和操作,以及业务规则的处理。模型通常是独立于用户界面的,可以在不同的视图和控制器之间共享和重用。
  • 视图(View):视图是用户界面的呈现部分,负责展示数据给用户,并接收用户的输入。视图通常是根据模型的数据进行渲染和更新的,它可以是Web页面、图形界面或命令行界面等。
  • 控制器(Controller):控制器是模型和视图之间的协调者,负责接收用户的输入并根据输入调用相应的模型逻辑。控制器将用户的请求转发给模型进行处理,并将处理结果传递给视图进行展示。控制器还可以处理视图的事件和状态变化

MVC是一种思想,而Spring MVC是一种实现

  • 1.连接的功能:将⽤户(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的 Spring 程序。
  • 2.获取参数的功能:⽤户访问的时候会带⼀些参数,在程序中要想办法获取到参数。
  • 3.输出数据的功能:执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤户

连接

想要实现路由注册必须需要@Controller控制器注解

给类设置路由需要@RequesMapping注解 提供路由地址

@ResponseBody是说明返回的是一个非静态页面

@RestController注解是@Controller@ResponseBody

//只有Controller控制器才能实现路由注册
//RestController和Controller能实现连接//@Controller //控制器 在spring启动时 加载并注册
//@ResponseBody //返回的是一个非静态页面
@RestController//是一个控制器 返回的是一个非静态数据 组合注解
@RequestMapping("/web") //给当前类设置路由  当访问/web时 可以访问到当前类
public class Demo1 {
//    @ResponseBody //返回的是一个非静态页面
//    @RequestMapping("/tweb") //可以支持get、post请求@RequestMapping(value = "/tweb",method = RequestMethod.GET) //指定get方法public Object test(){return "二级路由访问";}
}

返回一个静态页面 很少用得到

@Controller
public class Demo2 {@RequestMapping("/test2")public Object test2(){return "/index.html";}
}

static里需要此页面

Get请求方法

@RequestMapping("/tweb") //可以支持get、post请求
@RequestMapping(value = "/tweb",method = RequestMethod.GET) //指定get方法
@GetMapping("/tweb1")

获取单个数据

//这两种都支持获取单个参数 多个参数也可以
//在Spring MVC中默认内置隐藏两个参数 一个是Request Response  如果想要使用 只需要在方法中声明即可//方式一
@GetMapping("/tweb1") //只支持get方法public Object test1(HttpServletRequest request){return request.getParameter("name");}//方式二  推荐@GetMapping("/tweb2")
//int不支持参数为空 Integer支持为空public Object test2(/*int*/ Integer age){//参数名必须相同 才能获取到return age;}

@GetMapping("/tweb2")
public String test2(/*int*/ Integer age,String name){//参数顺序不同不影响 只要保证key准确就可以return name+" "+age;
}

获取参数是对象形式

参数请求类型

  • URL传参

  • Ajax传参

  • Form表单传参

URL传参

Form传参

//使用参数
@GetMapping("tweb4")public String test4(String name,Integer password){return name+" "+password;}
//使用对象
@GetMapping("/tweb4")
public String test4(Student student){//保证前端传来的数据 类内有即可return student.toString();
}

Ajax传参

<script>function on(){jQuery.ajax({url:"tweb5",type:"GET",data:{"name":jQuery(".name").val(),"password":jQuery(".password").val()},success:function(res){alert(res);}});}
</script>
@GetMapping("/tweb5")
public Object tese5(String name,Integer password){User user=new User();user.setName(name);user.setPassword(password);return user;
}

普通得URL传参和JSON的格式是不同的

url是在url传参,而JSON是在body内

如果后端想接受JSON格式的,就需要使用@RequestBody注解 获取JSON格式

后端接收前端传来的文件

@GetMapping("/tweb6")
//                   (key的名字 不是图片的名字) 获取key为myfile的文件 赋值给这个file
public String test6(String name, @RequestPart("myfile") MultipartFile file) throws IOException {file.transferTo(new File("D:\\Spring Boot\\SpringMVCDemo1\\src\\main\\resources\\img.png"));return "success";
}

获取cookie

//获取cookie
@GetMapping("/tweb7")//获取key为cookie的值 赋值给cookie
public String test7(@CookieValue("cookie") String cookie){return cookie;
}

这里可以设置Cookie

设置session

//设置session
@GetMapping("tweb9")
public String test9(HttpServletRequest request){HttpSession session=request.getSession();if(session==null){session.setAttribute("username","wangwu");}return "创建成功";
}

获取/创建session

@GetMapping("tweb8")
//                                   如果有则返回 没有则创建 值为null
public String test8(@SessionAttribute(value = "session",required = false) String session){return "session: "+session;
}

获取请求头内的数据

//获取请求头内的数据
@GetMapping("tweb10")
//                   获取请求头内key为 Host的数据
public String test10(@RequestHeader("Host") String head){return "head"+head;
}

获取URL内的参数

只能获取层级的参数 无法获取?后面的参数

更改URL参数

//更改URL参数
//当前的传的参数名不准确 可以通过后端来更正 (前端参数依旧是改不了 只是改了后端)
@GetMapping("tweb11")
// 前端参数名为a 当再传a时 识别成user               设置成false 非必传参数 这个参数不穿可以可以的
//默认为true 必传参数         这时只能识别名为a的参数 依旧无法识别user的参数
public String test11(@RequestParam(value = "a",required = false) String user){return "user: "+user;
}

请求转发和请求重定向的区别

请求转发通常发生在服务器端,当一个服务器接收到请求后,它可能会将这个请求转发给另一个服务器或者服务来处理。这个过程对于客户端来说是透明的,客户端并不知道请求被转发了。转发过程发生在服务器之间,客户端只与第一个服务器通信。

请求重定向发生在客户端和服务器之间的交互中。当服务器接收到一个请求后,它可能会告诉客户端需要重新向另一个URL发送请求。客户端接收到这个重定向指令后,会根据服务器提供的新URL重新发起请求。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 人才测评的应用:人才选拔,岗位晋升,面试招聘测评
  • 开源网页视频会议,WebRTC音视频功能比较
  • kafka 消费模式基础架构
  • Flutter 中的 ExpansionTile 小部件:全面指南
  • BWVS 靶场测试
  • CSS布局和定位应用方案
  • 网络编程-TCP并发服务器-多点通信-域套接字
  • 重学java 39.多线程 — 线程安全
  • 一篇文章讲透排序算法之希尔排序
  • 大摩:AI PC渗透率到2028年将达65%,联想和戴尔是最大受益者
  • 【linux】docker下nextcloud安装人脸识别插件
  • 碌时刻必备!微信自动回复让你告别消息堆积
  • 临时存储和永久存储的区别
  • HarmonyOS 鸿蒙应用开发 - 多态样式 stateStyles
  • solidworks画螺栓学习笔记
  • CEF与代理
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • JS 面试题总结
  • Laravel Mix运行时关于es2015报错解决方案
  • magento 货币换算
  • PHP的类修饰符与访问修饰符
  • vue数据传递--我有特殊的实现技巧
  • 类orAPI - 收藏集 - 掘金
  • 使用 Docker 部署 Spring Boot项目
  • 算法---两个栈实现一个队列
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 通过npm或yarn自动生成vue组件
  • 微信小程序设置上一页数据
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 白色的风信子
  • FaaS 的简单实践
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • ## 1.3.Git命令
  • #DBA杂记1
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (4.10~4.16)
  • (Java)【深基9.例1】选举学生会
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (三)SvelteKit教程:layout 文件
  • (三)uboot源码分析
  • (三分钟)速览传统边缘检测算子
  • (五)关系数据库标准语言SQL
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)一些感悟
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .bat文件调用java类的main方法
  • .cn根服务器被攻击之后
  • .net core Swagger 过滤部分Api
  • .net framework4与其client profile版本的区别
  • .NET(C#) Internals: as a developer, .net framework in my eyes