Spring Boot之Servlets, Filters, listeners (五)

web 应用开发-Servlets, Filters, listeners

Web 开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet、 Filter、
Listener 等等

在 spring boot 中的三种实现方式

① 方法一:通过注册 ServletRegistrationBean、 FilterRegistrationBean 和
ServletListenerRegistrationBean 获得控制

/** 
 * 自定义 servlet 
 */ 
public class CustomServlet extends HttpServlet { 

 /** 
  *  
  */ 
 private static final long serialVersionUID = 1L; 

 @Override 
 protected void doGet(HttpServletRequest request, HttpServletResponse response) 
   throws ServletException, IOException { 
  System.out.println("servlet get method"); 
  doPost(request, response); 
 } 

 @Override 
 protected void doPost(HttpServletRequest request, HttpServletResponse response) 
   throws ServletException, IOException { 
  System.out.println("servlet post method"); 
  response.getWriter().write("hello world"); 
 } 

} 

/** 
 * 自定义 filter 
 */ 
public class CustomFilter implements Filter { 

 @Override 
 public void init(FilterConfig filterConfig) throws ServletException { 
  System.out.println("init filter"); 
 } 

 @Override 
 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
   throws IOException, ServletException { 
  System.out.println("do filter"); 
  chain.doFilter(request, response); 
 } 

 @Override 
 public void destroy() { 
  System.out.println("destroy filter"); 
 } 

} 

/** 
 * 自定义 listener 
 *  
 * @author wujing 
 */ 
public class CustomListener implements ServletContextListener { 

 @Override 
 public void contextInitialized(ServletContextEvent sce) { 
  System.out.println("contextInitialized"); 
 } 

 @Override 
 public void contextDestroyed(ServletContextEvent sce) { 
  System.out.println("contextDestroyed"); 
 } 

}

注册 bean

 @Bean 
 public ServletRegistrationBean servletRegistrationBean() { 
  return new ServletRegistrationBean(new CustomServlet(), "/roncoo"); 
 } 

 @Bean 
 public FilterRegistrationBean filterRegistrationBean() { 
  return new FilterRegistrationBean(new CustomFilter(), servletRegistrationBean()); 
 } 

 @Bean 
 public ServletListenerRegistrationBean<CustomListener> servletListenerRegistrationBean() { 
  return new ServletListenerRegistrationBean<CustomListener>(new CustomListener()); 
 }

② 方法二:通过实现 ServletContextInitializer 接口直接注册

implements ServletContextInitializer { 

  @Override
  public void onStartup(ServletContext servletContext) throws ServletException {
   servletContext.addServlet("customServlet", new CustomServlet()).addMapping("/roncoo");
   servletContext.addFilter("customFilter", new CustomFilter())
    .addMappingForServletNames(EnumSet.of(DispatcherType.REQUES T), true, "customServlet");
   servletContext.addListener(new CustomListener());
  }

③ 方法三:在 SpringBootApplication 上使用@ServletComponentScan 注解后,直接通过@WebServlet
@WebFilter@WebListener注解自动注册

致谢名单

  • 冯永伟

转载于:https://blog.51cto.com/manongxiaowu/2132683

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值