Spring MVC之DispatcherServlet_动力节点Java学院整理

Spring MVC之DispatcherServlet_动力节点Java学院整理

概述

Spring MVC 是 Spring Framework 的一个模块,它使用了模型-视图-控制器(MVC)架构模式,使 Web 架构上变得更加清晰。Spring MVC 需要一个前端控制器来作为入口点,这个控制器称为 DispatcherServlet

在本文中,我们将对 Spring MVC 的 DispatcherServlet 进行详细讲解。

DispatcherServlet 认识

DispatcherServlet 是 Spring MVC 的核心组件之一,是前置控制器,负责请求的转发、请求参数的解析和视图的渲染。它起到了桥梁的作用,将所有请求和处理分派给其他 Spring MVC 组件(例如处理器映射器和视图解析器)进行处理。

DispatcherServlet 原理

当客户端发来请求之后,DispatcherServlet 会按照指定的规则,将请求转发给对应的控制器进行处理,处理完成后再通过 ViewResolver 渲染结果视图,并将结果返回给客户端。

具体流程如下:

  1. 客户端发起请求,请求被 DispatcherServlet 捕获。
  2. DispatcherServlet 根据请求 URL 调用 HandlerMapping 获得匹配的处理器 Controller 以及处理器拦截器 HandlerInterceptor
  3. DispatcherServlet 调用 HandlerAdapter 执行处理器 Controller
  4. Controller 执行完毕后返回 ModelAndView
  5. DispatcherServlet 进行视图解析 ViewResolver,将结果视图渲染后返回给客户端。

DispatcherServlet 配置

在 Spring MVC 中配置 DispatcherServlet 主要有两种方式:

  1. 使用 web.xml 进行配置。
<web-app>
    <servlet>
        <servlet-name>dispatcherServletConfig</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/applicationContext-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcherServletConfig</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
  1. 使用 Java 配置。
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.web.controller")
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");
        registry.viewResolver(viewResolver);
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}

示例一:简单的 HelloWorld

  1. 创建一个名为 HelloWorldController.java 的类:
@Controller
public class HelloWorldController {

    @RequestMapping("/")
    public String hello() {
        return "hello";
    }
}
  1. 在 webapp/WEB-INF/views/ 目录下创建一个名为 hello.jsp 的 JSP 页面:
<!DOCTYPE html>
<html>
<head>
    <title>Hello World</title>
</head>
<body>
    <h2>Hello, World!</h2>
</body>
</html>
  1. 配置 DispatcherServlet。使用 Java 配置方式,在 WebConfig 类的 configureDefaultServletHandling() 方法中添加如下代码:
@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("hello");
}

访问 http://localhost:8080/ 将打印出 Hello, World!

示例二:数据传递

  1. 创建一个名为 DataModelController.java 的类:
@Controller
public class DataModelController {

    @RequestMapping("/user")
    public String userInfo(Map<String, Object> model) {
        User user = new User();
        user.setUsername("Alice");
        user.setAge(20);
        model.put("user", user);
        return "user";
    }
}
  1. 在 webapp/WEB-INF/views/ 目录下创建一个名为 user.jsp 的 JSP 页面:
<!DOCTYPE html>
<html>
<head>
    <title>User Info</title>
</head>
<body>
    <h2>User Info</h2>
    <ul>
        <li>Username: ${user.username}</li>
        <li>Age: ${user.age}</li>
    </ul>
</body>
</html>
  1. 配置 DispatcherServlet。使用 Java 配置方式,在 WebConfig 类的 configureDefaultServletHandling() 方法中添加如下代码:
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setPrefix("/WEB-INF/views/");
    viewResolver.setSuffix(".jsp");
    registry.viewResolver(viewResolver);
}

访问 http://localhost:8080/user 将打印出用户信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring MVC之DispatcherServlet_动力节点Java学院整理 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 简单的一次springMVC路由跳转实现

    下面我将为您详细介绍“简单的一次spring MVC路由跳转实现”的完整攻略。这个过程需要涵盖以下几个方面: 配置web.xml文件 在web.xml文件中配置DispatcherServlet,它是Spring MVC的核心组件,可以将请求分派到相应的控制器中。示例代码: <servlet> <servlet-name>dispat…

    Java 2023年5月16日
    00
  • Java开启新线程并传参方法代码实现

    下面是讲解“Java开启新线程并传参方法代码实现”的完整攻略: 内容概述 基本概念介绍 传统开启线程方式 Java 8 Lambda表达式实现开启线程 Java 8 方法引用实现开启线程 基本概念介绍 在线程编程中,有两种常见的线程启动方式: 继承Thread类,重写run方法,调用start方法启动线程。 实现Runnable接口,将Runnable实现类…

    Java 2023年5月26日
    00
  • OpenCV Java实现人脸识别和裁剪功能

    OpenCV Java实现人脸识别和裁剪功能 介绍 OpenCV 是一个跨平台的计算机视觉库,提供了用于图像和视频处理的开放源代码算法。本文将介绍如何使用 OpenCV Java 实现人脸识别和裁剪功能。人脸识别是计算机视觉中的一个重要问题,以其应用广泛而闻名。 安装 在进行开发之前,我们需要安装 OpenCV 和 Java SDK。OpenCV 的安装包可…

    Java 2023年5月20日
    00
  • 在Spring Boot中使用Spring-data-jpa实现分页查询

    下面是在Spring Boot中使用Spring-data-jpa实现分页查询的完整攻略。 步骤一:添加依赖 在pom.xml文件中添加以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-s…

    Java 2023年5月20日
    00
  • Java开启/关闭tomcat服务器的方法

    下面是Java开启/关闭tomcat服务器的方法的完整攻略: 确认Tomcat安装目录 在进行Tomcat服务器的开启和关闭前,我们要先确认Tomcat的安装目录。通常情况下,Tomcat会默认安装在/usr/local/tomcat目录下。如果您的Tomcat安装目录与该路径不同,需要将其替换为正确的目录。 开启Tomcat服务器 我们可以通过以下步骤开启…

    Java 2023年5月19日
    00
  • Java8中的LocalDateTime和Date一些时间操作方法

    下面我就来详细讲解一下“Java8中的LocalDateTime和Date一些时间操作方法”的完整攻略。 Java8中的LocalDateTime和Date一些时间操作方法 1. LocalDateTime 在Java8中,java.time.LocalDateTime类代表了日期和时间的组合,不带时区信息,并且时间精确到纳秒级别。同时,该类也提供了一些时间…

    Java 2023年5月20日
    00
  • javascript与jsp发送请求到servlet的几种方式实例

    以下是“javascript与jsp发送请求到servlet的几种方式实例”的攻略。 一、前言 在前后端分离的开发中,常常需要通过异步请求的方式向后台发送数据或获取数据。而 JavaScript、JSP 可以实现此类功能,可以将前端相关的逻辑放到 JavaScript,后端相关的逻辑放到 Servlet 中。 二、JavaScript 发送请求到 Servl…

    Java 2023年6月15日
    00
  • Java实现文件或文件夹的复制到指定目录实例

    Java 实现文件或文件夹的复制到指定目录可以使用 NIO 的 Files 类,以下是实现一份文件的复制到目标文件夹的代码示例。 import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部