温馨提示:这篇文章已超过437天没有更新,请注意相关的内容是否还可用!
摘要:,,本文介绍了Spring MVC框架的基本概念和使用方法。Spring MVC是一个基于Java的Web应用程序框架,它提供了一种模块化的方式来开发Web应用程序。文章详细阐述了Spring MVC的特点、核心组件以及如何使用它构建Web应用程序。通过本文,读者可以了解Spring MVC的基本原理,并学会将其应用于实际项目中。
目录
一.什么是SpringMVC呢?
1.1MVC的介绍
1.2SpringMVC和MVC的关系
二.SpringMVC的学习
第一步:创建项目
第二步,SpringMVC的连接
第三步,Spring MVC获取参数
第四步 SpringMVC的输出
总结
特点和优势
核心组件
一.什么是SpringMVC呢?
在官方定义中,所谓的SpringMVC是基于Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中,从⼀开始就包含在 Spring 框架中。它就被称为MVC。
总结:SpringMvc是一个web框架,基于Servlet API构建
1.1MVC的介绍
SpringMVC从名字上分解的话,就是Spring和MVC,那么我们就先来讲解一下,什么是MVC!
MVC的全名是Model View Controller ,是软件工程的一种架构模式,分为三部分:模型、视图和控制器。
- Model(模型):应⽤程序中⽤于处理应⽤程序数据逻辑的部分。通常模型对象负责在数据库中存取数据
- View(视图)是应⽤程序中处理数据显示的部分。通常视图是依据模型数据创建的。
Controller(控制器)是应⽤程序中处理⽤户交互的部分。通常控制器负责从视图读取数据, 控制⽤户输⼊,并向模型发送数据。
总结:人向Controller层请求数据,Controller就向Model层请求数据,model层将数据传递给Controller,然后Controller层不是直接将数据传递请求者,而是给View,view将数据给请求者!
1.2SpringMVC和MVC的关系
MVC 是⼀种思想,⽽ Spring MVC 是对 MVC 思想的具体实现。 总结来说,Spring MVC 是⼀个实现了 MVC 模式,并继承了 Servlet API 的 Web 框架。既然是 Web框架,那么当⽤户在浏览器中输⼊了 url 之后,我们的 Spring MVC 项⽬就可以感知到⽤户的请求。两者之间的联系:
- Spring MVC 是基于 MVC 架构模式的 Web 应用程序开发框架,用于构建 Java Web 应用程序。
- Spring MVC 扩展了经典的 MVC 架构,提供了一些额外的功能和特性,使得开发 Web 应用程序更加简单和灵活。
- 在 Spring MVC 中,模型(Model)表示为 POJO(Plain Old Java Object),视图(View)通常是 JSP、Thymeleaf 或其他模板技术,而控制器(Controller)通常是一个带有 @Controller 注解的 Spring Bean。
- Spring MVC 提供了一套基于注解的请求映射机制,简化了 URL 到处理器的映射配置。
二.SpringMVC的学习
目前的Java项目都是基于Spring或者SpringBoot开发,但是无论是哪个,其核心都是SpringMVC,可以说SpringMVC是Spring框架的核心模块,因此总结而言,大部分Java项目约等于SpringMVC项目,这就是我们学SpringMVC的原因。
在实际当中,创建SpringBoot项目时,勾选的SpringWeb框架就是SpringMVC框架!如下图:
学习 SpringMVC 主要掌握以下三个功能:
- 连接的功能:将⽤户(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring 程序。
- 获取参数的功能:⽤户访问的时候会带⼀些参数,在程序中要想办法获取到参数。
- 输出数据的功能:执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤户。
第一步:创建项目
- 使用Maven项目添加Spring MVC框架依赖的方式创建
- 使用SpringBoot的方式创建的Spring MVC项目
但由于第一种方式过于繁琐,我们这边采取第二种,如上图创建。
第二步,SpringMVC的连接
在讲解连接之前,我们需要明白一个专业词汇:路由映射!
所谓的路由映射指的是,当用户访问一个url时,将用户的请求对应到程序中某个类的某个方法的过程。
实现方式:使用相关注解:@RequestMapping,@PostMapping,@GetMapping
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller // 让 spring 框架启动时,加载 @ResponseBody // 返回⾮⻚⾯数据 @RequestMapping("/user") // 路由器规则注册 public class UserController { // 路由器规则注册 @RequestMapping("/hi") public String sayHi(){ return "
Hi,Spring MVC.
"; } }当访问了目标地址:http://localhost:8080/user/hi 时,就会打印Hi ,Spring MVC.
解析注解:
@RequestMapping注解的基本用法说明:
- @RequestMapping注解可以修饰类,也可以修饰方法,当修饰类和方法时,访问的地址是类+方法。
- @RequestMapping注解可以处理任何HTTP方法的请求,包括GET、POST、PUT、DELETE等。
- @RequestMapping注解可以使用method属性来进行限定处理请求的HTTP方法。
@PostMapping注解的基本用法说明:
- @PostMapping注解通常用于修饰控制器类中的方法,而不是类本身。
- @PostMapping注解只可以处理HTTP POST请求映射到处理方法上。
@GetMapping注解的基本用法说明:
- @GetMapping注解通常用于修饰控制器类中的方法,而不是类本身。
- @GetMapping注解只可以处理HTTP GET请求映射到处理方法上。
第三步,Spring MVC获取参数
1.获取单个参数
获取单个参数的方法:一般有两个方法:
- 当url的参数名和请求参数一致,直接获取url的参数
- 当url的参数名和请求不一样,则使用 @RequestParam("参数名") 注解,使用了该注解时,一定需要传值!或者使用@RequestParam(value = "参数名", required = false),可以避免传值
@RestController @RequestMapping("/User") public class UserController { //url链接的name值传递过来,参数必传 @RequestMapping("/rename") public String rename(String name){ return "返回值----》"+name; } //url链接当中参数n的值,赋给name @RequestMapping("/rename2") public String rename2(@RequestParam("n")String name){ return "返回值----》"+name; } }
图形解析:
2.获取多个参数
获取方法和获取当个参数一致。
获取多个参数注意说明:
- 进行参数匹配时,后端代码的参数名称要与地址栏中的参数名称要保证完全一致。
- 前后端进行参数匹配时,是以参数的名称进行匹配的,因此地址栏中的参数位置是不影响后端获取参数的结果。
三.获取普通对象
获取对象,我们需要创建一个实体类,例如:User类@Data public class User { private String name; private String sex; private Integer age; }
再创建一个获取普通类的Controller类:
@RequestMapping("/add") public User add(User user){ return user; }
代码测试:
解析:Spring MVC 会根据地址栏中输入的参数列表自动实现参数对象的赋值操作,如果url的参数不存在该类的其他属性,则为空。 四.获取JSON对象 Json格式,一般存在前端传递,获取方法也不一样。使用 @RequestBody 注解来实现接收 Json 对象的操作 JSON格式:{ "name":null, "password":null }
获取方法:
@RequestMapping("/add") public User add(@RequestBody User user){ return user; }
五.获取基础URL参数
这个获取和之前获取单个参数有什么区别呢?
区别在于,他获取的不是?之后的,也不是&之后的,而是类似如下图的值:
获取参数值,需要使用:相关注解 @PathVariable 代码:// 获取URL参数 @RequestMapping(value = "/say/{username}/{password}") public String say(@PathVariable(value = "username") String name,@PathVariable String password){ return "用户名:"+name + " 密码: "+password; }
测试结果:六.获取上传的文件 获取上传的文件,我们需要通过两个要点:
- @RequestPart("xxx")注解,用来接收文件数据,接收名为 "file"的文件
- MultipartFile类,Spring 框架提供的一个接口,用于表示上传的文件数据。它提供了一系列方法,用于获取文件的名称、内容、大小等信息,并且可以将文件数据保存到本地文件系统
@PostMapping("/upload") public String handleFileUpload(@RequestPart("file") MultipartFile file) { if (!file.isEmpty()) { String fileName = file.getOriginalFilename(); //文件名 long fileSize = file.getSize(); //文件大小 String contentType = file.getContentType(); //文件类型 try { // 保存文件到本地文件系统 file.transferTo(new File("/path/to/save/" + fileName)); return "File uploaded successfully!"; } catch (IOException e) { return "Failed to upload file: " + e.getMessage(); } } else { return "No file uploaded!"; } }
但是,这样的话,上传文件,如果两个人上传的是同一个文件,那么会无法存储,因为一个文件夹里只能有一个,因此,我们可以使用UUID.randomUUID进行随机生成一组32位数的16进制数字所构成的文件名,进行存储。
七.获取Header
获取该类,需要使用注解@RequestHeader
//获取header @PostMapping("/getHeader") public Object getHeader(@RequestHeader("User-Agent")String userAgent){ return "User-Agent:"+ userAgent; }
使用@RequestHeader 注解进行获取Header中的参数操作,该注解里的参数的参数名要与Header里面的参数名要一致。
八.获取Cookie Cookie 是在客户端(通常是浏览器)存储的小型文本文件,由服务器发送到客户端,然后由客户端保存并在以后的请求中发送回服务器。它主要用于跟踪用户的会话信息、记录用户偏好设置等。 获取Cookie代码://获取cookie @RequestMapping("/getCookie") public Object getCookie(@CookieValue("testCookie") String cookie){ return cookie; }
自创建Cookie值:
效果图展示:注:使用 @CookieValue 注解进行获取Cookie的操作,该注解里的参数的参数名要与Cookie列表里面的Cookie名要一致。
九.获取Session
在获取Session之前,我们需要定义一个Session值:
private static final String SESSION_KEY = "USER_SESSION_KEY"; @RequestMapping("/setSession") public Object setSession(HttpServletRequest request){ HttpSession session =request.getSession(); session.setAttribute(SESSION_KEY,"session_Name"); return "Session 存储成功 !"; } @RequestMapping("/getSession") public Object getSession(@SessionAttribute(SESSION_KEY) String session){ return "Session_Value = " + session; }
效果图:
取Session的注意事项:
- 使用@SessionAttribute 注解进行获取Session的操作,该注解里的参数的参数名要与Session列表里面的Session名要一致。
- 存储Session操作没有与之对应的注解,只有获取Session操作才有对应的注解@SessionAttribute 进行简便获取。
- Cookie能通过手动添加,但Session不能手动添加,只能通过代码进行Session创建后添加,故可知Session比Cookie更安全。
第四步 SpringMVC的输出
1.输出静态页面
@RequestMapping("/index") public Object getIndex(){ return "/index.html"; }
直接返回页面,注:如果index.html不加/,表示在当前目录下查找该文件,如果加了/,表示在根目录下查找该文件。
2.返回文本数据
@RequestMapping("/m7") @ResponseBody public String method_7() { return "
Hello,HTML~
"; }直接返回文本数据到页面上,如果文本数据的类型是html文件,就会展示对应的效果
3.返回JSON对象
这个是重点,返回JSON对象是重点,搭配了ajax使用,代码如下:
@RequestMapping("/My_JSon") @ResponseBody public HashMap My_JSon() { HashMap map = new HashMap(); map.put("Java", "Java Value"); map.put("MySQL", "MySQL Value"); map.put("Redis", "Redis Value"); return map; }
4.请求转发或重定向
return 不但可以返回⼀个视图,还可以实现页面的跳转。
- forward :请求转发;
- redirect:请求重定向
代码展示:
// 请求重定向 @RequestMapping("/index") public String index(){ return "redirect:/index.html"; } // 请求转发 @RequestMapping("/index2") public String index2(){ return "forward:/index.html"; }
Forward(转发):
- 转发是服务器端的行为,它是在服务器内部完成的。
- 当使用转发时,服务器会直接将请求转发给另一个资源(通常是一个Servlet或JSP页面),并且客户端浏览器不会感知到这个转发过程。
- 在转发过程中,浏览器地址栏的URL不会改变,仍然显示原始请求的URL。
- 转发是一种较为高效的页面跳转方式,适用于在同一个Web应用程序内部的不同资源之间进行跳转。
Redirect(重定向):
- 重定向是服务器向浏览器发出的指令,让浏览器重新向另一个URL发送新的请求。
- 当使用重定向时,服务器会发送一个HTTP状态码(通常是302 Found或者303 See Other),告诉浏览器应该跳转到新的URL。
- 浏览器收到重定向响应后,会向新的URL发送新的请求,然后加载新的页面。
- 重定向会导致浏览器地址栏的URL发生变化,显示新的URL。
- 重定向可以跳转到不同的域名或不同的Web应用程序,适用于需要跳转到其他Web资源的情况。
常见的情景:
转发(Forward):
- 表单提交后的处理:当用户填写完表单并提交后,服务器可以使用转发将请求传递给另一个页面来处理表单数据,例如显示成功消息或验证表单数据。
- MVC框架中的控制器转发:在使用MVC(Model-View-Controller)框架开发Web应用程序时,控制器可以使用转发来将请求传递给适当的视图以生成响应。
- 页面内部的组件重用:在一个页面中,某个组件可能被多个其他组件所引用,这时可以使用转发来共享组件的渲染结果,而不是重复渲染相同的内容。
重定向(Redirect):
- 页面不存在的情况下重定向到错误页面:当用户访问一个不存在的页面时,服务器可以发送重定向响应到一个错误页面,告知用户所请求的页面不存在。
- 用户身份验证后的跳转:在用户成功登录后,可以将其重定向到需要登录才能访问的页面,以确保用户已经通过了身份验证。
- URL重写:在进行URL重写或重定向时,可以将一个URL重定向到另一个URL,这可能是因为旧URL已经过时或者需要进行优化。
总结
Spring MVC 是一个基于 Java 的 Web 框架,用于开发 Web 应用程序。它建立在经典的 MVC(Model-View-Controller)设计模式之上,提供了一种灵活、可扩展的方式来构建 Web 应用程序。下面是关于 Spring MVC 的一些总结:
特点和优势
模块化设计:Spring MVC 将应用程序分解为模型(Model)、视图(View)和控制器(Controller),使开发人员可以更容易地管理和维护代码。
灵活性:Spring MVC 提供了丰富的配置选项和可扩展性,可以根据项目需求定制开发流程和组件。
与其他 Spring 模块整合:Spring MVC 与其他 Spring 模块(如 Spring Core、Spring Boot、Spring Data 等)无缝整合,为开发人员提供了一致的开发体验。
强大的功能:Spring MVC 提供了许多功能,如表单处理、数据绑定、验证、国际化等,以帮助开发人员快速构建功能完善的 Web 应用程序。
良好的测试支持:Spring MVC 提供了各种测试工具和框架,使开发人员可以轻松编写单元测试和集成测试,确保应用程序的质量和稳定性。
核心组件
DispatcherServlet:作为前端控制器(Front Controller),负责接收所有的客户端请求,并将请求分发给相应的处理器(Handler)进行处理。
HandlerMapping:负责将请求映射到相应的处理器(Controller)上,根据请求的 URL 或其他条件决定调用哪个 Controller。
Controller:处理器,负责处理请求并生成响应。通常是一个带有 @Controller 或 @RestController 注解的类。
ModelAndView:用于封装处理器方法的处理结果数据和视图信息,包括模型数据和视图名称。
ViewResolver:负责将逻辑视图名称解析为实际的视图对象,通常是一个 JSP、Thymeleaf 或 FreeMarker 等模板引擎。
Interceptor:拦截器,负责在请求处理前后执行预处理和后处理操作,例如日志记录、权限检查等。
还没有评论,来说两句吧...