自定义DispatcherServlet配置
时间:2022-07-22
本文章向大家介绍自定义DispatcherServlet配置,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
通过自定义实现DispatcherServlet可以实现更多功能的额外配置。
在Spring Web应用中,AbstractAnnotationConfigDispatcherServletInitializer通常会创建两个上下文:DispatcherServle,和另一个由ContextLoaderListener创建的上下文。
DispatcherServlet加载包含Web组件的bean,如控制器、视图解析器以及处理器映射,而ContextLoaderListener要加载应用中的其他bean。这些bean通常是驱动应用后端的中间层和数据层组件。
但是你想注册其他的Servlet和Filter,Listener,怎么办?
AbstractAnnotationConfigDispatcherServletInitializer 继承关系如下所示:
WebApplicationInitializer --> AbstractContextLoaderInitializer --> AbstractDispatcherServletInitializer --> AbstractAnnotationConfigDispatcherServletInitializer
所以说如果想要定义新组件,只需新建一个新的初始化容器类就行,最简单的方式是实现spring的WebAppliactionInitializer接口。
public class MyServletInitializer implements WebApplicationInitializer{
public void onStartUp(ServletContext servletContext)throws ServletException{
Dynamic myServlet = servletContext.addServlet("myServlet",MyServlet.class);
myServlet.addMapping("*/custom/**")
}
}
类似的我们也可以通过继承 AbstractAnnotationConfigDispatcherServletInitializer来实现非xml方式的配置。
public class SpitterWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override //用来配置ContextLoaderListener创建的应用上下文中的bean。
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] { RootConfig.class };
}
@Override //用于定义DispatcherServlet应用上下文中的bean
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] { WebConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
WebConfig 就相当于Springmvc.xml配置文件
@Configuration
@EnableWebMvc //启动Spring MVC
@ComponentScan("spittr.web") //启动组件扫描
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean //启动JSP视图解析器
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
//配置静态资源处理,
// 我们要求DispatcherServlet将对静态资源的请求转发到Servlet容器中默认的Servlet上,
// 而不是使用DispatcherServlet本身来处理此类请求。
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// TODO Auto-generated method stub
super.addResourceHandlers(registry);
}
}
同样的方法我们可以配置Filter和Listener
public class MyServletInitializer implements WebApplicationInitializer{
public void onStartUp(ServletContext servletContext)throws ServletException{
Dynamic myFilter = servletContext.addFilter("myFilter",MyFilter.class);
myFilter.addMappingForUrlPatterns(null,false,"/custom/*");
}
}
- 唐良:云端架构给电商行业带来创新力
- 邹方明:看腾讯云如何架构海量存储系统
- 王之捷:AI智能云端架构大幅提升智能语音识别能力
- 精彩大放送 | 腾讯云:容器架构向无服务架构的演进
- Python 数据分析学习笔记
- 如何用Fiddler抓取https
- 人工智能与大数据结合,帮助降低自杀率
- “多态”的数据库连接池实现
- ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidatorProvider
- 用js代码理解区块链,最简版本
- 谈谈IE针对Ajax请求结果的缓存
- Ajax请求过程中显示“进度”的简单实现
- ASP.NET MVC基于标注特性的Model验证:ValidationAttribute
- 【深度学习系列】卷积神经网络详解(二)——自己手写一个卷积神经网络
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Vue 父子组件通信 兄弟组件通信 深层组件通信 方式一览
- Vue使用Element实现增删改查+打包
- 状态管理之Vuex (二) 异步管理
- Spring中AOP相关的API及源码解析,原来AOP是这样子的
- 状态管理之Vuex (一) 基操勿六
- 形式化分析工具(五)使用CAS +语法轻松编写HLPSL规范
- 你知道Spring是怎么将AOP应用到Bean的生命周期中的吗?
- 太实用了!自己动手写软件——密码验证器的界面实现
- 【TBase开源版测评】深度测评TBase的shard分片和冷热分离存储特性
- Python爬虫练手,一个简单的Python资讯采集案例
- 直播带货软件开发过程中,如何实现图片上传
- 太实用了!自己动手写软件——邮件用户名密码验证
- 太实用了!自己动手写软件——SSH、FTP和SQL server的密码破解
- Kaggle Tweet Sentiment Extraction 第七名复盘
- 【翻译】.NET 5中的性能改进