SpringMVC面试深度解析:核心概念与优势

需积分: 2 0 下载量 156 浏览量 更新于2024-08-05 收藏 594KB PDF 举报
"SpringMVC面试题(2020最新版).pdf" SpringMVC是Spring框架的一个模块,主要用于构建Web应用程序。它遵循MVC(Model-View-Controller)设计模式,帮助开发者将业务逻辑、数据展示和用户界面分离,从而实现更高效的开发和维护。SpringMVC通过DispatcherServlet作为入口,负责接收请求并分发到相应的处理器。 SpringMVC的优点包括: 1. **灵活的视图管理**:不仅支持JSP,还可以与FreeMarker、Velocity等视图技术结合使用。 2. **与Spring框架无缝集成**:可以利用Spring的IoC容器管理依赖,以及AOP进行面向切面编程。 3. **职责明确**:DispatcherServlet作为前端控制器,HandlerMapping负责映射请求到处理器,ModelAndView用于封装模型数据和视图信息,ViewResolver处理视图解析。 4. **强大的数据绑定和验证**:支持自动绑定HTTP请求参数到Java对象,并进行数据验证。 5. **支持多种数据格式和内容协商**:例如JSON、XML,便于前后端交互。 6. **异常处理**:可以通过自定义异常处理器来统一处理异常情况。 7. **测试友好**:易于进行单元测试和集成测试。 SpringMVC的核心组件包括: 1. **DispatcherServlet**:前端控制器,接收并分发请求。 2. **HandlerMapping**:处理器映射器,根据请求找到对应的处理器。 3. **HandlerAdapter**:处理器适配器,处理找到的处理器。 4. **ModelAndView**:模型和视图对象,用于存储模型数据和视图信息。 5. **ViewResolver**:视图解析器,负责将ModelAndView中的视图名转换成实际的视图对象。 6. **Interceptor**:拦截器,用于在请求处理前后执行自定义逻辑。 DispatcherServlet的工作流程如下: 1. 用户发起HTTP请求到达DispatcherServlet。 2. DispatcherServlet通过HandlerMapping找到对应的处理器方法。 3. HandlerAdapter调用处理器方法处理请求。 4. 处理器方法执行完毕,返回ModelAndView对象。 5. DispatcherServlet通过ViewResolver解析ModelAndView中的视图。 6. 视图渲染并将结果返回给客户端。 在SpringMVC中,控制器通常是采用单例模式,这可能导致线程安全问题。如果控制器中存在非线程安全的属性,可以使用`@Scope("prototype")`注解将其设置为多例,或者通过其他方式确保线程安全。 MVC设计模式将应用程序分为三个主要部分:模型(Model)负责业务逻辑和数据管理,视图(View)负责数据展示,控制器(Controller)处理用户请求并协调模型和视图。 SpringMVC中常用的注解包括: - `@Controller`:标记类为控制器。 - `@RequestMapping`:映射HTTP请求。 - `@ResponseBody`:将方法的返回值直接写入HTTP响应体。 - `@PathVariable`:从URL路径中获取参数。 - `@RequestParam`:从请求参数中获取值。 SpringMVC与Struts2的区别在于: - SpringMVC更轻量级,灵活性更高。 - Struts2更注重配置,而SpringMVC强调代码配置和注解驱动。 - SpringMVC有更好的整合性和扩展性。 处理重定向和转发,SpringMVC提供了`RedirectView`和`ForwardView`,或者在返回值中直接使用"redirect:"或"forward:"前缀。 解决POST请求中文乱码问题,可以在`Filter`中设置请求编码,GET请求同样处理。 SpringMVC的异常处理可以通过自定义异常处理器(`@ControllerAdvice` + `@ExceptionHandler`)实现。 拦截特定HTTP方法,可以在`@RequestMapping`中指定`method`参数。 在拦截器中获取`HttpServletRequest`和`HttpSession`,可以通过`HandlerInterceptor`的`preHandle`方法的参数获取。 对于多个参数的对象,可以使用`@ModelAttribute`注解自动绑定请求参数到对象。 函数的返回值通常为字符串,对应视图名称或逻辑视图名,也可以返回`ModelAndView`对象。 通过`ModelMap`或`Model`将数据放入模型,进而传递给视图。要放入Session,可以使用`sessionAttributes`属性或手动添加到`HttpSession`。 拦截器的编写涉及`HandlerInterceptor`接口,实现其三个方法。 `WebApplicationContext`是Spring Web环境下的上下文,包含Web相关的bean,如DispatcherServlet的配置信息。 以上就是关于SpringMVC的一些关键知识点,涵盖了从基础概念到工作流程,再到注解使用和常见问题的解答。