请简述 Spring MVC 框架的工作执行流程。试编程举例加以说明。
时间: 2023-09-19 15:07:07 浏览: 78
Spring MVC 框架的工作执行流程如下:
1. 客户端发送请求到 DispatcherServlet。
2. DispatcherServlet 根据请求信息调用 HandlerMapping,解析出 HandlerExecutionChain 对象,其中包含 HandlerInterceptor 数组和 Controller 对象。
3. DispatcherServlet 根据 HandlerExecutionChain 中的 HandlerInterceptor 数组,按照顺序执行每个拦截器的 preHandle 方法,若有拦截器返回 false,则执行流程中止,返回错误信息。
4. DispatcherServlet 调用 Controller 的方法处理请求,返回 ModelAndView 对象。
5. DispatcherServlet 根据 ModelAndView 中的 ViewName,调用 ViewResolver 解析出 View 对象。
6. DispatcherServlet 调用 View 的 render 方法,将模型数据渲染到视图中。
7. DispatcherServlet 根据 HandlerExecutionChain 中的 HandlerInterceptor 数组,按照逆序执行每个拦截器的 postHandle 方法。
8. DispatcherServlet 返回响应给客户端。
下面是一个简单的 Spring MVC 示例:
1. 配置 DispatcherServlet 和 HandlerMapping:
```xml
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
```
2. 编写 Controller 类:
```java
@Controller
public class HelloController {
@RequestMapping("/hello")
public ModelAndView hello() {
ModelAndView model = new ModelAndView("hello");
model.addObject("message", "Hello, world!");
return model;
}
}
```
3. 编写 ViewResolver 类:
```xml
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
```
4. 编写 JSP 视图:
```jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>
```
这样,当客户端发送请求到 /hello 路径时,Spring MVC 框架会调用 HelloController 的 hello 方法处理请求,并返回 ModelAndView 对象,其中包含视图名称和模型数据。DispatcherServlet 会根据视图名称通过 ViewResolver 解析出 View 对象,并调用其 render 方法将模型数据渲染到视图中,最终返回响应给客户端。
阅读全文