0


SpringMVC(一)

SpringMVC(一)

Spring MVC 是 Spring 提供的一个基于MVC设计模式的轻量级 Web 开发框架,本质上相当于****Servlet

三层架构

  • 表现层:负责请求处理和数据展示
  • 业务层:负责业务处理
  • 数据层:负责数据操作

MVC

MVC(Model View Controller),一种用于设计创建Web应用程序的开发模式

  • Model(模型):数据模型,用于数据处理,包括(service和dao)
  • View(视图):页面视图,用于展示数据- jsp- html
  • Controller(控制器):处理用户发送的请求,调用model完成数据处理,并对view视图进行响应- servlet

1. springmvc入门

  • 步骤1:创建模块,打包方式选择 jar,勾选 Spring Web 支持

  • 步骤2:编写控制器,注意位置要在扫描范围内
@Controller@RequestMapping("/user")publicclassUserController{/**
     * @return 表示要跳转的页面
     */@RequestMapping("/hello")//定义访问路径publicStringhello(){System.out.println("hello springmvc! ");return"/success.html";}}
  • 步骤3:在static目录中创建success.html页面

  • 步骤4:运行引导类,打开浏览器,输入如下地址访问控制器方法

1.1 定义映射路径

@RequestMapping 用来定义请求路径

  • 除了可以加在方法上以外,还可以同时加在类上
  • 位置:写在类上表示一级路径。如果类上有映射路径,写在方法上就表示二级路径。最终的方法路径一级路径+二级路径。

  • @RequestMapping注解可以定义如下属性:

1.2 通过jar包运行程序

  • SpringBoot程序默认打jar包,当然也可以打war包,官方推荐打jar包。SpringBoot程序jar包中内置了web服务器,可以直接运行jar包并访问程序。

  • jar包路径

  • 在cmd中:java -jar jar包的名称

1.3 修改虚拟目录和端口号

  • application.yml文件配置server:servlet:context-path: /springmvc #设置虚拟目录port:8080#设置端口号
  • application.properties文件配置文件# 设置虚拟目录server.servlet.context-path=/springmvc_01# 设置端口号server.port=8080

2. springmvc响应

2.1 响应普通字符串

如果Controller中方法不想进行页面跳转,需要响应数据可以使用:

  • @ResponseBody:表示该方法不进行页面跳转,将返回值通过响应体响应给客户端
@RequestMapping("/resp1")//定义访问路径@ResponseBodypublicStringhello(){return"你好";}
  • @ResponseBody注解还可以写在Controller类上,表示该类的所有方法都不进行页面跳转,而是响应数据
@Controller@ResponseBody@RequestMapping("/resp")//定义访问路径publicclassResponseController{
  • @RestController:写在类上,等价于@Controller+@ResponseBody注解的作用。
@RestController@RequestMapping("/resp")//定义访问路径publicclassResponseController{

2.2 响应json数据

Springmvc底层集成了jackson工具,能够自动将java对象转换成json响应给客户端

  • pojo@Data@NoArgsConstructor@AllArgsConstructorpublicclassUser{privateString name;privateInteger age;privateDate birthday;}
  • controller@RequestMapping("/res")@ResponseBodypublicUserresp2(){User user =newUser("张三",18,newDate());return user;}//页面响应 {"name":"张三","age":18,"birthday":"2022-06-12 22:18:55"}
  • @JsonFormat:日期格式化- 作用:格式化,pattern指定格式化模式,timezone指定日期时区。
@JsonFormat(pattern ="yyyy-MM-dd HH:mm:ss",timezone="Asia/Shanghai")
  • @JsonIgnore:忽略该属性,不转换到json中
  • @JsonInclude: 该属性值非空才会被转换到json中@JsonInclude(JsonInclude.Include.NON_NULL)

2.3 响应静态资源

静态资源放在如下目录,能够被 Spring Boot 所自动找到

不使用默认位置,SpringBoot是不能自动找到静态资源的。

3. springmvc请求

3.1 postman的使用

  • 安装Postman-win64-7.14.0-Setup.exe

  • Postman功能介绍:

3.2 接收普通类型参数

  • postman发送请求:

  • controller接收请求参数
@RequestMapping("/req0")publicStringreq0(String name,Integer age){
        log.info("name = {}", name);
        log.info("age = {}", age);return"req0接收请求参数成功...";}

注意:controller方法中的形参名要和请求参数名称一样才可以自动赋值

  • controller接收请求参数(形参名和请求参数名称不一样)

@RequestParam:写在参数位置,将指定名称的请求参数赋值给当前变量。

@RequestMapping("/req1")publicStringreq1(@RequestParam("username")String name,Integer age){...}

@RequestParam注解介绍:

3.3 接收POJO类型参数

  • postman发送请求:

请添加图片描述

  • controller接收请求参数

  • 注意:javabean属性的名称要和请求参数的名称一样
@RequestMapping("/req2")publicStringreq2(Person person){...}//封装普通表单参数(name=value&name=value&...)

3.4 接收JSON格式参数

  • postman发送请求:

  • controller接收请求参数
@RequestMapping("/req3")
public String req3(@RequestBody User user){...}  //将请求体中的json转换成java对象

@RequestBody:写在方法参数上:将请求体中的json数据转换成java对象,底层使用jackson转换。
使用@RequestBody 需要满足两个条件:①、有请求体。②、参数为json格式

3.5 接收日期类型参数

  • postman发送请求:

  • controller接收请求参数
@RequestMapping("/req4")publicStringreq4(Date birthday){
        log.info("birthday = {}", birthday);return"req4...";}
  • 注意:springmvc默认支持转换的日期格式是yyyy/MM/dd。如果发送的日期格式是yyyy-MM-dd,那么后台方法参数需要使用@DateTimeFormat注解指定格式化模式。
//接收日期格式的请求参数,封装成date对象@RequestMapping("/req4")publicStringreq4(@DateTimeFormat(pattern ="yyyy-MM-dd")Date birthday){
        log.info("birthday = {}", birthday);return"req4...";}
  • 如果封装到POJO中,需要在属性上加@DateTimeFormat注解
