Spring 面试题, 说下对 Spring MVC 的理解?
Spring 面试题, 说下对 Spring MVC 的理解?
QA
Step 1
Q:: 请描述一下Spring MVC的基本架构及其工作流程?
A:: Spring MVC是一种基于Java的Web框架,它通过模型(Model)、视图(View)和控制器(Controller)
来分离关注点,从而简化Web应用的开发。其基本工作流程如下:
1.
用户发出请求到前端控制器DispatcherServlet。
2. DispatcherServlet调用HandlerMapping来找到对应的处理器(Controller)
。
3.
处理器接收请求并处理,返回一个ModelAndView对象。
4. DispatcherServlet根据返回的ModelAndView选择合适的视图解析器(ViewResolver)
。
5. 视图解析器将逻辑视图名解析为实际视图(JSP、Thymeleaf等)
。
6.
视图渲染,生成最终的HTML页面并返回给用户。
Step 2
Q:: 什么是Spring MVC中的Controller?
A:: 在Spring MVC中,Controller是处理用户请求的组件。它接收来自DispatcherServlet的请求,执行相应的业务逻辑或调用服务层,最后将结果封装到Model中,并返回一个视图名称。典型的Controller是通过注解如@Controller
或@RestController
标记的类,并使用@RequestMapping
等注解来映射请求URL。
Step 3
Q:: 如何在Spring MVC中处理表单提交?
A:: 在Spring MVC中处理表单提交通常包括以下步骤:
1.
在Controller中定义一个方法,使用@RequestMapping
来映射表单提交的URL。
2.
方法的参数可以使用@ModelAttribute
或直接定义表单对象,以接收表单数据。
3.
使用BindingResult
来验证表单数据,并处理验证错误。
4.
成功提交后,将数据传递给服务层进行业务处理,并返回视图名称。
5.
如果验证失败,可以将错误信息返回到表单页面,供用户修改。
Step 4
Q:: Spring MVC中如何进行数据验证和处理?
A:: Spring MVC中的数据验证通常通过JSR-303/JSR-380
Bean Validation(如Hibernate Validator)实现。可以在表单对象上使用注解如@NotNull
、@Size
等定义验证规则。在Controller方法中,验证后的结果通过BindingResult
对象获取,如果有错误,可以将错误信息返回给视图进行显示。同时,Spring MVC提供了全局异常处理机制,利用@ExceptionHandler
、@ControllerAdvice
等注解处理控制器中的异常。
Step 5
Q:: 如何在Spring MVC中实现文件上传?
A:: 在Spring MVC中实现文件上传可以通过以下步骤:
1.
在Spring的配置文件中启用MultipartResolver,例如CommonsMultipartResolver。
2.
在Controller中定义方法来接收上传的文件,方法参数使用MultipartFile
来接收文件。
3.
将上传的文件保存到指定位置或直接处理。
4.
返回视图或JSON数据给前端,表示上传结果。Spring还支持多文件上传,方法参数可以定义为List<MultipartFile>
。