一、两种框架
MVC框架
Model:存储、封装数据
View:视图,显示数据
Controller:协调控制
复杂业务的Controller非常庞大,难以维护。
MVVM框架——增强版MVC
Model
View
Viewmodel :管理原属于Controller的数据和逻辑处理部分
二、 开发环境热部署
修改后自动重新编译、启动项目
1、在pom.xml中添加依赖spring-boot-devtools
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
2、在application.propeties中配置devtools
spring.devtools.restart.enable=true
spring.devtools.restart.additional-paths=src/main/java
spring.devtools.restart.exclude=static/**
3、修改设置
setting/Build,Execution,Deployment/Compile/Build project automatically
setting/Advances Setting/Compiler/Allow auto-make
三、Controller 控制器
1. 服务器接收客户端请求
@RestController 只请求数据,返回文本数据,默认将返回数据转换为JSON格式
@Controller 请求页面和数据,返回页面,通常与Thymeleaf模板引擎结合使用
2. 控制器接收前端请求
路由映射
@RequestMapping(Get、Post、Delete、Put) 浏览器请求
Get:获取资源
Post:新增资源
Delete:删除资源
Put:更新全部资源
Patch:部分更新资源
路由匹配
* 任意字符
** 任意路径
? 单个字符
3. 参数传递
//http://localhost:8080/hello?nickname=zhang&phone=123
//参数没传递就是null
@GetMapping("/hello")
public String hello(String nickname, String phone)//传入参数nickname
//http://localhost:8080/hello?nickname=zhang
//将nickname传给name,required=false表示传不传递都可以
@GetMapping("/hello")
public String hello(@RequestParam(value="nickname",required=false) String name)
四、文件上传
表单的enctype="multipart/form-data"
application.properties配置上传文件大小,允许用户通过浏览器查看上传文件。
spring.servlet.multipart.max-file-size=10MB
spring.web.resources.static-locations=/upload/
package com.example.demo.Controller;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@RestController
public class FileController {
//private static final String UPLOADED_FOLDER=System.getProperty("user.dir")+"/uploaded";
@PostMapping("/upload")
//HttpServletRequest前端网络请求的对象
public String upload(String nickname, MultipartFile f, HttpServletRequest request) throws IOException{
System.out.println(nickname);
System.out.println("Size of file:"+f.getSize());
System.out.println(f.getContentType());//文件类型
System.out.println(f.getOriginalFilename());//文件原始名称
System.out.println(System.getProperty("user.dir"));
String path=request.getServletContext().getRealPath("/upload/");//动态获取web服务器的运行路径
System.out.println(path);
saveFile(f,path);
return "saved";
}
public void saveFile(MultipartFile f,String path) throws IOException{
File upDir=new File(path);
if(!upDir.exists()){
upDir.mkdir();
}
File file=new File(path+f.getOriginalFilename());
f.transferTo(file);
}
}
五、拦截器
前端请求先到达拦截器
prehandler方法->控制器方法->拦截器posthandle方法->aftercomplement方法。
六、HTTP状态码
1xx:通信传输协议级信息
2xx:成功
3xx:重定向,客户端必须执行一些其他操作才能完成其请求
4xx:客户端错误
5xx:服务器错误
七、restful
每个网址表示一种资源
@RestController
public class UserController{
@GetMapping("/user/{id}")
public String getUserById(@PathVariable int id){
return "getuserbyid";
}
@PostMapping("/user")
public String save(User user){
return "saveuser";
}
@PutMapping("/user")
public String update(User user){
return "updateuser";
}
@DeleteMapping("/user/{id}")
public String deleteUserById(@PathVariable int id){
return "deleteuserbyid";
}
}
八、Swagger
框架,自动生成完善的restful API文档,并根据后台代码自动更新,提供完整测试界面调试API
九、快捷键
alt+insert 快速添加get、set、tostring函数