SpringBoot中注入Servlet&Filter&Listener

SpringBoot中注入Servlet&Filter&Listener

1.基本介绍

2.1应用实例–(演示注解方式注入 Servlet、Filter、Listener)

  • 1.1 注入servlet
/**
 - 1. @WebServlet标识要注入该 Servlet
 - 2. urlPatterns = {"/servlet01", "/servlet02"}:是映射路径
 - 3. @WebServlet(urlPatterns = "/servlet01") :映射一个路径
 - 4.注入的原生 Servlet不会被 Spring-Boot拦截器拦截
*/
@WebServlet(urlPatterns = {"/servlet01"})
public class Servlet01 extends HttpServlet 
{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
	throws ServletException, IOException
	 {
	 	resp.setContentType("text/html;charset=UTF-8");
		resp.getWriter().write("hello, servlet");
	}
}
  • 1.2在主程序配置要扫描包/子包下原生方式注入的servlet
//扫描 com.fsh.springboot 包下的原生方式注入的 Servlet
@ServletComponentScan(basePackages = "com.fsh.springboot")
@SpringBootApplication
public class Application
 {
	public static void main(String[] args) 
	{
		SpringApplication.run(Application.class, args);
	}
}
  • 2.注入Fliter
/**
 - 1. @WebFilter标识要注入该 Filter
 - 2. urlPatterns = {"/css/*", "/images/*"}:是映射路径
 - 3.过滤器配置的 urlPatterns也会经过 Spring-Boot拦截器
*/
@Slf4j
@WebFilter(urlPatterns = {"/css/*", "/images/*"})
public class Filter01 implements Filter 
{
	@Override
	public void init(FilterConfig filterConfig) throws ServletException 
	{
		log.info("=====Filter01 init()=====");
	}
	
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain 	chain)throws IOException, ServletException 
	{
		log.info("=====Filter01 doFilter()=====");
		chain.doFilter(request, response);
	}
	
	@Override
	public void destroy() 
	{
		log.info("=====Filter01 destroy()=====");
	}
}
  • 3.注入Listener
@Slf4j
@WebListener
public class Listener01 implements ServletContextListener 
{
	@Override
	public void contextInitialized(ServletContextEvent sce)
 	{
		log.info("Listener01 contextInitialized() 项目初始化完成");
	}
	
	@Override
	public void contextDestroyed(ServletContextEvent sce)
	{
		log.info("Listener01 contextDestroyed() 项目销毁 ");
	}
}

2.2应用实例–(RegistrationBean 注入 Servlet、Filter、Listener)

  • 注入Servlet、Filter、Listener
/**
 * 1. (proxyBeanMethods = true):保证依赖的组件始终是单实例的
 * 2. RegistrationBean 注入 Servlet、Filter、Listene 需要去掉原生方式注入相关的注解(@WebServlet、@WebFilter、@WebListener)
*/
@Configuration(proxyBeanMethods = true)
public class RegisterConfig
{
	@Bean
	public ServletRegistrationBean servlet_()
	 {
		Servlet01 servlet01 = new Servlet01();
		return new ServletRegistrationBean(servlet01, "/servlet01");
	}
	
	@Bean
	public FilterRegistrationBean filter_()
	 {
		Filter01 filter01 = new Filter01();
		FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(filter01);
		filterRegistrationBean.setUrlPatterns(Arrays.asList("/images/*", "/css/*"));
		return filterRegistrationBean;
	}
	
	@Bean
	public ServletListenerRegistrationBean listener_() 
	{
		Listener01 listener01 = new Listener01();
		return new ServletListenerRegistrationBean(listener01);
	}
}

3.注意事项

  • 请求 Servlet 时,不会到达 DispatherServlet, 因此也不会达到拦截器
    • 原因:
    • 1.注入的 Servlet 会存在 Spring 容器
    • 2.DispatherServlet 也存在 Spring 容器
    • 3.Tomcat 在对 Servlet url 匹配的原则, 多个 servlet 都能处理到
      同一层路径, 精确优先原则/最长前缀匹配原则.)
      请添加图片描述
  • 29
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xyz`

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值