springmvc小结

web.xml:(extends AbstractAnnotationConfigDispatcherServletInitializer)
1、注册DispatcherServlet(通过init-param声明springmvc的配置文件的名称和位置)
2、配置编码过滤器CharacterEncodingFilter
3、请求转换过滤器(支持delete和put请求)HiddenHttpMethodFilter

springmvc.xml: implements WebMvcConfigurer
1、开启包扫描 @ComponentScan(“com.atguigu.mvc.controller”)
2、配置Thymeleaf视图解析器(本质上就是注册一个bean) @Bean
3、开启静态资源处理器(处理静态资源)mvc:default-servlet-handler/ configureDefaultServletHandling()
4、视图控制器(代替controller中的方法)<mvc:view-controller path=“/testView” view-name=“success”></mvc:view-controller> addViewControllers()
注意:当设置了view-controller时,控制器中的请求映射将全部失效,所以需要开启mvc的注解驱动
5、开启mvc注解驱动mvc:annotation-driven @EnableWebMvc
6、文件解析器(将文件转换为MultipartFile对象) CommonsMultipartResolver()
7、声明拦截器—控制器方法执行前后 addInterceptors()
8、异常解析器 SimpleMappingExceptionResolver configureHandlerExceptionResolvers()

ant风格:
?:表示任意的单个字符
:表示任意的0个或多个字符
*
:表示任意的一层或多层目录
注意:在使用**时,只能使用/**/xxx的方式

restful风格:
GET 用来获取资源,POST 用来新建资源,PUT 用来更新资源,DELETE 用来删除资源

springmvc获取请求参数:
1、servletAPI获取
2、控制器方法的形参----DispatcherServlet实现的
3、@requestParam
4、@RequestHeader
5、@CookieValue
6、形参上是对象-------DispatcherServlet实现的

域对象共享数据
1、servletAPI
2、ModelAndView设置共享数据实现页面跳转
3、Model设置共享数据
4、map设置共享数据
5、ModelMap设置共享数据
像session和application(servletContext)中共享数据通过servletapi最方便

springmvc的视图:
1、当控制器方法返回的名称没有任何前缀----ThymeleafView
2、当控制器方法返回的名称前缀是"forward:“----InternalResourceView(SpringMVC中默认的转发视图)
3、当控制器方法返回的名称前缀是"redirect:”----RedirectView

HttpMessageConverter报文信息转换器
1、作用:将请求报文转换成java对象,将java对象转换成响应报文
2、2个注解和2个类型:
@RequestBody:获取请求体并赋值给方法的形参上
RequestEntity:封装请求报文的类型(跟javaweb中的request差不多)
@ResponseBody:将方法的返回值直接作为响应报文的响应体响应到浏览器。
注:浏览器响应体只认识string字符串。
所以当我们返回值类型是对象的时候,
我们需要添加json依赖和对应的HttpMessageConverter将其转换成json-string给浏览器
ResponseEntity:响应报文封装类型,可以直接将这个类返回,这个类型的返回值就是相应到浏览器的响应报文
通过ResponseEntity实现文件下载:
@RequestMapping(“/testDown”)
public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException {
//获取ServletContext对象
ServletContext servletContext = session.getServletContext();
//获取服务器中文件的真实路径
String realPath = servletContext.getRealPath(“/static/img/1.jpg”);
//创建输入流
InputStream is = new FileInputStream(realPath);
//创建字节数组
byte[] bytes = new byte[is.available()];
//将流读到字节数组中
is.read(bytes);
//创建HttpHeaders对象设置响应头信息
MultiValueMap<String, String> headers = new HttpHeaders();
//设置要下载方式以及下载文件的名字
headers.add(“Content-Disposition”, “attachment;filename=1.jpg”);
//设置响应状态码
HttpStatus statusCode = HttpStatus.OK;
//创建ResponseEntity对象
ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, headers, statusCode);
//关闭输入流
is.close();
return responseEntity;
}
文件上传:请求方式必须是post,添加属性enctype=“multipart/form-data”
SpringMVC中将上传的文件封装到MultipartFile对象中(需要在springmvc.xml添加文件解析器)
调用transferTo方法(本质上就是io流)

拦截器:
preHandle:控制器方法执行之前执行preHandle()
postHandle:控制器方法执行之后执行postHandle()
afterComplation:渲染视图完毕之后执行afterComplation()
拦截器链执行顺序:a b c d 当c返回false时
执行顺序:a b c 的preHandle---->b c的afterComplation (postHandle都不执行)

异常处理器:(HandlerExceptionResolver接口,实现类DefaultHandlerExceptionResolver和SimpleMappingExceptionResolver)
@ControllerAdvice将当前类标识为异常处理的组件
@ExceptionHandler用于设置所标识方法处理的异常

springmvc的执行流程:
1、用户向服务器发送请求,被前端控制器DispatcherServlet的doDispatch()捕获
2、DispatcherServlet的doDispatch获取对应的URI,判断是否有对应controller方法
不存在:是否配置了默认servlet处理器default-servlet-handler。没有:404 有:判断是否有对应的静态资源 没有404
存在:执行下面步骤
3、HandlerMapping获得该Handler配置的所有相关的对象
4、DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter(处理器适配器:照顾要就是调用controller的方法的)
5、获得HandlerAdapter,此时将开始执行拦截器的preHandler(…)【正向】
6、对参数进行赋值,执行controller方法。此过程中会使用到HttpMessageConveter,将请求参数变成一个对象,数据转换,数据格式化,数据验证(验证结果存储到BindingResult或Error中)
7、controller方法执行完成后,会返回一个ModelAndView
8、执行拦截器的postHandle(…)方法【逆向】
9、根据ModelAndView判断是否有异常.有异常执行HandlerExceptionResolver
10、执行拦截器的afterCompletion(…)方法【逆向】
11、渲染结果返回给客户端

常用注解:
@requestMapping
@PathVariable
@RequestParam
@RequestHeader
@CookieValue
@restController

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值