文章目录
- 一.SpringMVC的概念
- 1.1 Spring的概念
- 1.2 MVC和SpringMVC的关系
- 二.SpringMVC步骤
- 2.1 创建一个springMVC项目
- 2.2 获取参数的功能
- 2.3 输出参数的功能
- 三.SpringMVC的注解介绍
- 3.1 获取参数
- 3.1.1 获取参数单个参数
- 3.1.2 获取多个参数
- 3.1.3获取对象
- 3.1.4 获取json对象
- 3.1.5 从基础的url获取参数
- 3.1.6 获取上传文件
- 3.1.7 获取Cookie
- 3.1.8 获取header
- 3.1.9 获取Seesion
- 3.2 返回数据
- 3.2.1 返回静态页面
- 3.2.2 返回非静态页面
- 四.其他
一.SpringMVC的概念
1.1 Spring的概念
SpringMVC是一个Java框架,用于开发基于Java的Web应用程序。它是Spring框架的一部分,专注于在Web应用程序中实现Model-View-Controller(MVC)设计模式。MVC模式是一种常用的软件设计模式,用于将应用程序的逻辑分离成三个主要组件:模型(Model)、视图(View)和控制器(Controller),从而实现代码的解耦和更好的可维护性。
大家看下面的图片,就知道现在这个流程了.
1.2 MVC和SpringMVC的关系
MVC(Model-View-Controller)是一种软件设计模式,用于将应用程序的逻辑分离成三个主要组件:模型(Model)、视图(View)和控制器(Controller)。这个模式的目的是实现代码的解耦和更好的可维护性。
SpringMVC是Spring框架的一部分,专注于在Java Web应用程序中实现MVC设计模式。因此,可以说SpringMVC是Spring框架对MVC模式的具体实现。它提供了一组组件和工具,用于开发基于Java的Web应用程序,并按照MVC模式来组织应用程序的代码结构。
下面是MVC和SpringMVC之间的关系:
MVC是一种设计模式:MVC是一种通用的设计模式,不仅用于Web应用程序,还可以用于其他类型的应用程序。它将应用程序划分为模型、视图和控制器,每个组件有自己的职责,从而实现了代码的分离和解耦。
SpringMVC是MVC在Spring框架中的实现:SpringMVC是Spring框架为Web应用程序提供的MVC实现。它通过控制器(Controller)、视图(View)、模型(Model)、处理器映射器(Handler Mapping)、视图解析器(View Resolver)等组件来实现MVC模式。
Spring框架是更大范围的解决方案:Spring框架提供了广泛的功能和模块,用于开发企业级Java应用程序。除了SpringMVC,它还包括Spring Core(核心容器)、Spring Security(安全)、Spring Data(数据访问)、Spring AOP(面向切面编程)等模块。SpringMVC是Spring框架的一个模块,用于处理Web应用程序的请求和响应。
综上所述,MVC是一种通用的设计模式,而SpringMVC是Spring框架对MVC模式在Web应用程序中的具体实现。使用SpringMVC,开发者可以更轻松地构建灵活可扩展的Java Web应用程序,并且能够充分利用Spring框架的其他功能和特性。
二.SpringMVC步骤
我们学习SpringMVC需要掌握一下3个功能:
- 连接的功能︰将用户(浏览器)和Java程序连接起来,也就是访问一个地址能够调用到我们的
Spring程序。 - 获取参数的功能︰用户访问的时候会带一些参数,在程序中要想办法获取到参数。
- 输出数据的功能:执行了业务逻辑之后,要把程序执行的结果返回给用户。
对于Spring MVC 来说,掌握了以上3个功能就相当于掌握了Spring MVC。
我们先来做一个简单的demo
2.1 创建一个springMVC项目
实际上springMVC项目可以基于springboot创建,创建一个sprigboot项目,再勾选上springWeb就创建好了.
创建一个UserController 类,实现用户到Spring程序的互联互通.
代码入下:
public class UserController {public String hi(String name) {return "spring mvc hi" +name;}}
2.2 获取参数的功能
获取参数的功能,就是依赖一个注解,代码如下:
public class UserController {@RequestMapping("/hi")public String hi(String name) {return "spring mvc hi" + name;}}
2.3 输出参数的功能
输出参数的功能,要在类上加入一个注解,这个注解就是@RestController
代码如下:
@RestController
public class UserController {@RequestMapping("/hi")public String hi(String name) {return "spring mvc hi" + name;}}
最后的大致流程如图所示.
看了上面的流程之后,我接下来会介绍获取参数和答应参数的一些注解
三.SpringMVC的注解介绍
3.1 获取参数
3.1.1 获取参数单个参数
三种请求方式
@RequestMapping
@GetMapping
@PostMapping
代码如下:
@RequestMapping("/e1")public String example(String str){return "hello world "+str;}@GetMapping("/e2")public String example2(String str){return "hello world "+str;}@PostMapping("/e3")public String example3(String str){return "hello world "+str;}
3.1.2 获取多个参数
代码如下:
@RequestMapping("/e4")public String example4(String username,String password){return "hello world "+ username +" "+ password;}
3.1.3获取对象
获取对象的步骤
1.检查控制器方法的参数列表,发现有一个类型为User的参数。
2.根据请求参数名username和password ,id 和age 与User类中的属性名匹配,创建User对象。
3.将请求参数的值绑定到User对象的属性上。
4.将创建并填充好的User对象传递给saveUser方法,作为参数。
@RequestMapping("/reg")public Object example6(User user){System.out.println(user);return user;}
3.1.4 获取json对象
这里具体的步骤就是:
1.前端发送JSON数据:前端通过AJAX或其他方式将JSON数据发送给后端。确保请求的Content-Type设置为application/json,以便告知后端该请求包含JSON数据。
2.创建Java对象:在后端的控制器方法中,创建对应的Java对象,用于接收JSON数据。这个Java对象通常是一个POJO(Plain Old Java Object),包含与JSON数据字段对应的属性。
3.使用@RequestBody注解:在控制器方法参数中使用@RequestBody注解来接收JSON数据,并将其转换为Java对象。
4.处理JSON数据:在控制器方法中,你可以对接收到的Java对象进行业务逻辑的处理。
代码如下:
@RequestMapping("/reg2")public Object example7(@RequestBody User user){System.out.println(user);return user;}
这里我们就不构造前端界面了,我们直接使用postman来构造请求.
3.1.5 从基础的url获取参数
代码如下:
//6.从基础的url获取参数@RequestMapping("/url/{username}/{password}")public String example8(@PathVariable String username,@PathVariable String password){return "username "+ username + "password " +password;}
3.1.6 获取上传文件
具体步骤:
1.客户端发送一个带有文件上传的multipart/form-data类型的POST请求时
2.Spring MVC会将上传的文件数据自动绑定到file参数,
具体代码如下:
@RequestMapping("/myupload1")public Object upload1(@RequestPart("myimg") MultipartFile file){File file1=new File("D:\\Study\\java\\myimg.jpg");try {file.transferTo(file1);return true;}catch (IOException ioException){ioException.printStackTrace();}return false;}
这里的如果反复提交文件,文件会被覆盖,为了防止我们上传文件,被覆盖,我们修改了一下代码:
@RequestMapping("/myupload2")public Object upload2(@RequestPart("myimg") MultipartFile file) {String fileName = UUID.randomUUID() + // 文件名file.getOriginalFilename().substring( // 文件后缀file.getOriginalFilename().lastIndexOf("."));File saveFile = new File("D:\\Data\\" + fileName);try {file.transferTo(saveFile);return true;} catch (IOException e) {e.printStackTrace();}return false;}
3.1.7 获取Cookie
@RequestMapping("/getCk")public Object getCk(@CookieValue(value = "java",required = false) String java){return java;}
3.1.8 获取header
@RequestMapping("/gethd")public Object getHeader(@RequestHeader("Host") String ht) {return "Host -> " + ht;}
3.1.9 获取Seesion
/*** 存储 session*/private static final String SESSION_KEY = "USERINFO_SESSION_KEY";@RequestMapping("/setsess")public void setSess(HttpServletRequest request) {HttpSession session = request.getSession();session.setAttribute(SESSION_KEY, "zhangsan");}/*** 获取 session*/@RequestMapping("/getsess")public Object getSession(@SessionAttribute(SESSION_KEY) String name) {return "session->" + name;}
3.2 返回数据
3.2.1 返回静态页面
3.2.2 返回非静态页面
四.其他
补充以下请求转发和充定向的区别:
-
执行位置:
重定向:是在客户端(浏览器)发生的,即在服务器端处理完当前请求后,服务器会发送一个特殊的HTTP响应状态码(302或者303)和一个新的URL给客户端,然后客户端会重新向新的URL发送请求,实现页面跳转。
请求转发:是在服务器端发生的,即在服务器端处理完当前请求后,服务器会将请求转发到指定的目标URL,并由服务器端直接返回目标URL对应的响应,客户端并不知道页面的跳转。 -
URL变化:
重定向:会改变浏览器的URL地址,因为在重定向后客户端会重新向新的URL发送请求,所以浏览器的地址会变成新的URL。
请求转发:浏览器的URL地址不会改变,因为请求转发是服务器端直接转发请求,客户端并不知道页面的实际跳转。
-
请求对象和响应对象:
重定向:在重定向中,客户端会发送两次请求,第一次请求由服务器处理并发送重定向响应,第二次请求是客户端根据重定向响应重新发送的。
请求转发:在请求转发中,只有一次请求,请求是直接由服务器处理的,并直接将响应返回给客户端。 -
数据传递:
重定向:由于两次请求,因此数据传递比较麻烦,一般通过URL参数或Session来传递数据。
请求转发:由于只有一次请求,因此数据传递相对简单,可以通过请求属性(Request Attribute)来传递数据。 -
适用场景:
重定向:适用于页面跳转后,客户端需要刷新或新加载数据的情况,例如表单提交成功后的跳转、登录成功后的跳转等。
请求转发:适用于页面跳转后,客户端不需要刷新或新加载数据的情况,例如服务器内部的页面跳转、过滤器的页面跳转等。