1.介绍

通过之前的文章来看,SpringBoot涵盖了很多配置,但是往往一些配置是采用原生的Servlet进行的,但是在SpringBoot中不需要配置web.xml的
因为有可能打包之后是一个jar包的形式,这种情况下如何解决?SpringBoot 提供了两种方案进行解决
2.快速开始
2.1 方案一
方案一采用原生Servlet3.0的注解进行配置、@WebServlet 、@WebListener、@WebFilter是Servlet3.0 api中提供的注解
通过注解可以完全代替web.xml中的配置,下面是一个简单的配置
IndexServlet
@WebServlet(name = "IndexServlet",urlPatterns = "/hello")
public class IndexServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().print("hello word");
resp.getWriter().flush();
resp.getWriter().close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
IndexListener
@WebListener
public class IndexListener implements ServletContextListener {
private Log log = LogFactory.getLog(IndexListener.class);
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
log.info("IndexListener contextInitialized");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
IndexFilter
@WebFilter(urlPatterns = "/*", filterName = "indexFilter")
public class IndexFilter implements Filter {
Log log = LogFactory.getLog(IndexFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("init IndexFilter");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
log.info("doFilter IndexFilter");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
上面配置完了,需要配置一个核心的注解@ServletComponentScan,具体配置项如下,可以配置扫描的路径
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(ServletComponentScanRegistrar.class)
public @interface ServletComponentScan {
@AliasFor("basePackages")
String[] value() default {};
@AliasFor("value")
String[] basePackages() default {};
Class<?>[] basePackageClasses() default {};
}
把注解加到入口处启动即可
@SpringBootApplication
@ServletComponentScan
public class AppApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(AppApplication.class, args);
}
}
2.2 方案二
方案二是采用自己SpringBoot 配置bean的方式进行配置的,SpringBoot提供了三种BeanFilterRegistrationBean、ServletRegistrationBean、ServletListenerRegistrationBean 分别对应配置原生的Filter、Servlet、Listener,下面提供的三个配置和方案一采用的方式能够达到统一的效果
@Bean
public ServletRegistrationBean indexServletRegistration() {
ServletRegistrationBean registration = new ServletRegistrationBean(new IndexServlet());
registration.addUrlMappings("/hello");
return registration;
}
@Bean
public FilterRegistrationBean indexFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean(new IndexFilter());
registration.addUrlPatterns("/");
return registration;
}
@Bean
public ServletListenerRegistrationBean servletListenerRegistrationBean(){
ServletListenerRegistrationBean servletListenerRegistrationBean = new ServletListenerRegistrationBean();
servletListenerRegistrationBean.setListener(new IndexListener());
return servletListenerRegistrationBean;
}
3.总结
两种方案在使用上有差别,但是在内部SpringBoot的实现上是无差别的,即使使用的是Servlet3.0注解,也是通过扫描注解
转换成这三种bean的FilterRegistrationBean、ServletRegistrationBean、ServletListenerRegistrationBean
4.扩展
大家在使用的时候有没有发觉,其实SpringBoot在使用SpringMvc的时候不需要配置DispatcherServlet的,因为已经自动配置了, 但是如果想要加一些初始配置参数如何解决,方案如下:
@Bean
public ServletRegistrationBean dispatcherRegistration(DispatcherServlet dispatcherServlet) {
ServletRegistrationBean registration = new ServletRegistrationBean(dispatcherServlet);
registration.addUrlMappings("*.do");
registration.addUrlMappings("*.json");
return registration;
}
可以通过注入DispatcherServlet 然后用ServletRegistrationBean包裹一层 动态的加上一些初始参数
本文代码:springboot-Servlet-Filter-Listener_jb51.rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# SpringBoot
# Servlet配置
# Filter配置
# Listener配置
# springboot注入servlet的方法
# SpringBoot中使用Filter和Interceptor的示例代码
# springboot使用filter获取自定义请求头的实现代码
# springboot中filter的用法详解
# springBoot的事件机制GenericApplicationListener用法解析
# 详解springboot整合Listener的两种方式
# SpringBoot中使用Servlet三大组件的方法(Servlet、Filter、Listene
# 是一个
# 两种
# 如何解决
# 的是
# 但是在
# 有可能
# 不需要
# 上有
# 可以通过
# 三种
# 转换成
# 中不
# 大家多多
# 这三种
# 情况下
# 无差别
# req
# HttpServletResponse
# flush
# HttpServletRequest
相关文章:
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
教学论文网站制作软件有哪些,写论文用什么软件
?
如何在阿里云虚拟主机上快速搭建个人网站?
详解jQuery停止动画——stop()方法的使用
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
MySQL查询结果复制到新表的方法(更新、插入)
linux top下的 minerd 木马清除方法
音响网站制作视频教程,隆霸音响官方网站?
建站之星价格显示格式升级,你的预算足够吗?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
建站之星云端配置指南:模板选择与SEO优化一键生成
ui设计制作网站有哪些,手机UI设计网址吗?
如何在阿里云通过域名搭建网站?
如何获取上海专业网站定制建站电话?
如何配置支付宝与微信支付功能?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
Python lxml的etree和ElementTree有什么区别
香港服务器网站推广:SEO优化与外贸独立站搭建策略
微信小程序 input输入框控件详解及实例(多种示例)
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
模具网站制作流程,如何找模具客户?
如何在阿里云域名上完成建站全流程?
C++时间戳转换成日期时间的步骤和示例代码
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
如何选择最佳自助建站系统?快速指南解析优劣
建站之星展会模版如何一键下载生成?
威客平台建站流程解析:高效搭建教程与设计优化方案
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
如何快速查询网址的建站时间与历史轨迹?
c# 在ASP.NET Core中管理和取消后台任务
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
C#如何使用XPathNavigator高效查询XML
建站ABC备案流程中有哪些关键注意事项?
高防服务器租用指南:配置选择与快速部署攻略
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
如何在万网ECS上快速搭建专属网站?
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
济南企业网站制作公司,济南社保单位网上缴费步骤?
如何在Golang中使用replace替换模块_指定本地或远程路径
测试制作网站有哪些,测试性取向的权威测试或者网站?
山东云建站价格为何差异显著?
如何快速配置高效服务器建站软件?
如何快速搭建虚拟主机网站?新手必看指南
青岛网站建设如何选择本地服务器?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
如何通过云梦建站系统实现SEO快速优化?
如何快速上传自定义模板至建站之星?
内部网站制作流程,如何建立公司内部网站?
制作电商网页,电商供应链怎么做?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
*请认真填写需求信息,我们会在24小时内与您取得联系。