深入理解SpringMVC中央调度器DispatcherServlet

目录
  • SpringMVC请求处理过程:
  • SrpingMVC容器和spring IOC容器关系
    • 基于maven创建的一个springmvc工程。
      • 1.创建maven项目中使用到了自动创建骨架
      • 2.配置java 文件 和资源文件
      • 3.添加jar包**
      • 4.springMVC项目web.xml初始化配置中央调度器以及自定义springmvc.xml文件
    • web.xml:

springMVC是spring的一个模块,专门做web的。

SpringMVC请求处理过程:

请求发送,根据url-pattern,转发发送给中央调度器DispatcherServlet,中央调度器分配请求到自定义的Controller对象上,进行处理。

核心的就是中央调度器,所以我们在web.xml文件中要初始化配置中央调度器,中央调度器创建的同时,他会同时创建IOC springMVC IOC容器,用于管理对象的。 springmvc存放controller对象 view视图对象

如下是详情图:

HandlerMapping处理映射,作用是根据请求的url与controller里面的方法的@RequestMapping("/url") 的url比较 找到相应的Handler(方法)。

再详细版:

SrpingMVC容器和spring IOC容器关系

springmvc ioc容器是spring ioc容器的子容器。 SpringMVC的IOC容器中的bean可以来引用 Spring IOC 容器中的 bean. 返回来呢 ? 反之则不行. Spring IOC 容器中的 bean 却不能来引用 SpringMVC IOC 容器中的 bean!多个 Spring IOC 容器之间可以设置为父子关系,以实现良好的解耦。

关系图:

基于maven创建的一个springmvc工程。

1.创建maven项目中使用到了自动创建骨架

选择webapp,这样就会自动生成springmvc项目的一些基本文件。

2.配置java 文件 和资源文件

3.添加jar包**

springmvc项目需要两个依赖 一个是spring-webmvc 封装了基本的sping里面的web部分模块 有sping-context ,spring-aop等

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>

4.springMVC项目web.xml初始化配置中央调度器以及自定义springmvc.xml文件

在tomcat启动的时候,一般会加载web.xml里面配置, 因为DispatcherServelt是调度器,负责调度用户的请求到相应的servlet处理,DispatcherServlet创建的时候,同时也会创建springmvc容器,那么tomcat启动之后,其他ervlet就可以使用了。

web.xml:

  • 中央调度器dipathcerServlet配置创建 同时创建spingmvc配置
  • spring监听器配置
  • 字符集过滤器配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
<!--这个web-app版本低了还会有问题-->
<servlet>
  <servlet-name>springDispatcherServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <!--1.springmvc配置文件-->
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:springmvc.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
  <servlet-mapping>
    <!--拦截所有的url 所有url会被中央调度器处理转发-->
    <servlet-name>springDispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <!--2.注册spring的监听器  自定义配置文件-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring.xml</param-value>
  </context-param>
  <!--spring监听器依赖-->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!--3.post请求乱码解决 字符集过滤器-->
  <!-- -->
  <filter>
    <filter-name>encoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceRequestEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>forceResponseEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

springmvc.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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
       https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--类注入IOC springMVC容器 装servlet容器的,这里用扫描-->
    <context:component-scan base-package="com.chuan.sringmvc1.controller"/>
    <!--json格式数据转换  注解驱动-->
    <mvc:annotation-driven/>
    <!--视图解析器InternalResourceViewResolver,帮助开发人员设置视图文件的路径-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix"  value="/WEB-INF/view/"/>  <!--设置前缀  value指的是路径-->

        <!-- <property name="suffix" value=".jsp"/>  这是后缀-->
    </bean>
<!--tomcat处理静态资源的默认servlet处理器-->
<mvc:default-servlet-handler/>
    <!--手动配置的静态资源处理-->
<mvc:resources mapping="/static/picture/*" location="/static/picture/"/>
</beans>

