Spring MVC(Model-View-Controller)框架由多个关键组件组成,这些组件协同工作,实现从请求到响应的完整流程。以下是 Spring MVC 的主要组件:
-
DispatcherServlet:
- 前端控制器(Front Controller),负责接收所有的 HTTP 请求,并将其分发给适当的处理器。
- 配置在
web.xml
中。
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
-
Handler Mapping:
- 处理器映射器,用于根据请求 URL 找到对应的处理器(Controller)。
- 常见的实现包括
RequestMappingHandlerMapping
、SimpleUrlHandlerMapping
等。
-
Controller:
- 控制器,是处理具体请求的组件。使用
@Controller
注解标识。 - 控制器中的方法使用
@RequestMapping
注解来映射请求 URL。
@Controller public class MyController { @RequestMapping("/hello") public String handleRequest(Model model) { model.addAttribute("message", "Hello, World!"); return "helloView"; } }
- 控制器,是处理具体请求的组件。使用
-
Handler Adapter:
- 处理器适配器,负责调用处理器中的处理方法。
- 常见的实现包括
RequestMappingHandlerAdapter
、HttpRequestHandlerAdapter
等。
-
ModelAndView:
- 用于封装模型数据和视图信息的对象。控制器方法返回
ModelAndView
对象,包含视图名和模型数据。
- 用于封装模型数据和视图信息的对象。控制器方法返回
-
View Resolver:
- 视图解析器,根据视图名解析为实际的视图对象(例如 JSP、Thymeleaf 模板)。
- 常见的实现包括
InternalResourceViewResolver
、ThymeleafViewResolver
等。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean>
-
View:
- 视图对象,负责将模型数据渲染为最终的 HTML 响应。
- 视图可以是 JSP、Thymeleaf 模板、FreeMarker 模板等。
-
Model:
- 用于存储控制器处理方法中的数据。
Model
接口和ModelMap
类是常用的模型数据存储方式。
-
HandlerExceptionResolver:
- 异常解析器,用于处理控制器方法中抛出的异常,并将其转换为适当的视图或响应。
- 常见的实现包括
SimpleMappingExceptionResolver
、DefaultHandlerExceptionResolver
等。
-
LocaleResolver:
- 负责解析用户请求的区域设置(Locale),用于国际化。
- 常见的实现包括
AcceptHeaderLocaleResolver
、SessionLocaleResolver
等。
-
ThemeResolver:
- 负责解析用户请求的主题(Theme),用于界面风格的动态切换。
- 常见的实现包括
FixedThemeResolver
、SessionThemeResolver
等。
-
MultipartResolver:
- 处理文件上传请求,将上传的文件解析为
MultipartFile
对象。 - 常见的实现包括
CommonsMultipartResolver
、StandardServletMultipartResolver
等。
- 处理文件上传请求,将上传的文件解析为
-
Flash Attributes:
- 用于在重定向请求之间传递临时数据。
- 通过
RedirectAttributes
接口进行处理。
-
Session Attributes:
- 用于在用户会话期间存储模型数据。
- 使用
@SessionAttributes
注解来标识需要存储在会话中的属性。
这些组件在 Spring MVC 中相互协作,提供了一个灵活且强大的框架,用于构建基于 Web 的应用程序。每个组件都可以根据需求进行定制和扩展,以满足特定的应用场景。