Using custom Servlet, Filter, Listener in SpringBoot

There are two ways to use custom Servlet, Filter, Listener in springboot  

1. Use @ServletComponentScan to define the package directory to be scanned, Servlet, Filter, Listener can be automatically registered by @WebServlet, @WebListener, @WebFilter.

@Controller
@SpringBootApplication
@ComponentScan(basePackages={"com.codingos.demo","com.codingos.springbootlession1"})
@ServletComponentScan(basePackages="com.codingos.springbootlession1.demo")
public class SpringBootLession1Application {
    public static void main(String[] args) {
		SpringApplication.run(SpringBootLession1Application.class, args);
	}
}
@WebServlet(name="servletDemo", urlPatterns="/servletDemo", initParams= {@WebInitParam(name="myname",value="myvalue")})
public class ServletDemo extends HttpServlet {

@WebFilter(servletNames="servletDemo")
public class FilterDemo extends OncePerRequestFilter {

@WebListener
public class RequestListenerDemo implements ServletRequestListener {

2. Customize some Servlets, Filters, Listeners, and then use @Bean to register them in the Application class

package com.codingos.springbootlession1;

import java.util.EventListener;
import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.codingos.springbootlession1.demo.FilterDemo2;
import com.codingos.springbootlession1.demo.RequestListenerDemo2;
import com.codingos.springbootlession1.demo.ServletDemo2;

@Controller
@SpringBootApplication
@ComponentScan(basePackages={"com.codingos.demo","com.codingos.springbootlession1"})
@ServletComponentScan(basePackages="com.codingos.springbootlession1.demo")
public class SpringBootLession1Application {
	
	@Autowired
	private StringRedisTemplate template;
	

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

	@Bean
	public static ServletRegistrationBean servletRegistrationBean() {
		ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
		servletRegistrationBean.setServlet(new ServletDemo2());
		servletRegistrationBean.setName("servletDemo2");
		servletRegistrationBean.addUrlMappings("/spring-boot/servletDemo2");
		servletRegistrationBean.addInitParameter("myname", "myvalue");
		return servletRegistrationBean;
	}
	
	@Bean
	public static FilterRegistrationBean filterRegistrationBean() {
		FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
		filterRegistrationBean.setFilter(new FilterDemo2());
		filterRegistrationBean.addServletNames("servletDemo2");
		return filterRegistrationBean;
	}
	
	@Bean
	public static ServletListenerRegistrationBean<EventListener> ServletListenerRegistrationBean() {
		ServletListenerRegistrationBean<EventListener> servletListenerRegistrationBean = new ServletListenerRegistrationBean<>();
		servletListenerRegistrationBean.setListener(new RequestListenerDemo2());
		return servletListenerRegistrationBean;
	}
}
package com.codingos.springbootlession1.demo;

import java.io.IOException;
import java.io.Writer;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletDemo2 extends HttpServlet {

	private static final long serialVersionUID = 4982760566703313419L;
	
	private String value;

	@Override
	public void init(ServletConfig config) throws ServletException {
		value = config.getInitParameter("myname");
		super.init(config);
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		Writer writer = resp.getWriter();
		req.getServletContext().log("ServletDemo2 doGet");
		writer.write("<html><body>ServletDemo2 AAAAAAA "+ value +"</body></html>");
		//super.doGet(req, resp);
	}
}
package com.codingos.springbootlession1.demo;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.filter.OncePerRequestFilter;

public class FilterDemo2 extends OncePerRequestFilter {

	@Override
	protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
			throws ServletException, IOException {
		ServletContext servletContext = request.getServletContext();
		servletContext = getServletContext();
//		servletContext.log("servletDemo2 was filtered");
		servletContext.log(request.getRequestURI() + "servletDemo2 was filtered");
		filterChain.doFilter(request, response);
	}

}
package com.codingos.springbootlession1.demo;

import javax.servlet.ServletContext;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;

public class RequestListenerDemo2 implements ServletRequestListener {


	@Override
	public void requestInitialized(ServletRequestEvent sre) {
//		HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
//		ServletContext servletContext = request.getServletContext();
		ServletContext servletContext = sre.getServletContext();
		servletContext.log("************ RequestListenerDemo2 requestInitialized ******");

	}
	
	@Override
	public void requestDestroyed(ServletRequestEvent sre) {
		ServletContext servletContext = sre.getServletContext();
		servletContext.log("************ RequestListenerDemo2 requestDestroyed ******");
	}

}

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325461701&siteId=291194637