深入理解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视图对象
如下是详情图:
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>
来源:https://juejin.cn/post/7094499837978083336
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
android解析JSON数据
Android实现网易新闻客户端首页效果
![](https://img.aspxhome.com/file/2023/8/138808_0s.jpg)
MyBatis中使用$和#所遇到的问题及解决办法
UnityShader使用速度映射图实现运动模糊
![](https://img.aspxhome.com/file/2023/1/71761_0s.jpg)
Java的MD5工具类和客户端测试类
Idea jdk版本问题解决方案
![](https://img.aspxhome.com/file/2023/9/108199_0s.png)
C#值类型、引用类型中的Equals和==的区别浅析
![](https://img.aspxhome.com/file/2023/3/98283_0s.png)
C# DateTime日期比较方法案例详解
![](https://img.aspxhome.com/file/2023/1/129621_0s.png)
Java关键字this与super详解用法
学生信息管理系统java版
Java简单从文件读取和输出的实例
![](https://img.aspxhome.com/file/2023/4/122344_0s.png)
Java设计模式编程之解释器模式的简单讲解
![](https://img.aspxhome.com/file/2023/4/68544_0s.jpg)
java实现纸牌游戏之小猫钓鱼算法
C#数据表格(DataGridView)控件的应用案例
![](https://img.aspxhome.com/file/2023/0/78140_0s.gif)
关于idea中SpringBoot启动失败的坑
![](https://img.aspxhome.com/file/2023/4/62234_0s.png)
剑指Offer之Java算法习题精讲链表与二叉树专项训练
![](https://img.aspxhome.com/file/2023/9/129189_0s.png)
java编程实现基于UDP协议传输数据的方法
Java使用arthas修改日志级别详解
![](https://img.aspxhome.com/file/2023/8/85398_0s.png)
java使用lambda表达式对List集合进行操作技巧(JDK1.8)
如何将maven源改为国内阿里云镜像
![](https://img.aspxhome.com/file/2023/9/57899_0s.png)