SpringBoot初始教程之Servlet、Filter、Listener配置(七)
来源:互联网 发布:网络通信设备品牌排行 编辑:程序博客网 时间:2024/04/30 12:54
SpringBoot初始教程之Servlet、Filter、Listener配置(七)
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包裹一层 动态的加上一些初始参数
本文代码
https://git.oschina.net/wangkang_daydayup/SpringBoot-Learn/tree/master
springboot-7
- SpringBoot初始教程之Servlet、Filter、Listener配置(七)
- SpringBoot初始教程之Servlet、Filter、Listener配置(七)
- SpringBoot初始教程之Servlet、Filter、Listener配置
- SpringBoot初始教程之Servlet、Filter、Listener配置
- springBoot配置servlet,filter,listener
- SpringBoot--添加配置Servlet,Filter,listener
- springboot注册servlet,Filter,Listener
- SpringBoot中Servlet&Listener&Filter的应用
- 在SpringBoot中使用 Servlet Filter Listener
- springboot 使用Servlet,Filter,Listener的方法
- spring boot学习8之Servlet/Filter/Listener配置
- SpringBoot 实战 (二) :web 综合应用(配置Servlet、Listener、Filter,Log)
- SpringBoot之Filter And Listener(D)
- springboot实战之注册filter和listener
- 第四十二章 SpringBoot注册Servlet/Filter/Listener
- Servlet Filter Servlet Listener
- Java Web之三 Servlet Filter Listener
- Spring Boot参考教程(六)Spring Boot配置Servlet,Filter,Listener,Interceptor
- Codeforces 488D Strip【dp+RMQ--------ST】
- java中的ExecutorCompletionService原理解析
- Python Matplotlib画图示例
- [从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)
- Android Studio及Gradle
- SpringBoot初始教程之Servlet、Filter、Listener配置(七)
- c++学习笔记(一)——变量、常量、地址
- centos6.2 vnc安装及使用
- mybatis 增删改查、批量插入和删除以及自动生成uuid主键和分页
- android 布局管理器
- Unity3D Shader 新手教程(4/6) —— 卡通shader(入门版)
- C语言最大公约数和最小公倍数
- 手机号码检测开通微信
- 如何完全卸载oracle