SpringMvc
1.概述:
SpringMVC就是基于MVC设计模式来实现的。
我们的POJO就是Model层,我们的JSP就是视图层,我们的Controller就是控制层。
MVC(Model模型、View视图、Control控制层),将软件进行分层达到松耦合的效果。
2.工作原理
过程描述:
- 用户发送请求至前端控制器(DispatcherServlet)。
- 前端控制器(DispatcherServlet)收到请求调用处理器映射器(HandlerMapping)。
- 处理器映射器找到具体的处理器(可以根据xml配置,注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给前端控制器(DispatcherServlet)。
- 前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)处理器适配器
- 处理器适配器(HandlerAdapter)经过适配调用具体的处理器(Controller,也叫后端控制器)。
- 后端控制器(Controller)执行完成返回ModelAndView。
- 处理器适配器将后端控制器执行结果ModelAndView返回前端控制器(DispatcherServlet)。
- 前端控制器将ModelAndView传给视图解析器(ViewReslover)。
- 视图解析器解析后返回具体View.。
- 前端控制器根据View进行渲染识图(即将模型数据填充至视图中)。
- 前端控制器响应用户。
3.Springmvc框架常用注解
1、@Controller(控制器)
用于标记在一个类上,使用它标记的类就是一个Spring Controller对象。分发处理器将会扫描该注解的方法,并检测该方法是否使用了@RequestMapping注解。
一般用@Controller注解,表示是控制层,不能用别的注解替代。
2、@RequestMapping(中文:路径)
该注解是一个用来处理地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法,都是以该地址作为父路径。
3、@Resource(中文:资源)和@Autowried
都是做bean注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,都需要导入,但是spring支持该注解的注入。
共同点:两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。
不同点:@Autowried是spring提供的注解、@Autowried注解是按照类型(byType) 装配依赖对象,默认情况下他要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。
@Resource默认按照byName自动注入,@Resource有两个重要的属性:name和type,而spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用bytype自动注入策略。
4、@PathVariable (路径变量)
标识接收单个参数
//优化GET传参的restful方式
//GET方式访问: http://localhost:8080/car/insert?id=1&name=张三&age=18
//restful方式访问: http://localhost:8080/car/insert/1/张三/18
@RequestMapping("insert/{x}/{y}/{z}")
//restful配合@PathVariable注解一起用,使用{资源名}获取传过来的值
public void insert(@PathVariable int x,
@PathVariable String y,
@PathVariable int z) {
System.out.println("数据插入成功,id="+x+",name="+y+",age="+z);
}
5、奇奇怪怪的注解
@ResponseBody 返回对象利用jackson工具类转换为json字符串
@RequestParam 参数名和请求参数名称不同时使用,可以设置默认值