1. 说一下 spring mvc 运行流程?
(1)用户发送请求至前端控制器DispatcherServlet;
(2) DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
(3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
(4)DispatcherServlet 调用 HandlerAdapter处理器适配器;
(5)HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
(6)Handler执行完成返回ModelAndView;
(7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
(8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
(9)ViewResolver解析后返回具体View;
(10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
(11)DispatcherServlet响应用户。
2. spring mvc 有哪些组件?
- 前置控制器 DispatcherServlet。
- 映射控制器 HandlerMapping。
- 处理器 Controller。
- 模型和视图 ModelAndView。
- 视图解析器 ViewResolver。
3. @RequestMapping 的作用是什么?
将 http 请求映射到相应的类/方法上。
4. @Autowired 的作用是什么?
@Autowired 它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作,通过@Autowired 的使用来消除 set/get 方法。
5. REST风格
- REST: Representational State Transfer : 表现层状态转化
- 它是一种规范 ,浏览网页方式的规范
- put 修改 @PutMapping
- get 查询 @GetMapping
- post 新增 @PostMapping
- delete 删除@DeleteMapping
- form表间只支持get和post请求,如果想支持更多的请求,要加上一个spring过滤器
<!-- 支持更多请求方式-->
<filter>
<filter-name>mf</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>mf</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
6. 前端控制器中的 /和/*的区别
/拦截所有,但不拦带后辍名的,如.jsp,.jpg,.js,.css
/*拦截所 controller到jsp就无法执行
7. 如何处理静态资源
- servlet处理静态资源
<mvc:default-servlet-handler/>
- springmvc处理静态资源
<mvc:resources location="/WEB-INF/js/" mapping="/js/**" /> <mvc:resources location="/WEB-INF/css/" mapping="/css/**" /> <mvc:resources location="/WEB-INF/img/" mapping="/img/**" />
- 如何处理日期格式
- 输出格式
@DateTimeFormat(pattern = "yyyy-MM-dd")
- 输入格式
@JsonFormat(pattern ="yyy-MM-dd" )
9. 处理ajax
- 输出格式
- fastjson配置
- 返回对象的类上@ResponseBody
- 输入格式
- js中是json对象,在Controller中配置类的对象
- js中是json对象的字符串,在Controller中配置类的对象前要加上@RequestBody
10. 文件上传
- 文件上传
- method只能是post
- enctype只能是multipart/form-data
- 在pom.xml加入servlet依赖和common-fileupload
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency>
- springmvc中就需要专门的MutipartResolver解析器
<!--文件解析器--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="UTF-8"/> <property name="maxUploadSize" value="1024000"/> </bean>
- 页面
<h2>第二种:mutipart提供file.transferTo进行上传</h2> <form method="post" action="/reg2" enctype="multipart/form-data"> <input type="file" name="photo2"> <input type="submit" value="reg2"> </form>
- controller.java
@PostMapping("/reg2") public String reg2(@RequestParam("photo2") CommonsMultipartFile file,HttpServletRequest request) throws IOException { String path = request.getServletContext().getRealPath("/")+"WEB-INF/img/"+file.getOriginalFilename(); File f = new File(path); file.transferTo(f); request.setAttribute("photoName",file.getOriginalFilename()); return "success"; }