web三层架构流程:先是前端传送一个请求给后端,然后controller层接受数据进行处理,传给service层进行逻辑处理再交给dao层,dao层访问数据库,数据库再返回数据给dao层,然后再传给service层处理,最后回到controller层响应数据给前端。
举个例子(前端要输入用户名和密码进行登录(首先要判断用户名和密码是否正确),此时需要传给后端一个请求,先是controller层接收请求,然后到service层,再到dao层,dao层访问数据库,数据库把保存的用户名和密码返还给dao层,dao层传给service层,service层里面是业务逻辑,将前端传入的数据和数据库中的数据进行比较,相同或不同都返回一个结果给controller层,controller层再将结果响应回前端)
**结果相同就登录成功,结果不同就提示用户名或密码出现错误**
请求
1.简单参数
参数名不一致时(postman中写的参数和自己定义的参数不同),要使用@RequestParam完成映射。
@RequestMapping("/simpleParam")
public String simpleParam(@RequestParam("username") String name , Integer age){
System.out.println(name+" : "+age);
return "OK";
}
2.实体参数
当参数比较多的时候,我们需要将参数封装到pojo对象中。
**pojo实体类就是按javabean类实体类定义就行,
**注意请求参数名与pojo的属性名要一致**
**复杂实体类其实就是一个实体类中定义的还有另一个实体类对象(相当于嵌套),用的时候直接用(类名.属性名)
3.数组参数
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby){
System.out.println(Arrays.toString(hobby));
return "OK";
}
4.集合参数
和数组差不多,需要注意的一点是需要用@RequestParam绑定参数关系
@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby){
System.out.println(hobby);
return "OK";
}
5.日期参数
需要用@DateTimeFormat注解,还要用其pattern属性来定义日期的格式
**注意定义的日期格式要和前段传入的一致
6.json参数
前后端交互时前端传的通常是JSON格式的数据,后端需要将其转成pojo格式,需要用到@RequestBody注解
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){
System.out.println(user);
return "OK";
}
7.路径参数
路径参数:通过请求URL直接传递参数,使用{…}来标识该路径参数,需要使用 @PathVariable 获取路径参数
@RequestMapping("/path/{id}")
public String pathParam(@PathVariable Integer id){
System.out.println(id);
return "OK";
}
@RequestMapping("/path/{id}/{name}")
public String pathParam2(@PathVariable Integer id, @PathVariable String name){
System.out.println(id+ " : " +name);
return "OK";
}
响应
我们响应回的数据都会以JSON的格式回到前端,原因是我们使用得@RestContorller注解,其底层包含了@ResponseBody注解的作用。
统一响应结果
//增删改 成功响应
public static Result success(){
return new Result(1,"success",null);
}
//查询 成功响应
public static Result success(Object data){
return new Result(1,"success",data);
}
//失败响应
public static Result error(String msg){
return new Result(0,msg,null);
分层解耦
- Controller:接收前端发送的请求,对请求进行处理,并响应数据
- Service:处理具体的业务逻辑
- Dao:负责数据的访问操作,包含数据的增、删、改、查
内聚:软件中各个功能模块内部的功能联系。
耦合:衡量软件中各个层/模块之间的依赖、关联的程度。
软件设计原则:高内聚低耦合。
我们希望一个程序中各模块联系程度越高越好,同时我们有希望他们可以相互独立,依赖程度越低越好,这样就算某一部分出现错误也不会影响太多其他的代码部分。