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日

相关文章

  • Java 前台加后台精品图书管理系统的实现

    Java 前台加后台精品图书管理系统的实现 概述 该图书管理系统采用前后端分离架构,前端使用Vue.js框架开发,后端使用Spring Boot框架开发,数据库采用MySQL。 该系统包括图书的增删查改功能、管理员的登录和权限管理、用户的注册和登录功能等。 实现步骤 前端页面设计 使用Vue.js框架作为前端开发工具,使用ElementUI和Bootstra…

    Java 2023年5月24日
    00
  • java-servlet-转发AND路径(详解)

    下面是对应的完整攻略: Java Servlet 转发和路径详解 什么是 Servlet 转发? Servlet 转发是指一个 Servlet 将请求转发到另一个 Servlet(或 JSP、HTML等)进行处理,并将处理结果返回给客户端。在转发时,客户端并不知道请求被转发到了哪里,所以转发时可以使用相对路径,不一定非得使用绝对路径。 Servlet 转发示…

    Java 2023年6月15日
    00
  • SpringBoot整合JdbcTemplate的示例代码

    针对SpringBoot整合JdbcTemplate的示例代码,我提供以下完整攻略: 简介 Spring Boot 是一个快速开发框架,而 JdbcTemplate 是 Spring 框架中用来简化 JDBC 操作的工具类。在 Spring Boot 中使用 JdbcTemplate,能够帮助我们更加简单快捷地完成数据库访问操作。 背景 为了演示Spring…

    Java 2023年5月19日
    00
  • java验证用户是否已经登录 java实现自动登录

    下面是关于Java验证用户是否已经登录以及Java实现自动登录的完整攻略。 Java验证用户是否已经登录 要验证用户是否已经登录,可以通过以下步骤实现: 步骤一:获取用户的登录状态 在用户登录成功后,可以将其信息保存在Session中。当需要验证用户是否已登录时,只需获取Session中的用户信息,即可判断用户是否已经登录。以下是示例代码: HttpSess…

    Java 2023年6月16日
    00
  • 一文详解RocketMQ-Spring的源码解析与实战

    摘要:这篇文章主要介绍 Spring Boot 项目使用 rocketmq-spring SDK 实现消息收发的操作流程,同时笔者会从开发者的角度解读 SDK 的设计逻辑。 本文分享自华为云社区《RocketMQ-Spring : 实战与源码解析一网打尽》,作者:勇哥java实战分享。 RocketMQ 是大家耳熟能详的消息队列,开源项目 rocketmq-…

    Java 2023年4月25日
    00
  • 简单了解Java关键字throw和throws的区别

    简单了解Java关键字throw和throws的区别 在Java中,throw和throws是两个与异常相关的关键字,它们的作用和使用场景不同,但经常容易混淆。 throw关键字 throw关键字用于抛出一个异常对象。我们可以在代码中手动抛出一个异常对象并且将其名称直接传递给throw语句。抛出异常后,程序会立即终止当前的语句执行,并开始执行异常处理流程。 …

    Java 2023年5月25日
    00
  • Java 读取外部资源的方法详解及实例代码

    Java 读取外部资源的方法详解及实例代码 在Java中,可以通过多种方式读取外部资源,比如文件、网络数据等。本篇攻略将介绍Java中常用的读取外部资源的方法及实例代码。 读取本地文件 1. 使用 FileInputStream FileInputStream 是一个用来打开文件以进行读取操作的类。下面是使用 FileInputStream 读取本地文件的方…

    Java 2023年5月19日
    00
  • java实现读取、删除文件夹下的文件

    关于Java实现读取、删除文件夹下的文件的攻略,可以分为两个步骤:读取和删除文件。 1. 读取文件 Java中读取文件需要使用File类,它提供了各种方法来处理文件和文件夹。使用File类的方法之一是listFiles(),该方法用于获取在文件夹中的所有文件和文件夹的列表。我们可以使用该方法获得要操作的文件夹下面的所有文件或文件夹。 以下是一个读取文件夹下所…

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