图片alt
DispatcherServlet是SpringMVC中的前端控制器(front controller),负责接收request并将request转发给对应的处理组件
HanlerMapping是SpringMVC中完成url到Controller映射的组件。DispatcherServlet接收request,然后从HandlerMapping查找处理request的controller.
Cntroller处理request,并返回ModelAndView对象,Controller是SpringMVC中负责处理request的组件(类似于struts2中的Action),ModelAndView是封装结果视图的组件。
视图解析器解析ModelAndView对象并返回对应的视图给客户端。https://blog.csdn.net/win7system/article/details/90674757
DispatcherServlet#doDispatch
RequestMappingHandlerAdapter#invokeHandlerMethod
DispatcherServlet.java protected void initStrategies(ApplicationContext context) { initMultipartResolver(context); ..... } private void initMultipartResolver(ApplicationContext context) { try { //从Spring的上下文中获取id为multipartResolver的bean作为它的MutipartResolver this.multipartResolver = context.getBean(`multipartResolver`, MultipartResolver.class); if (logger.isTraceEnabled()) { logger.trace("Detected " + this.multipartResolver); } else if (logger.isDebugEnabled()) { logger.debug("Detected " + this.multipartResolver.getClass().getSimpleName()); } } catch (NoSuchBeanDefinitionException ex) { // Default is no multipart resolver. this.multipartResolver = null; if (logger.isTraceEnabled()) { logger.trace("No MultipartResolver '" + MULTIPART_RESOLVER_BEAN_NAME + "' declared"); } } }
@RequestPart
@RequestPart(required = false)
@PostMapping(value = "/testUpload") public Attachment testUpload(String name, @RequestPart(required = false)MultipartFile file2){ if(file2!=null){ return attachmentService.upload(file2); } return new Attachment(); }
https://github.com/wangyang1749/shope_base_servlert/blob/master/src/com/shop/servlet/MultipartRequestWrapper.java
<form action="http://localhost:8080/api/template/upload" method="post" enctype="multipart/form-data"> <p>选择文件:<input type="file" name="file"></p> <p>选择文件:<input type="file" name="file"></p> <p><input type="submit" value="提交"></p> </form>
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @Anonymous public Attachment upload(@RequestPart("file") MultipartFile[] file){ return null; }
参考:https://blog.csdn.net/suifeng3051/article/details/51659731https://blog.csdn.net/suifeng3051/article/details/51659731