SpringMVC概述
Spring Web MVC 是一种基于Java的实现Web MVC设计模式的请求驱动类型的轻量级Web框架。
MVC的设计模式
M:model 模型
业务模型 数据模型 实体,业务代码,数据代码
V: View 视图
用于渲染数据,显示给客户
html jsp framemarker
C:Controller 控制器
主要用于接受参数,处理请求,返回结果
servlet controller
控制器主要作用:
- 接受参数
- 请求处理:调用模型
- 结果返回。大多为josn格式
SpringMVC工作流程
基于XML方式配置SpringMVC
操作步骤
导入Spring、SpringMVC依赖
<!-- 引入spring的核心依赖-->
<!--Maven会自动添加当前jar依赖的其他jar-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<!-- 引入spring-mvc的依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>...
在web.xml文件中配置前端控制器
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 加载spring的核心配置文件-->
<param-value>classpath:spring_mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- /表示所有请求-->
<url-pattern>/</url-pattern>
</servlet-mapping>
...
编写控制器
一个加上注解的普通Java类
@Controller
@RequestMapping(value = "/helloController")
//控制器
public class HelloController {
@RequestMapping("/sayHello")
public void sayHello(){
System.out.println("say hello");
}
@RequestMapping("/sayHi")
public void sayHi(){
System.out.println("say hi");
}
}
...
配置spring_mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- spring的功能 开启注解扫描-->
<context:component-scan base-package="com.gxa.controller"></context:component-scan>
<!-- 开启spring mvc的注解 -->
<mvc:annotation-driven></mvc:annotation-driven>
</beans>
...
部署项目
将项目部署在Tomcat上
测试效果
输入路径:localhost/helloContorlle/sayHleeo
参数处理
基本数据类型:
可以直接传参
public void sayHello(int id,@RequestParam("test") String name){
System.out.println(id);
System.out.println(name);
System.out.println("say hello");
}...
@RequestParam("test") 注解用于传递的参数名和方法的参数名不一致时
2、dto对象:
如果参数是一堆,会封装在对象中
@RequestMapping("/add")
// 将前端传过来的参数自动映射到实体中
//如果前端的是json格式对象 @RequestBody
public void add(CompanyDTO companyDTO){
System.out.println("添加方法");
System.out.println(companyDTO);
}
...
要求:传过来的参数名与实体中的属性名一致,才可以自动映射
resulful风格
一杠一值
简化了请求参数
对比:
get请求:/请求地址?id=1&name=admin
resultful请求:/请求路径/1/admin
在RequestMapping("/请求的地址/{id}/{name}")
@Controller
@RequestMapping("/restfulController")
public class RestfulController {
@RequestMapping("/test/{id}/{name}")
public void test(@PathVariable("id") int id,@PathVariable("name") String name){
System.out.println("id:"+id);
System.out.println("name:"+name);
}
}
...
示例:
http://localhost/restfulController/test/10/zhangsan
id:10
name:zhangsan
日期格式:将前端传过来的参数(字符串)转换为日期对象
@DateTimeFormat
@DateTimeFormat 将前端传过来的参数(字符串)转换为日期对象
//将字符串转换为日期格式数据
@DateTimeFormat(pattern = "yyyy-MM-dd")...
@JsonFormat
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss",timezone = "GMT+8")
//返回值中要将日期对象转换为字符串...
扩展:Lombok插件
简写实体
对比:
以前的实体:需要自己添加setter,getter,tostring等方法
使用Lombok:只要加上@Data注解 就可以自动完成以上操作
只需要在pom.xml中添加依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
</dependency>...
结果的返回
前后端分离后,一般返回JSON格式数据
步骤:
引入依赖
<!-- 引入json的依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>...
使用@ResponseBody //@ResponseBody 将结果转换为json格式
//查询所有的公司列表
@RequestMapping("/list")
@ResponseBody //@ResponseBody 将结果转换为json格式
public List<Company> showAllCompanies(){
//返回的是一个集合 要把这个集合转换为json的数据格式
List<Company> companies = new ArrayList<>();
Company company1 = new Company();
company1.setId(1);
company1.setName("国信安");
company1.setLocation("云华路");
company1.setBuildDate("2009-10-01");
Company company2 = new Company();
company2.setId(2);
company2.setName("华为");
company2.setLocation("郫县");
company2.setBuildDate("2000-10-01");
companies.add(company1);
companies.add(company2);
return companies;
}
...
{
"code":0,
"msg":"查询成功",
"count":100,
"data":[
[{"id":1,"name":"国信安","location":"云华路","buildDate":"2009-10-01"}, {"id":2,"name":"华为","location":"郫县","buildDate":"2000-10-01"}]
]
}...
可以自己封装结果对象
package com.gxa.util;
import lombok.Data;
import java.util.List;
@Data
public class ResutData {
private int code;
private String msg;
private int count;
private List data;
public static ResutData success(String msg,int count,List data){
ResutData resutData = new ResutData();
resutData.code = 0;
resutData.msg = msg;
resutData.count = count;
resutData.data = data;
return resutData;
}
public static ResutData error(String msg){
ResutData resutData = new ResutData();
resutData.code = 1;
resutData.msg = msg;
return resutData;
}
}
...
本文共 614 个字数,平均阅读时长 ≈ 2分钟
评论 (0)