SpringMVC的配置和执行流程

2023-05-16

要想成功的配置和调试springmvc,了解掌握它的执行流程是必不可少的,话不多说,看下图:

我们边说执行边讲配置,首先,想要使用springmvc,依赖是必不可少的,在pom里边加入如下依赖:

<!--spring mvc-json依赖-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.9</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.9</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.9</version>
    </dependency>


      <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <version>1.16.10</version>
          <scope>provided</scope>
      </dependency>


    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <!-- aop**** aspectj 相关  -->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.6.12</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.6.12</version>
    </dependency>

  执行流程:

    用户发起一个请求,然后这个请求首先回到springmvc的前端控制器--DispatcherServlet(1),然后这个前端控制器会去调用映射处理器,与前端控制器一起完成对请求界面的拦截。如果成功拦截,呢么就返回一个执行链,返回处理器对象(2、3)。返回到前端控制器。然后前端控制器再将这个处理器对象派发给处理器适配器执行(4),处理器适配器根据判断交给对应的处理器执行(5),得到结果后是一个ViewAndModel,处理器把执行的结果返回给处理器适配器(6),处理器适配器再将ModelAndView返回给总前端控制器(7),前端控制器此时是无法完成界面展示的。它再将这个结果配发给视图解析器(8),视图解析器根据自己配置的前后缀得出完整的url路径,将这个view返回给前端控制器,此时view里边并没有加载数据(9)。所以前端控制器需要将这个view派发给视图,视图将model里边的数据加载到view中,俗称渲染(10)。渲染后,整个view就已经加载处理完毕了,此时返回给前端控制器,前端控制器将其返回给用户(11),一整套流程完毕。

下边我们就根据上述所说的流程一步一步来配置springmvc:

建立工程:

 1、配置前端控制器(在web.xml文件下):

其实这里边的servlet是基于jsp的servlet,功能结构跟servlet也是大同小异,只不过以不同的形式出现罢了,比如init-param就是servlet里边的init方法,会加载一次。其中url-pattern是springmvc的拦截路径。具体的意义就是拦截这个配置的路径下的所有请求,然后将这些拦截的请求送去整个mvc执行流程中去执行,如果没有对应的控制器是会报错的(比如js和bootstrap的依赖),如果有的话就会继续执行。param-value是springmvc的配置文件,根据自己配置的路径进行填写。

  <!-- 配置springvmc的总调度器-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-config.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

配置完总调度器后,继续去配置映射处理器,这个时候我们需要在resource目录下建立一个springmvc-config的springmvcxml文件。具体建立方法:

建立后配置映射处理器:需要注意的是在此处是可以不配置的,会有默认的配置。一共有两种配置方式。下文注销的呢一种是普通的需要处理器继承Controller接口,因为此种方法比较鸡肋,所以着重讲注解的呢一种。建立完映射处理器后,我们就可以配置自定义处理器了。

 <!-- 开启包扫描-->
    <context:component-scan base-package="com.aaa"></context:component-scan>
<!--配置映射处理器: 负责url的匹配--><!-- 映射处理器和适配器默认有配置-->
   <!-- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>-->
    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>

配置自定义处理器:此处,加的@Controller是为了将此类加载到spring容器中。@RequestMapping填写的是对应的请求路经。

modelview构造方法里边填写的是逻辑路径。跟后边视图解析器配合拼接出全部的响应界面路径

@Controller
public class ParaController {

    @RequestMapping(value = "/deptLis",method = RequestMethod.GET )// 请求映射路径
    public ModelAndView list(){
        //通过构造去设置逻辑视图名
        ModelAndView modelAndView=new ModelAndView("dept/list");
        modelAndView.addObject("deptList","模拟部门查询");
         return modelAndView;
    }

配置适配处理器:此处会去寻找我们对应的自定义控制器中去寻找对应的控制器。

<!-- <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>-->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean>

配置视图解析器:此处看一下我设置的文件路径:

视图解析器就是为了配合逻辑路径来拼接完整的路径。返回数据。

<!-- 配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
        <!-- 前缀-->
        <property name="prefix" value="/jsp/"></property>
        <!--后缀 -->
        <property name="suffix" value=".jsp"></property>
    </bean>

到此,springmvc配置完毕。

附上完整的配置文件:

<!-- 开启包扫描-->
    <context:component-scan base-package="com.aaa"></context:component-scan>
    <!-- 开启mvc注解驱动 默认情况已经开启了 json于实体的转换-->
  <!--  <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>-->


    <!--配置映射处理器: 负责url的匹配--><!-- 映射处理器和适配器默认有配置-->
   <!-- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>-->
    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>
  <!-- 配置处理适配器-->
  <!-- <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>-->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean>
    <!-- 配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
        <!-- 前缀-->
        <property name="prefix" value="/jsp/"></property>
        <!--后缀 -->
        <property name="suffix" value=".jsp"></property>
    </bean>

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringMVC的配置和执行流程 的相关文章

随机推荐

  • ASP.NET Core5.0 WebApi和BlazorWebAssembly 博客后台管理系统(jwt登录校验)

    ASP NET Core5 0 WebApi和BlazorWebAssembly 博客后台管理系统 1 xff0c 此项目是VS2019 Asp NetCore5 0 用到Blazor xff0c 样式用到了bootstrap xff0c
  • linux微信最新版无法打开问题解决

