SpringBoot中Web原生组件注入(Servlet、Filter、Listener)
SpringBoot中Web原生组件注入(Servlet、Filter、Listener)文章目录SpringBoot中Web原生组件注入(Servlet、Filter、Listener)一、使用Servlet API二、使用RegistrationBean2.1 ServletRegistrationBean一、使用Servlet API在主类中添加@ServletComponentScan(b
·
SpringBoot中Web原生组件注入(Servlet、Filter、Listener)
文章目录
- SpringBoot中Web原生组件注入(Servlet、Filter、Listener)
一、使用Servlet API
-
在主类中添加
@ServletComponentScan(basePackages = "cn.edu.tiangong")
注解。 -
编写一个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/*","/image/*"})
注解-
效果:对根目录下css和image路径下的所有访问请求进行过滤操作
-
代码:
@Log4j2 @WebFilter(urlPatterns = {"/css/*","/image/*"}) // /*是servlet的写法 // /**是Spring的写法 public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { log.info("MyFilter初始化了"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { log.info("MyFilter工作"); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { log.info("MyFilter销毁了"); } }
-
二、使用RegistrationBean
- ServletRegistrationBean
- FilterRegistrationBean
- ServletListenerRegistrationBean
2.1 ServletRegistrationBean
-
先写一个Servlet,这个servlet不用添加
@WebServlet
注解public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write("6666"); } }
-
再写一个MyRegistrationConfig,添加
@Configuration
注解/** * 【注意事项】 * 1. 没有添加(proxyBeanMethods = false),这样可以保证依赖的组件始终是单实例的,防止容器中组件冗余 * 2. 为什么自己写的myServlet是直接响应的没有经过SpringBoot的拦截器??? */ //@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; } }
更多推荐
已为社区贡献1条内容
所有评论(0)