深入理解SpringMVC中央调度器DispatcherServlet

作者:Java川 时间:2023-03-11 08:54:48 

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

SpringMVC请求处理过程:

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

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

深入理解SpringMVC中央调度器DispatcherServlet

如下是详情图:

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

深入理解SpringMVC中央调度器DispatcherServlet

再详细版:

深入理解SpringMVC中央调度器DispatcherServlet

SrpingMVC容器和spring IOC容器关系

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

关系图:

深入理解SpringMVC中央调度器DispatcherServlet

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

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

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

深入理解SpringMVC中央调度器DispatcherServlet

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

深入理解SpringMVC中央调度器DispatcherServlet

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>

来源:https://juejin.cn/post/7094499837978083336

标签:SpringMVC,中央调度器,DispatcherServlet
0
投稿

猜你喜欢

  • android解析JSON数据

    2022-10-17 04:55:40
  • Android实现网易新闻客户端首页效果

    2023-06-09 02:21:06
  • MyBatis中使用$和#所遇到的问题及解决办法

    2023-03-25 12:27:55
  • UnityShader使用速度映射图实现运动模糊

    2021-11-23 03:53:21
  • Java的MD5工具类和客户端测试类

    2022-04-23 03:08:48
  • Idea jdk版本问题解决方案

    2022-04-14 11:57:41
  • C#值类型、引用类型中的Equals和==的区别浅析

    2022-09-05 23:04:24
  • C# DateTime日期比较方法案例详解

    2021-11-09 15:32:47
  • Java关键字this与super详解用法

    2023-05-28 05:28:04
  • 学生信息管理系统java版

    2023-06-16 15:48:10
  • Java简单从文件读取和输出的实例

    2023-04-04 20:16:45
  • Java设计模式编程之解释器模式的简单讲解

    2022-01-24 16:03:32
  • java实现纸牌游戏之小猫钓鱼算法

    2021-08-11 22:57:00
  • C#数据表格(DataGridView)控件的应用案例

    2023-04-11 11:10:24
  • 关于idea中SpringBoot启动失败的坑

    2022-07-18 13:02:24
  • 剑指Offer之Java算法习题精讲链表与二叉树专项训练

    2022-01-12 19:19:01
  • java编程实现基于UDP协议传输数据的方法

    2022-11-14 04:22:22
  • Java使用arthas修改日志级别详解

    2023-02-04 23:09:26
  • java使用lambda表达式对List集合进行操作技巧(JDK1.8)

    2021-05-30 06:41:06
  • 如何将maven源改为国内阿里云镜像

    2023-07-25 13:47:33
  • asp之家 软件编程 m.aspxhome.com