SpringMVC

MVC(Model,Controller,View)

Spring实现了MVC
传统的MVC
SpringMVC_第1张图片
现在的Spring MVC更适合称之为Spring Web(前后端分离)

用法

请求方法


@RestController=@ResponseBody+@Controller

获取参数

普通传参

SpringMVC_第2张图片
直接写就可以
会自己转换数据类型, 要是类型不匹配会错误状态码400
要是不用包装类,传了空值,会错误状态码500

使用对象传参(解决耦合高)

对象:
SpringMVC_第3张图片
用法
SpringMVC_第4张图片

表单传递

这是前端传参的方法, 与接收参数的方式无关

后端参数重命名

将前端传来的n重命名为name
SpringMVC_第5张图片
@RequestParam注解默认是必传参数, 可以修改成非必传参数
SpringMVC_第6张图片

接收json格式参数

使用@RequestBody
(如果发送的参数对不上, 会返回null, 不会报错)

@RequestMapping("/get4")
public String get4(@RequestBody Student student){
    log.info(student.toString());
    return student.toString();
}

发送json
SpringMVC_第7张图片
得到
SpringMVC_第8张图片

从URL中获取参数

有的网址会把有点参数单独提出来当做一个请求, 而不是作为一个参数, 例如:
https://www.meituan.com/meishi/291334/
后面的数字代表一个商品id, 可以用下面的方法实现:
SpringMVC_第9张图片
使用/{参数名}@PathVariable
这样访问的时候
image.png
就会成功
SpringMVC_第10张图片
另外还可以用多层, 并且可以用别名
这个注解默认是**必传参数**
SpringMVC_第11张图片

上传文件

参数使用@RequestPart注解, 并且参数类型是MultipartFile

@RequestMapping("/getFile")
public String getFile(@RequestPart MultipartFile file) throws IOException {
    log.info(file.getOriginalFilename());   //显示原始名称
    file.transferTo(new File("D:/Projects/Temp/"+file.getOriginalFilename()));
    return "success";
}

参数名要对上
SpringMVC_第12张图片
如果提示文件过大, 更改配置文件

spring:
  servlet:
    multipart:
      max-file-size: 20MB  			# 设置单个文件最大大小为20MB
      max-request-size: 200MB  	# 设置多个文件大小为200MB

获取cookie

@RequestMapping("/getCookie")
public String getCookie(@CookieValue String cookie){
    return "cookie="+cookie;
}

该注解默认是参数不为空,
在浏览器F12界面手动添加一个cookie进行访问
SpringMVC_第13张图片
可以获取到结果
image.png
也可以设置参数可为空@CookieValue(required = false)
image.png
image.png
cookie是存在本地的, 可以造假, 所以不安全

获取Session

获取session

@RequestMapping("/getSession")
public String getSession(@SessionAttribute(required = false) String session){
    return "session="+session;
}

该注解默认是参数不为空,也可以设置参数可为空
@SessionAttribute(required = false)
image.png
SpringMVC_第14张图片

设置session

@RequestMapping("/setSession")
public String setSession(HttpSession session){
    session.setAttribute("session1","session2");
    return "success";
}

获取HTTP头信息

SpringMVC_第15张图片
User-Agent为例

@RequestMapping("/getHead")
public String getHead(@RequestHeader("User-Agent") String userAgent){
    return "userAgent="+userAgent;
}

返回数据

返回数据/页面


返回JSON对象

@RequestMapping("/getJson")
public Map<String,String> getJson(){
    Map<String,String> map = new HashMap<>();
    map.put("k1","v1");
    map.put("k2","v2");
    map.put("k3","v3");
    map.put("k4","v4");
    map.put("k5","v5");
    return map;
}

会自动把Content-Type改成application/json
SpringMVC_第16张图片

请求转发/重定向

请求转发

@RequestMapping("/forward")
public String forward(){
    return "forward:/index.html";
}

在当前页面显示目标页面内容, 服务器负责数据转发
SpringMVC_第17张图片

请求重定向

直接跳转到目标页面, 服务器不再管

//请求重定向
@RequestMapping("/redirect")
public String redirect(){
    return "redirect:/index.html";
}

SpringMVC_第18张图片

注意

请求转发, 如果资源和转发的页面不在⼀个⽬录下,会导致外部资源不可访问.
如果请求转发的页面依赖了被转发页面的其他资源, 那么会找不到资源, 因为服务器会在当前页面目录找, 而不会在被转发的页面目录找

你可能感兴趣的:(JavaEE,spring,boot,后端,java)