第五章 访问数据库
1.配置数据源
在applicaiton.properties中
spring.datasource.url=jdbc:mysql://localhost:3306/chapter5
第九章 springmvc
1.总体流程
http请求发送给控制器,控制器与业务层交互,业务层使用noSQL缓存,业务层与数据访问层交互,数据访问层和关系型数据库交互,将结果返回给控制器,控制器相应请求,返回视图。
2.细节流程
HTTP请求被DispatcherServlet接受,DispatcherServlet调用HandlerMapping,定位控制器的响应方法,找到方法后,然后调用HandleExecutionChain处理器执行链,
其中包含处理器和拦截器,处理器Handler是控制器的包装,然后DispatcherServlet使用HandlerAdapter运行HandlerExecutionChain,Handler处理过程中先通过模型层获得模型,然后放入数据,最后返回ModelAndView,最后去ViewResolver去定位视图资源,View将数据模型渲染展示。
3.通过application定制ViewResolver,ViewResolver只用来解析逻辑视图
- spring.mvc.view.prefix=/WEB——INF/jsp
- spring.mvc.view.suffix=.jsp
返回视图的前缀和后缀,返回“user/details",那么就会找到"/WEB-INF/jsp/user/details.jsp"。
4.@ResponseBody将数据转换为JSON数据集
5.控制器获取前端传入的数据
(1)无注解获取参数
要求控制器参数名和http请求的参数名一致,并且参数允许为空。
(2)使用@RequestParam获取参数
@GetMapping
public String requestParamTest(
@RequestParam(“int_val”)Integer intVal,
@RequestParam(“long_val”)long longVal,
@RequestParam(value=“str_val”,required=false)String stringVal){}
str对应的参数允许为空。
6.传递数组
springmvc支持用逗号分割的数组参数作为url参数自动匹配控制器参数
http://localhost:8080/my/requestArray?intArr=1,2,3&longArr=4,5,6&strArr=str1,str2,str3
rerquestArr(int[] intArr,long[] longArr,String[]stringArr).
7.请求体中传递JSON,使用@RequestBody注解获得JSON参数
要求JSON请求体中的属性名称和pojo对象的属性名称一致。
8.通过URL传递参数
REST风格中,通常使用URL传递参数
@GetMapping(“/{id}”)
public User get(@pathVariable(“id”) Long id){};
9.获取格式化参数
@DataTimeformat(iso=ISO.DATE) Date Date,
@NumberFormat(pattern=“#,###.##”)Double number.
10.自定义参数转换规则
HTTP的请求包含在请求头,请求体和URL中,服务器中还包括上下文环境和Session,这里的消息转换是指请求体的转换。
如果是HTTP请求体参数@RequestBody,它就会调用HttpMessageConverter接口,里面有一个canRead()如果返回为true则读入。
11.WebDataBinder机制
WebDatabinder机制是解析HTTP请求上下文,然后在控制器调用之前转换参数并且提供验证的功能,为调用转换器作准备。
处理器会从HTTP请求中读取数据,然后通过三种接口来进行各类型的参数转换,这三个接口是Converrter,Formatter,GenericConverter,在springmvc
中对这三个接口都实现了注册机机制,在springmvc中已经注册了许多转换器,这样就可以实现大部分的请求体的类型转换了。当我们需要自定义的转换规则时候,就需要注册自己的转换器。
Converter是一个普通的转换器,Formatter是格式转换器,最后GenericConverter转换器则将HTTP参数转换为数组。
只需要写转换器,会有自动注册机制自动注册自定义的转换器。
11.一对一转换器(Converter)
12.GenericConverterr集合和数组转换器
13.通过Validator来进行数据验证
14.数据模型
如果在控制器的方法参数中使用ModelAndView,Model,ModeMap,springmvc会自动创建数据模型对象。
15.视图和视图解析器
视图是渲染数据模型展示给用户的组建,分为逻辑视图和非逻辑视图,逻辑视图是需要视图解析器进行进一步定位的。
除了JSON和JSP视图外,还有其他视图,Excel,PDF等,虽然视图具有多样性,但都是实现了View接口。
16.HandlerrExecutionChain中的拦截器
实现HandlerInterceptor接口
流程:preHandle方法,处理器,postHandle方法,视图处理,afterCompletion方法。
拦截器需要注册:实现WebMvcConfigurer接口,重写其中的addInterceptors方法
17.@ResponseBody
当使用这个标注后,处理器会去轮询HttpMessageConverter接口的实现类。因为MappingJackson2HttpMessageConverter这个实现类已经被注册了,那么就通过这个处理器将其转换为JSON。
18.重定向
重定向就是控制器将它接收到的请求转发给其他控制器。
使用:return “redirect:/user/show?id=”+user.getId();
重定向传递信息:使用RedirectAttributes
public String redirect(String userName,RedirectAttributes rs){
ra.addFlashAttributes(“user”,user);
return “redirect:/user/showUser”;}
19.HttpSession
@SessionAttributes用于类注解,会将Model中的属性保存到Session。
@SessionAttribute用于参数,从Session中取出数据,填充到控制器方法参数。
@SessionAttributes(name={“user”} ,typy=Long.class)会将名为user的数据和Long类型的数据保存到session
public String test(@SessionAttribute(“id”) Long id,Model model)
{model.addAttributes(“user”,user);
20.Http请求头参数获取
@RequestHeader(“id”)
第11章:rest风格
1.put需要将资源的所有属性全部提交,而patch只需要提交部分资源。
2.URI例子
GET /users/{userName}/{note}
POST /user/{userName}/{sex}/{note}
POST通常使用请求体提交
3.使用@RestController,将控制器的返回对象转换为JSON。
4.处理HTTP状态码,异常和响应头
@ResponseStatus(HttpStatus.CREATED)
斯塔