publicclassUser{privateString name;privateInteger age;@DateTimeFormat(pattern ="yyyy-MM-dd")privateDate birthday;}

3.6 接收请求头和Cookie

  • postman发送请求:

  • controller接收请求参数

@RequestMapping("/req5")publicStringreq5(@RequestHeader("user-agent")String userAgent,@CookieValue("username")String username){...}

3.7 Servlet原生API的使用

  • postman发送请求:

  • controller接收请求参数
@RequestMapping("/req6")publicStringreq6(HttpServletRequest request,HttpSession session){}

4. 总结

注解介绍

  • @RequestMapping:- 用法:写方法、类上。- 作用:写在方法上定义方法的访问路径,写在类上定义该类所有方法的一级路径。
  • @ResponseBody:- 用法:写方法、类上。- 作用:写在方法上表示该方法不进行页面跳转,响应数据。写在类上表示该类所有方法不进行页面跳转,响应数据
  • @RestContrller:- 用法:写类上。- 作用:等价于@Controller+@ResponseBody,将类交给spring管理,创建Bean对象。以及该类所有方法不进行页面跳转,响应数据
  • json转换相关注解:
  • @JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”,timezone = “Asia/Shanghai”)- 用法:一般写在成员变量、类上- 作用:表示在转换成json时格式化日期属性和设置时区。
  • @JsonIgnore- 用法:写在成员变量上- 作用:忽略该属性,不被转换到json中。
  • @JsonInclude- 用法:写在成员变量、类上- 作用:满足条件才转换到json中。
  • @RequestParam:- 用法:写在参数位置- @RequestMapping("/req")public String req(@RequestParam("username") String name,Integer age){...}- 作用:将指定名称的(普通类型)请求参数赋值给当前变量
  • @RequestBody:- 用法:写在方法参数上,使用@RequestBody需要满足两个条件:- 有请求体- 参数为json格式- @RequestMapping("/req3")publicStringreq3(@RequestBodyUser user){...}//将请求体中的json转换成java对象- 作用:接收JSON格式参数,将请求体中的json数据转换成java对象,底层使用jacakson转换。
  • @DateTimeFormat- 用法:- @RequestMapping("/req4")public String req4(@DateTimeFormat(pattern = "yyyy-MM-dd") Date birthday){...}- 作用:指定name=value格式参数中日期的格式

问题1:@ResponseBody和@RequestBody和@RequestParam的区别?

  • @ResponseBody:是响应体,表示方法返回值不是页面跳转,而是通过响应体响应数据
  • @RequestBody:是请求体,将请求体中的json数据转换成Java对象,底层使用jackson转换
  • @RequestParam:是请求参数,写在参数位置,将指定名称的请求参数赋值给当前变量

问题2:@DateTimeFormat和@JsonFormat的区别?

  • @DateTimeFormat:指定name=value格式参数中日期的格式 public String req4(@DateTimeFormat(pattern = “yyyy-MM-dd”) Date birthday){…}- 作用:指定name=value格式参数中日期的格式

问题1:@ResponseBody和@RequestBody和@RequestParam的区别?

  • @ResponseBody:是响应体,表示方法返回值不是页面跳转,而是通过响应体响应数据
  • @RequestBody:是请求体,将请求体中的json数据转换成Java对象,底层使用jackson转换
  • @RequestParam:是请求参数,写在参数位置,将指定名称的请求参数赋值给当前变量

问题2:@DateTimeFormat和@JsonFormat的区别?

  • @DateTimeFormat:指定name=value格式参数中日期的格式
  • @JsonFormat:表示转换成json时格式化日期属性个指定时区
标签: postman mvc java

本文转载自: https://blog.csdn.net/MRhan6/article/details/125251867
版权归原作者 Mr.han、 所有, 如有侵权,请联系我们删除。

“SpringMVC(一)”的评论:

还没有评论