Spring MVC是Spring框架的一部分,提供了构建Web应用程序的MVC(Model-View-Controller)模式实现。它是一个灵活、强大的Web框架,允许通过创建注解控制器等简单组件轻松构建Web MVC应用程序。
核心组件
-
DispatcherServlet: 它是Spring MVC的前端控制器(Front Controller),负责接收所有的HTTP请求并将请求转发给相应的控制器进行处理。
-
HandlerMapping: 用于解析请求并查找对应的处理器(控制器中的方法)。
-
Controller: 控制器组件,用于处理由
DispatcherServlet
转发的请求。 -
ModelAndView: 包含了视图名(或视图对象)与模型数据,是控制器处理完请求后返回的对象。
-
ViewResolver: 解析逻辑视图名为实际视图(如JSP),用于最终渲染。
-
HandlerAdapter: 负责执行请求映射到的控制器方法。
工作流程
- 用户发送请求至
DispatcherServlet
。 DispatcherServlet
调用HandlerMapping
确定请求的处理器。- 获取到处理器(Controller)后,
DispatcherServlet
通过HandlerAdapter
调用相应的控制器方法。 - 控制器处理请求后,返回一个
ModelAndView
对象给DispatcherServlet
。 DispatcherServlet
将模型数据和逻辑视图名交给ViewResolver
解析。ViewResolver
解析后返回具体View
。DispatcherServlet
渲染视图(即填充模型数据)。- 响应返回给客户端。
示例代码
假设有一个简单的控制器来处理用户请求并返回一个视图。
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(method = RequestMethod.GET)
public ModelAndView helloWorld() {
ModelAndView mav = new ModelAndView("hello");
mav.addObject("message", "Hello, Spring MVC!");
return mav;
}
}
其中,@Controller
标记这是一个Spring控制器,@RequestMapping("/hello")
指明了该控制器处理的请求路径。方法helloWorld
通过ModelAndView
返回视图名和模型数据。
配置DispatcherServlet
在web.xml
中配置DispatcherServlet
:
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
这将配置DispatcherServlet
来处理所有请求。
视图解析器
在Spring的配置文件(如dispatcher-servlet.xml
)中定义一个ViewResolver
:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.example" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
这里,InternalResourceViewResolver
将逻辑视图名解析为JSP文件路径。
总结
Spring MVC通过DispatcherServlet
、HandlerMapping
、Controller
、ModelAndView
、ViewResolver
等组件实现了一个强大的MVC框架。它支持灵活的URL到视图控制的映射,并提供了丰富的注解以简化配置。通过上述组件和流程,开发者可以轻松构建并管理复杂的Web应用程序。