web项目架构
项目架构
一般来说分为三层controller层、service层和dao层。作用分别是:
- Controller:相当于spring mvc中的处理器,负责接收前端的信息,并调用相应的service层功能
- Service层:核心业务层,会被Controller层的处理器调用,是前端请求的实际实现者
- DAO层:负责调用数据库
对于不同类型的项目,工程的结构会有所不同:
- 如果是单模块项目:一般在新建三个包,分别存放三层相关的文件
- 如果是多模块项目:则三层分别对应三个模块
Controller层
一个controller类必须是一个bean,一般用@RestController
或者@Controller ( + @ResponseBody )
注解。一般用前者,具体前者等于后两个注解之和。两者区别参见:@RestController和@Controller。
@RestController
public class HelloController {
}
处理器映射器与处理器
不同的前端请求对应不同的处理方法,web程序是根据请求的方法和path来将不同的请求映射到不同的处理器上的。这一过程通过@RequestMapping
注解实现的:
@RequestMapping(method = RequestMethod.POST, path = "/anno/insert")
public ResponseEntity insertHelloer(@RequestBody Hello hello) {
return ResponseEntity.ok(testService.insertHelloer(hello));
}
这个insertHelloer方法其实就是一个处理器,它会处理满足以下条件的请求
- 请求方法为POST
- 请求URL能匹配
http://服务器地址:端口号/anno/insert
这个格式(后面可以加东西,前面匹配就行),即path为/anno/insert
的合法请求。
每个controller类中必定有处理器,这些处理器其实就是一个个被@RequestMapping
标注的方法。
@RequestMapping
还可以注解controller类。如果某个controller下面的所有处理器都有一个统一的path,则可以把这个path写在controller类上面:
@RestController
@RequestMapping("/hello")
public class HelloController {
}
接收前端参数
controller需要处理请求,当然就需要获取前端传递过来的数据。实现前后端数据交互的注解主要有三个: @RequestParam、@PathVariable、@RequestBody
。其中:
-
@RequestParam、@PathVariable
用来接收简单类型的参数,如基本数据类型、String等 -
@RequestBody
用来接收复杂的数据类型,一般是自定义类
三者的详细介绍参考@RequestParam、@PathVariable、@RequestBody。