DispatchServlet---Spring MVC

DispatcherServlet 是 Spring MVC 框架的核心组件之一,它负责处理所有的 HTTP 请求,并将请求分发给相应的控制器进行处理。

DispatcherServlet 的工作流程

DispatcherServlet 在处理请求时,会经历以下流程:

1. 接收请求

当用户发送 HTTP 请求到 Web 应用程序时,DispatcherServlet 会拦截该请求。它充当整个应用程序的前端控制器,确保所有请求都通过它进行处理。

2. 查找处理器映射 (HandlerMapping)

DispatcherServlet 会根据请求的 URL 查找与之匹配的处理器映射 (HandlerMapping)。处理器映射会将请求映射到相应的控制器 (Controller)。Spring 提供了多种方式来定义处理器映射,例如注解、XML 配置等。

3. 创建处理器

一旦找到合适的处理器映射,DispatcherServlet 会创建相应的控制器对象。这通常是通过依赖注入容器(如 Spring 的 ApplicationContext)来管理和创建的。

4. 执行处理器

然后,DispatcherServlet 会调用控制器的处理方法 (Handler Method) 来处理请求。控制器中的业务逻辑会在此阶段执行,处理用户请求并生成相应的响应数据。

5. 处理结果

控制器处理完请求后,会返回一个 ModelAndView 对象。该对象包含了视图名称和数据模型。视图名称用于指定将要渲染的视图,数据模型包含了需要在视图中展示的数据。

6. 查找视图解析器 (ViewResolver)

DispatcherServlet 会查找与视图名称匹配的视图解析器 (ViewResolver)。视图解析器负责将逻辑视图名称解析为实际的视图对象(例如 JSP、Thymeleaf 模板等)。

7. 渲染视图

最后,视图解析器会根据视图名称和数据模型渲染视图,并将最终生成的 HTML 页面返回给用户。整个流程在此结束,用户会看到处理后的页面内容。

DispatcherServlet 的优势

解耦

DispatcherServlet 将请求处理过程分解成多个独立的组件,例如处理器映射、控制器、视图解析器等。这种解耦设计提高了代码的可维护性和可扩展性,各个组件可以独立开发和测试。

灵活

DispatcherServlet 支持多种配置方式,可以根据不同的需求进行定制。开发者可以通过注解、XML 配置文件等方式灵活配置应用程序的各个部分,满足不同场景的需求。

可扩展

DispatcherServlet 提供了多种扩展点,可以方便地进行功能扩展。例如,可以自定义处理器映射、视图解析器、拦截器等,以实现特定的业务需求和功能。

配置方式

1. 纯 MVC 模式

配置方式: 需要手动配置 DispatcherServlet 和编写 web.xml 文件。

1.在 web.xml 文件中配置 DispatcherServlet

    告诉 Web 容器如何加载和实例化 DispatcherServlet。

<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

2.在 spring-servlet.xml 文件中配置 DispatcherServlet 的属性:

  • 这部分配置告诉 DispatcherServlet 如何加载和解析 Spring MVC 配置文件。
<bean id="dispatcherServlet" class="org.springframework.web.servlet.DispatcherServlet">
    <property name="contextConfigLocation" value="classpath:spring-mvc.xml" />
</bean>

3.使用 @Configuration 和 @EnableWebMvc 注解配置 DispatcherServlet

  • @Controller 注解用于标识一个类为 Controller,表示该类负责处理 Web 请求。
  • @RequestMapping 注解用于映射请求 URL 到 Controller 中的方法。
@Controller
public class MyController {

    @RequestMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "Hello, Spring MVC!");
        return "hello"; // 视图名称
    }
}

2. Spring Boot 模式

在 Spring Boot 中,默认情况下已经集成了 Spring MVC,并自动配置了 DispatcherServlet。因此,您不需要显式地配置 DispatcherServlet,它会自动启动并运行。

Spring Boot 中使用 DispatcherServlet 的方式:

  • 创建 Controller: 使用 @Controller 注解标记您的 Controller 类,并使用 @RequestMapping 注解映射请求 URL 到 Controller 方法。
  • 启动应用程序: 运行 Spring Boot 应用程序,DispatcherServlet 会自动启动并处理请求。
@RestController
public class MyController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot!";
    }
}

 MyController 类被 @RestController 注解标记为 Controller,hello 方法被 @GetMapping 注解标记为处理 GET 请求 /hello。当用户访问 /hello 路径时,DispatcherServlet 会找到 MyController 类,并调用 hello 方法,然后将返回值 "Hello, Spring Boot!" 返回给客户端。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值