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日

相关文章

  • 详谈Android编译命令

    介绍Android编译命令Android编译命令是指在编译Android源码时使用的命令,常用的命令包括make、m、mm、mma等。这些命令可以在终端中执行,具体的使用方法和参数可以查看Android源码中的makefile文件和系统文档。 make命令make命令是一个常用的编译命令,可以在根目录下的Makefile文件中定义要编译的模块和相应的编译选项…

    Java 2023年5月26日
    00
  • 详解Tomcat常用的过滤器

    详解Tomcat常用的过滤器 Tomcat中的过滤器可以在请求被目标servlet或JSP之前或之后执行某些操作,如修改请求、响应或扩展请求所需的功能。在Web开发中,常用的过滤器有字符编码过滤器、登录验证过滤器、权限控制过滤器等。下面将详细介绍常用的Tomcat过滤器。 字符编码过滤器 字符编码过滤器可以设置HttpServletRequest和HttpS…

    Java 2023年5月20日
    00
  • 详谈Servlet和Filter的区别以及两者在Struts2和Springmvc中的应用

    下面是详细的攻略: 一、Servlet和Filter的区别 1. Servlet Servlet是一种基于Java语言编写的服务器程序,它可以在Servlet容器中运行。Servlet可以接收来自客户端的HTTP请求并返回响应,其主要作用是处理业务逻辑,如对请求进行处理并生成响应。 2. Filter Filter也是一种基于Java语言编写的服务器程序,它…

    Java 2023年5月20日
    00
  • Eclipse插件开发实现控制台输出信息的方法

    下面是Eclipse插件开发实现控制台输出信息的方法的完整攻略: 1. 简介 Eclipse作为Java开发领域最流行的开发工具之一,在插件开发方面给予了极大的支持,开发人员可以针对Eclipse的每个模块和功能进行定制和扩展。其中,如何在插件开发中实现控制台输出信息,是开发人员必须熟练掌握的技能之一。 2. 使用console输出信息 在Eclipse中,…

    Java 2023年5月26日
    00
  • Java面向对象基础知识之数组和链表

    Java面向对象基础知识之数组和链表 1. 数组和链表区别 数组和链表都是线性数据结构,但它们的存储方式和特点不同。 数组是一种连续的内存存储方式,可以快速访问任何一个元素。但在插入和删除元素时,需要移动大量元素,效率很低,因此不适合插入和删除操作频繁的情况。 链表是一种非连续的内存存储方式,每个元素存储了下一个元素的地址,因此可以快速插入和删除元素。但访问…

    Java 2023年5月26日
    00
  • springboot整合EHCache的实践方案

    下面就是“springboot整合EHCache的实践方案”的完整攻略,过程中将会包含两条实例: 1. 添加依赖 首先,在pom.xml文件中添加如下依赖: <dependencies> <!– Spring Boot 依赖 –> <dependency> <groupId>org.springframew…

    Java 2023年5月20日
    00
  • java中栈和队列的实现和API的用法(详解)

    Java中栈和队列的实现和API的用法 概述 栈和队列是计算机科学中常用的数据结构。栈是一种后进先出(LIFO)的结构,队列则是一种先进先出(FIFO)的结构。Java 中提供了很多实现栈和队列的类库,本篇攻略将详细讲解 Java 中栈和队列的实现和 API 的用法。 栈的实现和 API 的用法 Java 中栈的实现主要基于接口 java.util.Stac…

    Java 2023年5月18日
    00
  • Spring(二):Spring通过IOC来创建对象

    下面是关于“Spring(二):Spring通过IOC来创建对象”的完整攻略: 一、什么是IoC IoC(Inversion of Control),即“控制反转”,是一种设计模式和思想。其主要思想是:将对象的创建、依赖注入等操作由程序员手动实现转化为由容器自动创建和注入,而程序员只需要定义好需要的组件和依赖关系,Spring容器就会负责管理、创建和注入对象…

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