1.Spring4.3官方文档整理之DispatcherServlet
Spring的web MVC框架与其他许多web MVC框架一样,是由请求驱动的,围绕一个中央Servlet设计,它将请求分派给控制器,并提供其他功能促进web应用程序的开发。然而,Spring的DispatcherServlet却做得更多,不仅仅是这一点它与Spring IoC容器完全集成,因此允许您使用它spring的其他特征。
介绍了Spring Web MVC DispatcherServlet的请求处理工作流如下图。可以认识到DispatcherServlet是一个“前端控制器”。
官方图解
DispatcherServlet是一个实际的Servlet(它从HttpServlet基类继承),正如在web应用程序中声明的那样。您需要映射您想要的请求。DispatcherServlet处理,通过使用URL映射。这是一个标准的Java EE Servlet。Servlet 3.0+环境中的配置如下:
WebApplicationInitializer 介绍
在Servlet 3.0+环境中实现的接口,以便以编程方式配置ServletContext——而不是(或可能与)传统web相结合基于xml的方法。
基于xml的配置:
构建web应用程序的大多数Spring用户都需要注册Spring的DispatcherServlet
编程式配置:
基于代码的方法与WebApplicationInitializer这里是等效的DispatcherServlet注册逻辑
100%基于代码的配置方法
在上面的例子中,WEB-INF /web.xml成功地以WebApplicationInitializer的形式替换了代码,但是实际的dispatcher-config.xml Spring配置仍然是基于xml的。WebApplicationInitializer是一个非常适合使用Spring的基于代码的@Configuration类。下面的示例演示了重构,以使用Spring的AnnotationConfigWebApplicationContext代替XmlWebApplicationContext,以及用户定义的@Configuration类AppConfig和DispatcherConfig,而不是Spring XML文件。这个示例也超出了上面的部分,以演示“根”应用程序上下文的典型配置和ContextLoaderListener的注册
public class MyWebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext container) { // Create the 'root' Spring application context 创建根上下文 AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); rootContext.register(AppConfig.class); // Manage the lifecycle of the root application context container.addListener(new ContextLoaderListener(rootContext)); // Create the dispatcher servlet's Spring application context //创建DispatcherServlet上下文,即web上下文 AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext(); dispatcherContext.register(DispatcherConfig.class); // Register and map the dispatcher servlet //注册映射 ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext)); dispatcher.setLoadOnStartup(1); dispatcher.addMapping("/"); } }
WebApplicationInitializer是由Spring MVC提供的一个接口。基于代码的配置被检测到并自动用于初始化任何Servlet3.0容器。这个接口的一个抽象基类实现命名。AbstractAnnotationConfigDispatcherServletInitializer使得注册更容易。通过简单地指定它的servlet映射和列出配置类,DispatcherServlet甚至是设置Spring MVC应用程序的推荐方法,建议配置如下。
Spring的ApplicationContext实例可以作用域范围。在Web MVC框架中,每个DispatcherServlet都有自己的WebApplicationContext,它继承了在根WebApplicationContext中定义的所有bean。根WebApplicationContext应该包含应该在其他上下文和Servlet实例之间共享的所有基础结构bean。这些继承的bean可以在Servlet特定的范围内被覆盖,并且您可以在给定的Servlet实例中定义新的特定于范围的bean。
从上图可以看到Servlet WebApplicationContext 主要是配置web相关的,如controller 、视图解析器、处理器映射。Root WebApplicationContext主要是来配置service和repsoitories.这就是我们常用的分开配置.
<param-name>contextConfigLocation</param-name> <param-value>classpath*:root-context.xml</param-value> </context-param> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <!--默认路径实在WEB-INF下放着,默认命名为servletName-servlet.xml--> <param-value> classpath*:dispatcher-servlet.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
上图这种是Root WebApplicationContext承担了所有的配置
微信公众号:
JAVA程序猿成长之路
分享资源,记录程序猿成长点滴。专注于Java,Spring,SpringBoot,SpringCloud,分布式,微服务。
原文地址:https://www.cnblogs.com/niugang0920/p/12193118.html
- 使用 nvm 管理不同版本的 node 与 npm
- svg矢量图绘制以及转换为Android可用的VectorDrawable资源
- CListCtrl控件使用方法总结
- JavaScript基础考核真题——你能全做对吗?
- 拉手网面试题,不一样的难度
- Html 5 video/audio 格式转换 ogg
- ASP.NET MVC 开源项目Kigg解读(1)
- 一个setInterval的小问题
- scrollLeft等属性介绍
- ASP.NET MVC 开源项目Kigg解读(2)——Kigg.Core第一部分
- JavaScript 实现接口 (Interfaces In JavaScript)
- JavaScript 中的单例模式 (singleton in Javascript)
- asp.net MVC 权限设计
- Mediawiki 生成google sitemap
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Android实现带节点的进度条
- Android WebView userAgent 设置为桌面UA实例
- Android WebView 内处理302重定向不跳转的解决
- android studio集成极光推送的操作步骤
- Android中的webview监听每次URL变化实例
- 解决Android WebView拦截url,视频播放加载失败的问题
- Android 极光推送别名与标签方式
- Android Webview的postUrl与loadUrl加载页面实例
- android Web跳转到app指定页面并传递参数实例
- Dialog全屏,去掉状态栏的方式
- Android 通过TCP协议上传指定目录文件的方法
- Android webview加载https链接错误或无响应的解决
- Android Manifest中meta-data扩展元素数据的配置与获取方式
- Android 配置gradle实现VersionCode自增实例
- 解决Android Studio Gradle Metadata特别慢的问题