深入理解SpringMVC中央调度器DispatcherServlet

2022-07-15,,,,

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内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

《深入理解SpringMVC中央调度器DispatcherServlet.doc》

下载本文的Word格式文档,以方便收藏与打印。