文章目录
SpringBoot中Web原生组件注入(Servlet、Filter、Listener)
一、使用Servlet API二、使用RegistrationBean
2.1 ServletRegistrationBean
一、使用Servlet API在主类中添加@ServletComponentScan(basePackages = "cn.edu.tiangong")注解。
作用:制定原生servlet组件都放在哪里
代码:
@ServletComponentScan(basePackages = "cn.edu.tiangong")
@SpringBootApplication
public class SpringBootDemo05WebApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemo05WebApplication.class, args);
}
}
编写一个servlet实现HttpServlet,并添加注解@WebServlet(urlPatterns = "/my")
效果:直接响应,没有经过SpringBoot的拦截器
代码:
@WebServlet(urlPatterns = "/my")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("6666");
}
}
编写一个filter实现Filter接口,并且添加@WebFilter(urlPatterns = {"/css //@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = true) public class MyRegistrationConfig { @Bean public ServletRegistrationBean myServlet() { MyServlet servlet = new MyServlet(); return new ServletRegistrationBean(servlet, "/my", "/your"); } @Bean public FilterRegistrationBean myFilter() { MyFilter filter = new MyFilter(); // 1. 只拦截myServlet的路径 // return new FilterRegistrationBean(filter, myServlet()); // 2. 拦截自定义路径 FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(filter); filterRegistrationBean.setUrlPatterns(Arrays.asList("/my", "/css/*")); return filterRegistrationBean; } }



