• “深入探究SpringMVC的工作原理与入门实践“



    在这里插入图片描述

    引言

    SpringMVC是一个流行的Java Web开发框架,它提供了一种优雅的方式来构建灵活、可扩展的Web应用程序。本文将介绍SpringMVC的基本概念,深入探讨其工作流程和核心组件,并提供一个入门程序来帮助读者快速上手。

    1. 什么是SpringMVC?

    SpringMVC是基于Java的MVC(Model-View-Controller)设计模式的Web框架。它通过将应用程序分为模型、视图和控制器三个部分,实现了松耦合和高内聚的架构。SpringMVC提供了丰富的功能和灵活的配置选项,使得开发者能够快速构建可维护和可扩展的Web应用程序

    1.1. 模型

    模型代表应用程序的数据和业务逻辑。它可以是一个POJO(Plain Old Java Object)或一个持久化实体类。模型负责处理数据的读取、存储和验证,并提供给视图和控制器使用。

    1.2. 视图

    视图负责展示模型的数据给用户。它可以是一个JSP页面、HTML模板或其他类型的视图技术。视图通常是被动的,只负责展示数据,不处理业务逻辑。

    1.3. 控制器

    控制器接收用户的请求并根据请求的内容选择合适的处理逻辑。它负责处理用户输入、调用模型的方法来处理数据,并将处理结果传递给视图进行展示。

    2. SpringMVC的工作流程

    SpringMVC的工作流程可以分为以下几个步骤:

    2.1. 客户端发送请求

    1. 用户发来一个请求,首先进入的是前端控制器DispatcherServlet

    2.2. DispatcherServlet的处理

    1. 前端控制器(DispacherServlet)将用户发来的请求发送给处理器映射器(HandlerMapping)
    2. 处理器映射器根据前端控制器发来的用户的请求找到对应符合的控制器(Handler),并且将其封装成处理器执行链,返回给前端控制器。

    2.3. 处理器映射器的使用

    1. 处理器适配器 (HandlerAdaptoer) 会调用对应的具体的 Controller(处理业务逻辑)
    2. 处理器适配器接收到来自前端控制器的执行链后,找到对应执行此执行链的处理器适配器(HandlerAdapter)来调用的具体的控制器(就是说其对应的方法或者逻辑)

    2.4. 处理器的执行

    1. 控制器执行完成后,会返回一个ModelAndView对象给处理器适配器
    2. 处理器适配器将返回来的ModelAndView对象返回给前端控制器(到这里所有的业务处理过程就要完了,接下就是将结果以页面的的形式响应给用户)

    2.5. 视图解析器的使用

    1. 前端控制器将返回回来的ModelAndView对象交给视图解析器(ViewResolver),视图解析器根据传过来的View对象解析成对应的页面对象
    2. ViewResolver 将封装好的将页面对象和Model对象返回给 DIspatcherServlet

    2.6. 视图的渲染

    1. 前端控制器再将返回回来的对象交给视图(View)
    2. 视图根据传过来的Model对象再一次的对页面进行渲染(将模型数据填充至视图中),然后在返回给前端控制器。
    3. 前端控制器将完成的结果响应给浏览器,然后浏览器在展现给用户。

    3. SpringMVC的核心组件

    SpringMVC的核心组件包括:

    • 3.1. 调度程序服务版
      DispatcherServlet是SpringMVC的前端控制器,负责接收和分发请求。
    • 3.2. 处理器映射器(处理程序映射)
      处理器映射器负责将请求映射到合适的处理器(Controller)。
    • 3.3. 处理器适配器(处理程序适配器)
      处理器适配器负责调用处理器的方法来处理请求。
    • 3.4. 视图解析器(View Resolver)
      视图解析器负责将逻辑视图名解析为真正的视图对象。
    • 3.5. 视图(视图)
      视图负责展示处理结果给用户。

    4. 弹簧MVC

    下面是一个简单的SpringMVC入门程序的示例:
    4.1. 创建Maven项目
    首先,我们需要创建一个Maven项目,并添加SpringMVC的依赖。
    pom.xml依赖

    
    <jstl.version>1.2jstl.version>
    <standard.version>1.1.2standard.version>
    
    <spring.version>5.0.2.RELEASEspring.version>
    ...
    
    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-webmvcartifactId>
        <version>${spring.version}version>
    dependency>
    <dependency>
        <groupId>jstlgroupId>
        <artifactId>jstlartifactId>
        <version>${jstl.version}version>
    dependency>
    <dependency>
        <groupId>taglibsgroupId>
        <artifactId>standardartifactId>
        <version>${standard.version}version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    4.2. 配置网页.xml
    在web.xml文件中,我们需要配置DispatcherServlet和Spring容器。
    4.3. 创建控制器
    创建一个spring-mvc.xml类,并添加一些处理请求的方法。

    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
        
        <context:component-scan base-package="com.yuan"/>
    
        
        <mvc:annotation-driven />
    
        
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            
            <property name="viewClass"
                      value="org.springframework.web.servlet.view.JstlView">property>
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <property name="suffix" value=".jsp"/>
        bean>
    
        
        
    beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    demo1Controller.java

    package com.yuan.web;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    /**
     * @author 叶秋
     * @site
     * @company 卓京公司
     * @create 2023-09-04 17:01
     */
    @Controller
    @RequestMapping("/main")
    public class demo1Controller {
    
        @RequestMapping("/index")
        public String demo1(){
            System.out.println("hello  spring");
            return "index";
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    4.4. 配置SpringMVC
    在Spring的配置文件中,我们需要配置处理器映射器、视图解析器等。
    web.xml

    
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
      <display-name>Archetype Created Web Applicationdisplay-name>
      
      
      <context-param>
        <param-name>contextConfigLocationparam-name>
        <param-value>classpath:spring-context.xmlparam-value>
      context-param>
      
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
      listener>
      
    
      
      <filter>
        <filter-name>encodingFilterfilter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
        <async-supported>trueasync-supported>
        <init-param>
          <param-name>encodingparam-name>
          <param-value>UTF-8param-value>
        init-param>
      filter>
      <filter-mapping>
        <filter-name>encodingFilterfilter-name>
        <url-pattern>/*url-pattern>
      filter-mapping>
    
      
      <servlet>
        <servlet-name>SpringMVCservlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
        
        <init-param>
          <param-name>contextConfigLocationparam-name>
          <param-value>classpath:spring-mvc.xmlparam-value>
        init-param>
        <load-on-startup>1load-on-startup>
        
        <async-supported>trueasync-supported>
      servlet>
      <servlet-mapping>
        <servlet-name>SpringMVCservlet-name>
        <url-pattern>/url-pattern>
      servlet-mapping>
    web-app>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    4.5. 编写JSP视图
    创建一个JSP视图来展示处理结果。

    <%--
      Created by IntelliJ IDEA.
      User: yuanh
      Date: 2023/9/4
      Time: 17:04
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    hello word
    
    </body>
    </html>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    4.6. 运行程序
    最后,我们可以运行程序并在浏览器中访问相应的URL来查看结果。
    在这里插入图片描述

    总结

    本文深入探讨了SpringMVC的工作原理和核心组件,并提供了一个入门程序来帮助读者快速上手。通过理解SpringMVC的工作流程和组件的作用,开发者可以更好地使用该框架来构建高效、可靠的Web应用程序。希望本文对您有所帮助,谢谢阅读!

    补充:访问资源绕过解析器不被拦截代码

     
        
        <mvc:resources location="/static/" mapping="/static/**"/>
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    网址导航收藏引导页面H5源码(自适应引导页HTML源码)-自动检测域名延迟
    漏洞-Alibaba Nacos derby 远程代码执行漏洞
    JavaScript——函数
    Angular 服务端渲染 Angular Universal 实例
    国产化之银河麒麟.netcore3.1访问https服务的两个问题
    【ArcGIS Pro二次开发】(77):ArcGIS Pro中图层的获取与解析
    迭代器模式
    Yocto - 使用Yocto开发嵌入式Linux系统_11 调试Yocto项目
    实验26:旋转编码器实验
    弘辽科技:无货源网店怎么提升销量?注意什么?
  • 原文地址:https://blog.csdn.net/2201_75869073/article/details/132671869