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());
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章