到此这篇关于SpringMVC核心之中央调度器DispatcherServlet的文章就介绍到这了,更多相关SpringMVC中央调度器DispatcherServlet内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java springmvc 注册中央调度器代码解析

    这篇文章主要介绍了java springmvc 注册中央调度器代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在WEB-INF下的web.xml中配置 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="htt

  • Springmvc DispatcherServlet原理及用法解析

    DispatcherServlet 是前端控制器设计模式的实现,提供 Spring Web MVC 的集中访问点,而且负责职责的分派,而且与 Spring IoC 容器无缝集成,从而可以获得 Spring 的所有好处.DispatcherServlet 主要用作职责调度工作,本身主要用于控制流程,主要职责如下: 文件上传解析,如果请求类型是 multipart 将通过 MultipartResolver 进行文件上传解析: 通过 HandlerMapping,将请求映射到处理器(返回一个 Han

  • SpringMVC DispatcherServlet组件实现解析

    tomcat容器启动加载web.xml初始化springmvc相关策略组件 一.WebApplicationContext的层次结构 本来是想研究一下springMVC组件的,结果解决了以前的一个疑问.WebApplicationContext的层次结构 下面是从官网copy的一份web.xml ContextLoaderListener:初始化一个Root WebApplicationContext:SpringIOC初始化一些中间services+datasouces的Bean Dispat

  • 浅谈springmvc的DispatcherServlet分析

    本文介绍了springmvc的DispatcherServlet,分享给大家,具体如下: 一.程序 (一)web.xml文件中的内容 <!-- springMVC核心配置 --> <servlet> <servlet-name>springmvcServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-cl

  • 深入理解SpringMVC中央调度器DispatcherServlet

    目录 SpringMVC请求处理过程: SrpingMVC容器和spring IOC容器关系 基于maven创建的一个springmvc工程. 1.创建maven项目中使用到了自动创建骨架 2.配置java 文件 和资源文件 3.添加jar包** 4.springMVC项目web.xml初始化配置中央调度器以及自定义springmvc.xml文件 web.xml: springMVC是spring的一个模块,专门做web的. SpringMVC请求处理过程: 请求发送,根据url-pattern

  • SpringMVC中拦截器的实现

    SpringMVC 中的 Interceptor 拦截器是非常重要和相当有用的,它的主要作用是拦截指定的用户请求,并进行相应的预处理与后处理.其拦截的时间点在“处理器映射器根据用户提交的请求映射出了所要执行的处理器类,并且也找到了要执行该处理器类的处理器适配器,在处理器适配器执行处理器之前”.当然,在处理器映射器映射出所要执行的处理器类时,已经将拦截器与处理器组合为了一个处理器执行链,并返回给了中央调度器. 拦截器和过滤器很像,但是又有比较大的区别 过滤器是servlet规范的一部分,任何jav

  • 一文理解Goland协程调度器scheduler的实现

    目录 1. 调度器scheduler的作用 2. GMP模型 3. 调度机制 1. 调度器scheduler的作用 我们都知道,在Go语言中,程序运行的最小单元是gorouines. 然而程序的运行最终都是要交给操作系统来执行的,以Java为例,Java中的一个线程对应的就是操作系统中的线程,以此来实现在操作系统中的运行.在Go中,gorouines比线程更轻量级,其与操作系统的线程也不是一一对应的关系,然而,最终我们想要执行程序,还是要借助操作系统的线程来完成,调度器scheduler的工作就

  • 如何理解SpringMVC

    目录 一.SpringMVC简介 二.SpringMVC核心组件 2.1.DispatcherServlet 2.2.HandlerMapping 2.3.HandlerInterceptor 2.4.HandlerExecutionChain 2.5.HandlerAdapter 2.6.Handler 2.7.ModelAndView 2.8.ViewResolver 2.9.View 三.配置Maven环境变量 3.1.Maven介绍 3.2.Maven下载安装 3.2.1.Maven下载

  • 老生常谈mysql event事件调度器(必看篇)

    概述 MySQL也有自己的事件调度器,简单地可以理解为linux的crontab job,不过对于SQL应用来说,它的功能更齐全,也更易于维护.个人感觉如果数量创建太多的话,也可能影响DB性能,且不易调试. MySQL事件调度器的主要内容 总开关 参数event_scheduler为事件调度器的总开关,一般来说设置为ON或者OFF就好,不建议设置成disabled,如果设置为ON,show processlist可看到该线程 创建,修改,查看等语法 关于如何创建,修改event这里不做叙述,创建

  • 深入理解Java定时调度(Timer)机制

    简介 在实现定时调度功能的时候,我们往往会借助于第三方类库来完成,比如: quartz . Spring Schedule 等等.JDK从1.3版本开始,就提供了基于 Timer 的定时调度功能.在 Timer 中,任务的执行是串行的.这种特性在保证了线程安全的情况下,往往带来了一些严重的副作用,比如任务间相互影响.任务执行效率低下等问题.为了解决 Timer 的这些问题,JDK从1.5版本开始,提供了基于 ScheduledExecutorService 的定时调度功能. 本节我们主要分析 T

  • python爬虫调度器用法及实例代码

    我们一般使用爬虫看到的都是最后的数据结果,对于整个的获取过程没有过多了解过.对于初学python的小伙伴们来说,不光是代码的练习,还是原理的分析都是必不可少的. 小编把整个爬取的过程分为了几个部分,从一开始的下载,到数据的去重解析,再到整个爬虫循环的结束,以图片和代码的双重形式展现给大家,希望能够对爬虫调度器有一个深刻的理解. 我们可以编写几个元件,每个元件完成一项功能,下图中的蓝底白字就是对这一流程的抽象: UrlManager:将存储和获取url以及url去重的几个步骤在url管理器中完成(

  • 分析Linux内核调度器源码之初始化

    一.导语 调度器(Scheduler)子系统是内核的核心子系统之一,负责系统内 CPU 资源的合理分配,需要能处理纷繁复杂的不同类型任务的调度需求,还需要能处理各种复杂的并发竞争环境,同时还需要兼顾整体吞吐性能和实时性要求(本身是一对矛盾体),其设计与实现都极具挑战. 为了能够理解 Linux 调度器的设计与实现,我们将以 Linux kernel 5.4 版本(TencentOS Server3 默认内核版本)为对象,从调度器子系统的初始化代码开始,分析 Linux 内核调度器的设计与实现.

  • Vue3生命周期Hooks原理与调度器Scheduler关系

    目录 写在最前:本文章的目标 Vue3生命周期的实现原理 生命周期类型 各个生命周期Hooks函数的创建 创建生命周期函数createHook injectHook函数 生命周期Hooks的调用 Vue3调度器(Scheduler)原理 Vue父子组件的生命周期的执行顺序 父子组件的执行顺序 父子组件生命周期的执行顺序 组件卸载的时候,是在卸载些什么呢? 组件更新的调度器里的队列任务的失效与删除的区别 父子组件执行顺序与调度器的关系 Hooks的本质 最后 写在最前:本文章的目标 Vue3的生命

随机推荐