目录
什么是Spring MVC
Spring Web MVC是基于Servlet API构建的原始WEB框架,从一开始就包含在Spring 框架中,它的正式名称“Spring Web MVC”来自其源模块的名称,但他通常被称为Spring MVC.
从上述定义可以得出两个信息:
(1)Spring MVC. 是一个基于Web的框架
(2)Spring MVC是基于Servlet API 构建的
MVC定义
MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构模式,它把软件系统分
为模型、视图和控制器三个基本部分
MVC 和Spring MVC的关系
MVC是设计思想
Spring MVC是具体的实现框架
Spring MVC是基于MVC设计模式和Servlet API实现的Web项目,同时Spring MVC又是Spring 框架中的WEB模块,它随着Spring的诞生而存在的一个框架。
为什么要学Spring MVC
在创建 Spring Boot 项⽬时,我们勾选的 Spring Web 框架其实就是 Spring MVC 框架。
实现用户和程序的映射
在浏览器输入URL地址之后,能够在程序中匹配到相应的方法。
@RequestMapping(“/***”)
idea展开文件夹的方式
@Controller
@RequestMapping("/user")//类上面的RequestMapping可以省略
@ResponseBody //作用:返回一个非静态页面的数据
public class UserController {
@RequestMapping("/sayhi")
public String sayHi(){
return "你好,world";
}
}
@ RequestMapping既能修饰类(可选)也可修饰方法
默认@RequestMapping既支持post请求方式,也支持get请求方式
@RequestMapping参数扩展(只支持某种类型的请求方式,比如post类型的请求方式)
@RequestMapping(method = RequestMethod.POST, value="/sayhi2")
public String sayHi2(){
return "hello world";
}
@PostMapping(“/***”)
//只支持post类型的访问方式
@PostMapping("/sayhi3")
public String sayHi3(){
return "你好,world3";
}
@GetMapping(“/***”)
@GetMapping("/sayhi4")
public String sayHi4(){
return "你好,world4";
}
获取用户请求参数
获取单个参数
@RequestMapping("/getuserbyid")
public UserInfo getUserById(Integer id){
// 不查数据库,伪代码,返回用户对象
UserInfo userInfo=new UserInfo();
userInfo.setId(id);
userInfo.setUsername("张三");
userInfo.setAge(18);
return userInfo;
}
@Data
public class UserInfo {
private int id;
private String username;
private String password;
private int age;
}
获取多个参数
@RequestMapping("/login")
public String login(String username,String password){
return "用户名:"+username + " | 密码:"+password;
}
获取对象
@RequestMapping("/reg")
public String reg(UserInfo userInfo){
return "用户信息:" + userInfo;
}
扩展功能:参数重命名
使用@RequestParam
前端传来的是name,但是后端是username,此时就可以使用@RequestParam进行重命名。
@RequestMapping("/login2")
public String login2(@RequestParam("name") String username,String password){
return "用户名:"+username + " | 密码:"+password;
}
@RequestParam注意事项:
如果在参数中添加@RequestParam注解,那么前端一定要传递参数,否则就会报错,如果想解决此问题,可以给@RequestParam里面添加required = false
@RequestMapping("/login3")
public String login3(@RequestParam(value = "name",required = false) String username,String password){
return "用户名:"+username + " | 密码:"+password;
}
获取URL中的参数
从URL地址中获取参数(不是从URL地址中的参数部分获取参数)
@RequestMapping("/hero/{id}/{name}")
public String getHeroInfo(@PathVariable Integer id,@PathVariable String name){
return "ID:"+id +"| Name:"+name;
}
上传文件
扩展功能:不同运行平台的配置文件设置
(1)新建不同平台的配置文件
(2)在主配置文件中设置运行环境的配置文件
//从配置文件中读取图片保存的路径
@Value("${img.path}")
private String imgpath;
@RequestMapping("/upimg")
public boolean upImg(Integer uid, @RequestPart("img")MultipartFile file){
boolean result=false;
//1.目录=imgpath
//2.图片名称(图片名不能重复)
// 3。获取原上传图片的格式
String fileName= file.getOriginalFilename();//得到原图片的名称(xxx.png)
fileName=fileName.substring(fileName.lastIndexOf("."));//得到图片后缀
fileName= UUID.randomUUID().toString()+fileName;
//保存图片到本地目录
try {
file.transferTo(new File(imgpath+fileName));
result=true;
} catch (IOException e) {
log.error("上唇啊图片失败:"+e.getMessage());
}
return result;
}
获取cookie
(1)servlet获取cookie的方法
@RequestMapping("/cookie")
public void getCookie(HttpServletRequest request){
Cookie[] cookies=request.getCookies();
for(Cookie item:cookies) {
log.info("Cookie Name:" + item.getName() + "| Cookie Value:"+item.getValue());
}
}
(2)使用@CookieValue注解实现Cookie的读取
@RequestMapping("/cookie2")
public String getCookie2(@CookieValue("bbb") String cookie){
return "Cookie Value"+ cookie;
}
获取header
(1)servlet获取header
@RequestMapping("/getua")
public String getHead(HttpServletRequest request){
return "header:"+request.getHeader("User-Agent");
}
(2)@RequestHeader
@RequestMapping("/getua2")
public String getHead2(@RequestHeader("User-Agent") String userAgent){
return "header:"+ userAgent;
}
存储和获取session
存储session
@RequestMapping("/setsess")
public boolean setSession(HttpServletRequest request){
boolean result=false;
//1.得到httpsession对象
HttpSession session=request.getSession(true);//true表示如果没有会话,那么创建一个
//2.使用setAtt设置值
session.setAttribute("userinfo","userinfo");
result=true;
return result;
}
获取session
(1)使用servlet模式
@RequestMapping("/getsess")
public String getSession(HttpServletRequest request){
String result=null;
//1.得到HttpSession对象
HttpSession session=request.getSession(false);//false 如果有会话,使用会话,如果没有不会新创建会话
//2. getAtt得到session信息
if(session != null && session.getAttribute("userinfo") != null) {
result =(String) session.getAttribute("userinfo");
}
return result;
}
(2)使用注解
@RequestMapping("/getsess2")
public String getSession2(@SessionAttribute(value = "userinfo",required = false) String userinfo){
return "会话"+userinfo;
}