    0x01 前言 最新版本deepin wine wechat默认使用deepin wine6 stable xff0c 而deepin wine6 stable中有BUG xff0c arch系统没做适配还是啥的 xff0c 导致微信调用d
  • RNA-seq全流程分析

    RNA seq 数据处理记录 xff08 2 xff09 原始数据的处理 去除adapter 找到接头序列 可以通过建库的试剂盒在Illumina官网查找 xff0c 也可以通过trim galore自动找到接头并去除 conda span
  • 用jupyter notebook修改.md文件后,遇见的问题:Jupyter上无法保存md文件; FileNotFoundError: [Errno 2] No such file or direc

    回顾 xff1a github找的的学习资料进行学习 xff0c 强行想要在jupyter notebook中阅读 md 文件 xff0c 参考链接Jupyter notebook 查看Markdown md文件 tuzixini的博客 C
  • 多生产者单消费者捆绑消费问题

    1 问题描述 某商店有两种食品A和B 最大数量各为m个 该商店将A B两种食品搭配出售 xff0c 每次各取一个 为避免食品变质 xff0c 遵循先到食品先出售的原则 xff0c 有两个食品公司分别不断地供应AB两种食品 xff08 每次一
  • OpenCV3的程序转到OpenCV4下进行编译出现的一些问题解决方法

    文章目录 写在前面一 报错 96 CV INTER LINEAR was not declared in this scope 96 1 问题描述2 解决方法 二 报错 96 CV RANSAC was not declared in th
  • c# http请求使用multipart/form-data 方式上传文件及其他参数

    这次的需求是请求java那边的一个excel批量上传的接口 但是他们的接口要求是这样的 于是自己写了个方法 xff1a 调用 xff1a 控制器层 var file 61 this HttpContext Request Files 0 获
  • C++设计模式七、生产者消费者模式(单生产单消费)。

    前言 xff1a 生产者消费者模式在 大话设计模式 一书中并没有涉及 可奈何在工作中很多地方都要用到 此模式的例子基本都相似 xff0c 在网上找了一篇博客 xff08 原文 xff09 xff0c 在此进行剖析 xff0c 写此篇博文学习
  • 网络爬虫-cloudflare五秒等待验证逆向破解

    Cloudflare是国外的一家安全防护公司 xff0c 最近在很多网站上也看到了他的身影 xff0c 比较明显的特征就是让你等待5秒钟以验证你是否是真实的浏览器 以 https www biovision com 为例 另一个明显的特征就
  • VNC的使用

    1 安装 yum install tigervnc server x86 64 2 配置 客户机和远程vnc桌面间的复制粘贴 参考 xff1a VNC怎么和宿主机共享粘贴板 整理 cxcbupt CSDN博客 3 日常使用 1 解决远程桌面
  • WPF异常处理详解

    总目录 文章目录 总目录一 WPF异常1 未捕获异常2 模拟未捕获异常场景 二 处理未捕获异常1 DispatcherUnhandledException 异常捕获2 UnhandledException异常捕获3 UnobservedTa
  • javafx 多线程赛马设计

    根据上一篇博客的内容 xff0c 这篇将展示设计过程 xff1a 二 xff0e 概要设计 2 1 系统流程图 2 2 功能模块图 2 3 赛马程序模拟程序初始化模块 在这一模块当中 xff0c 要求使用者选择当局需要赛马的马匹数量 xff
  • Cannot find module 'vue-loader/lib/plugin'

    安装了 webpack4 的版本之后发现报这个错 Cannot find module vue loader lib plugin 然后上node modules 里找了一下还真没有 plugin xff0c 所以我肯定是 vue load
  • ubuntu16.04 安装配置python3.6

    在Ubuntu下 xff0c 时不时会有这个错误的 add apt repository command not found 这个是缺少程序 xff0c 安装一下就可以了 只是不知道安装的名字 按以下命令走一趟就可以的了 sudo apt
  • 最新最快最简单解决rosdep更新失败问题

    在安装ros的时候 xff0c 最后一步会由于源在国外 xff0c sudo rosdep init会失败 xff0c 其中一种方式是通过加https ghproxy com 代理的方式 xff0c 参考链接 我之前也都是这样做的 xff0
  • 解决wsl无法同步本地代理的dns信息

    问题 本地开了公司的vpn xff0c 使用vscode的remote wsl插件连接wsl1 xff0c 结果wsl里面无法解析公司内部的一些域名 xff0c 查了下发现原来是wsl无法自动同步本地代理的dns信息 wsl2没有这个问题
  • 如何在Oracle官网下载jdk

    Oracle官方网址 xff1a Oracle Cloud Applications and Cloud Platform 注册账号 xff1a 登录进入首页 xff1a 点击Products xff1a 来到Products页面 xff0
  • ubuntu安装字体

    先安装 span class token function sudo span span class token function apt get span span class token function install span y
  • windows 压缩指定目录下每个目录和文件为zip文件的powershell脚本

    某个文件夹下有几十个子文件夹 xff0c 想要单个压缩每个子文件夹备份到云盘 如果手动操作会有点累 xff0c 尝试写个脚本吧 版本 适用于win10 win11 其他版本未测试 一 编写脚本 众所周知windows下有两种自带脚本cmd和
  • SpringMVC的配置和执行流程

    要想成功的配置和调试springmvc xff0c 了解掌握它的执行流程是必不可少的 xff0c 话不多说 xff0c 看下图 xff1a 我们边说执行边讲配置 xff0c 首先 xff0c 想要使用springmvc xff0c 依赖是必