Spring Boot学习笔记(10)—— 注册自定义Servlet三大组件Servlet/Filter/Listener

以前 Web 应用使用外置Tomcat 容器部署,可在 web.xml 文件中注册 Servlet 三大组件;
而由于 Spring Boot 默认是以 jar 包的方式运行嵌入式Servlet容器来启动应用,没有web.xml文件,Spring提供以下Bean来注册三大组件:
1、ServletRegistrationBean :注册自定义Servlet
2、FilterRegistrationBean :注册自定义Filter
3、ServletListenerRegistrationBean :注册自定义Listener

自定义Servlet组件

定义一个servlet

/**
 * 自定义Servlet组件
 * @author asong
 *
 */
public class HelloServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.getWriter().write("HelloServlet success...");
	}
}

定义一个配置,将自定义的Servlet注入Spring容器

//自定义注册servlet相关组件
@Configuration
public class MyServletConfig {
	@Bean
	public ServletRegistrationBean helloServlet() {
		//参数1:自定义的servlet,参数2:servlet的url映射
		ServletRegistrationBean bean = new ServletRegistrationBean(new HelloServlet(), "/hello");
		
		//平常在 web.xml 中给servlet标签配置的属性,在这里都可以设置
		bean.setLoadOnStartup(1);
		return bean;
	}
}
自定义Filter
/**
 * 自定义过滤器组件
 * @author asong
 *
 */
public class MyFilter implements Filter{
	@Override
	public void destroy() {
		System.out.println("filter销毁");
	}
	@Override
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
			throws IOException, ServletException {
		System.out.println("MyFilter过滤完成");
		//放行
		filterChain.doFilter(servletRequest, servletResponse);
	}
	@Override
	public void init(FilterConfig arg0) throws ServletException {
		System.out.println("filter初始化");
	}
}

定义一个配置,将自定义的Filter组件注入容器

//自定义注册servlet相关组件
@Configuration
public class MyServletConfig {
	/**
	 * 注册自定义过滤器组件
	 * @return
	 */
	@Bean
	public FilterRegistrationBean myFilter() {
		FilterRegistrationBean bean = new FilterRegistrationBean();
		//设置过滤器
		bean.setFilter(new MyFilter());
		bean.setUrlPatterns(Arrays.asList("/*"));
		
		return bean;
	}
}
自定义Listener组件
/**
 * 自定义监听器,监听应用的启动和销毁
 * @author asong
 *
 */
public class MyListener implements ServletContextListener{
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		System.out.println("SpringBoot.Servlet应用销毁");
	}
	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		System.out.println("SpringBoot.Servlet应用启动");
	}
}

定义一个配置,将自定义的Listener组件注入容器

/**
	 * 注册自定义监听组件
	 * @return
	 */
	@Bean
	public ServletListenerRegistrationBean myListener() {
		return new ServletListenerRegistrationBean(new MyListener());
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章