Spring Boot使用Servle、Filter、Listener(五)

1.使用@Bean方式注入

在启动类中加入如下代码。可分别使用自定义的Servlet、Filter、Listener,具体实现如下:


    @Bean
	public ServletRegistrationBean servletRegistrationBean() {
		return new ServletRegistrationBean(new ServletDemo1(),"/servlet");
	}
	
	@Bean
	public FilterRegistrationBean filterRegistrationBean() {
//		return new FilterRegistrationBean(new FilterDemo1(),servletRegistrationBean()) ;
		return new FilterRegistrationBean(new FilterDemo1()); //拦截全部
	}
	
	@Bean
	public ServletListenerRegistrationBean servletListenerRegistrationBean() {
		return new ServletListenerRegistrationBean(new ListenerDemo1());
	}

2.继承ServletContextInitializer并重写onStartup方法

具体方法实现如下:

	@Override
	public void onStartup(ServletContext ctx) throws ServletException {
		ctx.addServlet("servletDemo1", new ServletDemo1()).addMapping("/servlet");
		ctx.addFilter("filterDemo1", new     FilterDemo1()).addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");
		ctx.addListener(new ListenerDemo1());
	}

3.使用注解的方法

使用注解之前,需要在启动类加上@ServletComponentScan注解,否则加入的注解将无法扫描到。

servlet注解使用如下:

WebServlet(urlPatterns="/servlet")
public class ServletDemo1 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		out.print("    This is ");
		out.print(this.getClass());
		out.println(", using the GET method");
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		out.print("    This is ");
		out.print(this.getClass());
		out.println(", using the POST method");
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

}

filter注解使用如下:

@WebFilter(urlPatterns="/*")
public class FilterDemo1 implements Filter {
	
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println("filter is init");
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("bei lan jie le");
		chain.doFilter(request, response);
	}
	
	@Override
	public void destroy() {
		System.out.println("filter is destroy");
	}

}

Listener注解使用如下:

@WebListener
public class ListenerDemo1 implements ServletContextListener {

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

启动类如下:

@SpringBootApplication
@ServletComponentScan
public class Application //implements ServletContextInitializer
{

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}

经测试:三种方式的实现效果一致。

猜你喜欢

转载自blog.csdn.net/qq_36831305/article/details/91953659
今日推荐