• 快速入门SpringMVC,详解原理


    快速入门SpingMVC,详解原理

    1. 为什么要使用SpingMVC

    用 springmvc 比原本 servlet 方便快捷,开发效率高,springmvv 通过前端控制器拦截所有请求,然后下发给控制器映射器,通过它找到处理链,然后返回给前端控制器,前端控制器继续下发给控制器执行器,控制器执行器找到执行前面找到执行链,然后返回给控制器执行,然后再次返回前端控制器,前端控制器将再次下发给视图解析器,视图解析器渲染视图,最后通过前端控制器返回给前端,使用 mvc 开发人员只需要专心写业务,不需要关系其他东西,这样大大提高开发效率。

    SpringMVC是一种基于Java,实现了Web MVC设计模式,请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦。基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,SpringMVC也是要简化我们日常Web开发。

    2. MVC设计模式

    在这里插入图片描述

    在这里插入图片描述

    3. SpringMVC核心架构

    在这里插入图片描述

    具体流程
    1. 首先浏览器发送请求给DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;

    2. DispatcherServlet对接HandlerMapping,处理器映射器将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器对象、多个HandlerInterceptor拦截器)对象;

    3. DispatcherServlet对接HandlerAdapter,处理器适配器将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;

    4. HandlerAdapter调用处理器相应功能处理方法,并返回一个ModelAndView对象(包含模型数据、逻辑视图名);

    5. ModelAndView对象(Model部分是业务对象返回的模型数据,View部分为逻辑视图名对接ViewResolver, 视图解析器将把逻辑视图名解析为具体的View;

    6. View用于渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构;

    7. 返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

    4. Spring核心原理

    新建一个web module

    4.1 利用maven导入需要的依赖
    <dependencies>
            
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-webmvcartifactId>
                <version>5.3.1version>
            dependency>
            
            <dependency>
                <groupId>ch.qos.logbackgroupId>
                <artifactId>logback-classicartifactId>
                <version>1.2.3version>
            dependency>
            
            <dependency>
                <groupId>javax.servletgroupId>
                <artifactId>javax.servlet-apiartifactId>
                <version>3.1.0version>
                <scope>providedscope>
            dependency>
            
            <dependency>
                <groupId>org.thymeleafgroupId>
                <artifactId>thymeleaf-spring5artifactId>
                <version>3.0.12.RELEASEversion>
            dependency>
        dependencies>
    
    • 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
    4.2 配置web.xml
      
        <servlet>
            <servlet-name>springmvcservlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
            
            <init-param>
                <param-name>contextConfigLocationparam-name>
                <param-value>classpath:springmvc-servlet.xmlparam-value>
            init-param>
            
            <load-on-startup>1load-on-startup>
        servlet>
    	<servlet-mapping>
           <servlet-name>springmvcservlet-name>
           <url-pattern>/url-pattern>
       	servlet-mapping>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    4.3 编写SpringMVC 的 配置文件!

    名称:springmvc-servlet.xml : [servletname]-servlet.xml

    在其中添加一些管理器,以及我们的控制层组件

    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">
        
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
        
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
        
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
            
            <property name="prefix" value="/WEB-INF/templates/"/>
            
            <property name="suffix" value=".html"/>
        bean>
        <bean id="/hello" class="com.zxy.controller.HelloController">bean>
    
    beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    4.4 、编写我们要操作业务Controller

    编写我们要操作业务Controller ,要么实现Controller接口,要么增加注解;需要返回一个ModelAndView,装数据,封视图;

    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    //注意:这里我们先导入Controller接口
    public class HelloController implements Controller {
    
    
        public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
            //ModelAndView 模型和视图
            ModelAndView mv = new ModelAndView();
            //封装对象,放在ModelAndView中。Model
            mv.addObject("msg","HelloSpringMVC!");
            //封装要跳转的视图,放在ModelAndView中
            mv.setViewName("index");//: 结合上面配置文件中的视图解析器会生成完整的路径/WEB-INF/jsp/index.jsp
            return mv;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    4.5 编写我们的jsp页面
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        Title
    
    
    ${msg}
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    4.6 配置tomacat,启动调试

    在这里插入图片描述

    项目结构如下

    在这里插入图片描述

    5. 使用注解开发

    在实际开发中我们一般不会使用这么复杂的开发方式,使用注解使开发变得简单

    新建一个web module

    5.1 利用maven导入需要的依赖
    <dependencies>
            
            <dependency>
                <groupId>org.springframeworkgroupId>
                <artifactId>spring-webmvcartifactId>
                <version>5.3.1version>
            dependency>
            
            <dependency>
                <groupId>ch.qos.logbackgroupId>
                <artifactId>logback-classicartifactId>
                <version>1.2.3version>
            dependency>
            
            <dependency>
                <groupId>javax.servletgroupId>
                <artifactId>javax.servlet-apiartifactId>
                <version>3.1.0version>
                <scope>providedscope>
            dependency>
            
            <dependency>
                <groupId>org.thymeleafgroupId>
                <artifactId>thymeleaf-spring5artifactId>
                <version>3.0.12.RELEASEversion>
            dependency>
        dependencies>
    
    • 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
    5.2 配置web.xml
      
        <servlet>
            <servlet-name>springmvcservlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
            
            <init-param>
                <param-name>contextConfigLocationparam-name>
                <param-value>classpath:springmvc-servlet.xmlparam-value>
            init-param>
            
            <load-on-startup>1load-on-startup>
        servlet>
    	<servlet-mapping>
           <servlet-name>springmvcservlet-name>
           <url-pattern>/url-pattern>
       	servlet-mapping>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    5.3 编写配置文件springmvc.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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
        
        <context:component-scan base-package="com.zxy.springmvc.pojo">context:component-scan>
        
        <bean id="viewResolver"
              class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
            <property name="order" value="1"/>
            <property name="characterEncoding" value="UTF-8"/>
            <property name="templateEngine">
                <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                    <property name="templateResolver">
                        <bean
                                class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                            
                            <property name="prefix" value="/WEB-INF/templates/"/>
                            
                            <property name="suffix" value=".html"/>
                            <property name="templateMode" value="HTML5"/>
                            <property name="characterEncoding" value="UTF-8" />
                        bean>
                    property>
                bean>
            property>
        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
    • 28
    • 29
    • 30
    5.4 使用注解编写我们的控制层
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    
    //注解表明这是控制层,同时自动将这个类的bean加入ioc容器中
    @Controller
    public class HelloController {
        // @RequestMapping注解:处理请求和控制器方法之间的映射关系
        // @RequestMapping注解的value属性可以通过请求地址匹配请求,/表示的当前工程的上下文路径
        // localhost:8080/springMVC/
        @RequestMapping("/")
        public String index() {
            //设置视图名称
            return "index";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    5.5 编写首页
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>首页title>
    head>
    <body>
    <h1>这是首页h1>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    5.6 配置tomcat开始调试

    在这里插入图片描述

    项目结构图如下

    在这里插入图片描述

    相信看完本篇你已经对springmvc的结构原理有了认识,谢谢观看。

  • 相关阅读:
    WPF —— Calendar日历控件详解
    CentOS 6.5安装配置LNMP服务器(Nginx+PHP+MySQL)
    CY3/CY5/CY7标记牛血清白蛋白/人血清白蛋白,CY3/CY5/CY7-BSA/HSA
    【webrtc】VCMSessionInfo 合并一个可解码的帧
    C#中+=的用法
    【萌新的RiscV学习之流水线结构的概述-7】
    2022-11-20 C++并发编程( 四十四 ) -- 通讯顺序进程 CSP 范型
    推荐一款M1芯片电脑快速搭建集群的虚拟机软件
    Windows10找不到msvcr100.dll如何修复呢?详细有效的修复方法分享
    判断文件是否为DICOM文件
  • 原文地址:https://blog.csdn.net/m0_64102491/article/details/126673956