SpringMVC
Spring MVC 学习学习
一.Spring MVC概述
1.1三层架构模式
浏览器----->web,service,dao
- web:页面数据收集,产生页面
- service:业务处理
- dao:数据的持久化处理
一个serverlet只能处理一个请求;
1.2 MVC模式
浏览器----->Controller,View,Model,service,dao
流程控制:
controller调用service,service调dao,得到Model
-
SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 中。
-
SpringMVC 已经成为目前最主流的MVC框架之一,它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时 它还支持 RESTful 编程风格的请求。
1.3 SpringMVC的开发步骤
- 导入SpringMVC相关坐标
- 配置SpringMVC核心控制器DispathcerServlet
- 创建Controller类和视图页面
- 使用注解配置Controller类中业务方法的映射地址
- 配置SpringMVC核心文件 spring-mvc.xml
- 客户端发起请求测试
二.常用注解解析
@RequestMapping
作用:用于建立请求 URL 和处理请求方法之间的对应关系
位置:
-
类上,请求URL 的第一级访问目录。此处不写的话,就相当于应用的根目录
-
方法上,请求 URL 的第二级访问目录,与类上的使用@ReqquestMapping标注的一级目录一起组成访问虚拟路径
属性:
- value:用于指定请求的URL。它和path属性的作用是一样的
- method:用于指定请求的方式
- params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样
例:
params = {"accountName"},表示请求参数必须有accountName
params = {"moeny!100"},表示请求参数中money不能是100
@EnableWebMvc
作用:启用Spring MVC的注解驱动功能,用于配置Spring MVC。
位置:通常放在配置类上,以启用Spring MVC的各种功能。
属性:无特定属性,一般不需要设置。
示例:
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
// 其他配置
}
@RequestBody
作用:用于将HTTP请求体中的JSON或XML数据转换为Java对象。
位置:方法参数前,用于接收请求体中的数据。
属性:无特定属性,一般不需要设置。
示例:
@PostMapping("/createUser")
public ResponseEntity<User> createUser(@RequestBody User user) {
// 处理用户创建逻辑
return new ResponseEntity<>(user, HttpStatus.CREATED);
}
@RequestParam
作用:用于将HTTP请求中的查询参数绑定到控制器的方法参数上。
位置:方法参数前,用于接收请求中的查询参数。
属性:
- value:指定请求参数的名称。
- required:是否为必需参数,默认为true。
- defaultValue:当请求参数缺失时使用的默认值。
示例:
@GetMapping("/getUser")
public ResponseEntity<User> getUser(@RequestParam("id") Long id) {
// 根据ID获取用户信息
User user = userService.findById(id);
return new ResponseEntity<>(user, HttpStatus.OK);
}
三.MVC实现数据请求方式
3.1 基本类型参数
基本类型参数包括int
, long
, float
, double
, boolean
, String
等。这些参数可以直接作为方法参数传递。
@Controller
public class BasicTypeController {
@RequestMapping("/basic")
public String handleBasicTypes(@RequestParam("id") int id,
@RequestParam("name") String name,
@RequestParam("active") boolean active) {
// 处理逻辑
System.out.println("ID: " + id);
System.out.println("Name: " + name);
System.out.println("Active: " + active);
return "result";
}
}
3.2 POJO类型参数
POJO(Plain Old Java Object)类型参数可以通过表单提交或者JSON格式的数据进行绑定。
public class User {
private String username;
private String password;
// getters and setters
}
@Controller
public class PojoController {
@RequestMapping("/pojo")
public String handlePojo(User user) {
// 处理逻辑
System.out.println("Username: " + user.getUsername());
System.out.println("Password: " + user.getPassword());
return "result";
}
}
3.3 JSON格式数据
@RestController
public class PojoJsonController {
@PostMapping("/pojoJson")
public ResponseEntity<String> handlePojoJson(@RequestBody User user) {
// 处理逻辑
System.out.println("Username: " + user.getUsername());
System.out.println("Password: " + user.getPassword());
return new ResponseEntity<>("Success", HttpStatus.OK);
}
}
3.4 数组类型参数
数组类型参数可以通过多个同名请求参数传递。
@Controller
public class ArrayController {
@RequestMapping("/array")
public String handleArray(@RequestParam("ids") int[] ids) {
// 处理逻辑
for (int id : ids) {
System.out.println("ID: " + id);
}
return "result";
}
}
3.5 日期型参数
日期型参数可以通过自定义格式化器或使用@DateTimeFormat
注解进行格式化。
使用@DateTimeFormat注解
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
public class Event {
private String name;
private Date date;
// getters and setters
}
@Controller
public class DateController {
@RequestMapping("/date")
public String handleDate(@RequestParam("name") String name,
@DateTimeFormat(pattern = "yyyy-MM-dd") @RequestParam("date") Date date) {
// 处理逻辑
System.out.println("Name: " + name);
System.out.println("Date: " + date);
return "result";
}
}
使用自定义格式化器
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import org.springframework.stereotype.Component;
import org.springframework.format.Formatter;
@Component
public class CustomDateFormatter implements Formatter<Date> {
private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
@Override
public Date parse(String text, Locale locale) throws ParseException {
return dateFormat.parse(text);
}
@Override
public String print(Date object, Locale locale) {
return dateFormat.format(object);
}
}
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatter(new CustomDateFormatter());
}
}
四.REST风格
Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。主要用于客户端和服务 器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等。
Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:
-
GET:用于获取资源
-
POST:用于新建资源
-
PUT:用于更新资源
-
DELETE:用于删除资源
例如:
- /user/1 GET : 得到 id = 1 的 user
- /user/1 DELETE: 删除 id = 1 的 user
- /user/1 PUT: 更新 id = 1 的 user
- /user POST: 新增 user