這篇文章將實現通過bean和註解的方式添加Servlet三大組件
前言
應用場景: 在使用第三方類庫時,更多的提供的是java.servlet中的組件,不用與SpringMVC耦合
eg:shiro權限認證:需要配置shiro提供的ShiroFilterFactoryBean
總的實現過程:
bean的方式: 在mvc的配置類中,添加三大組件的配置,
- ServletRegistrationBean --> Servlet
- FilterRegistrationBean --> Filter
- ServletListenerRegistrationBean -->Listener
註解的方式:在啓動類中開啓掃描註解@ServletComponentScan,然後分別創建三個組件類,繼承接口,並用註解表明
- Servlet -->extend HttpServlet @WebServlet(urlPatterns = "/test/02")
- Filter -->implements Filter @WebFilter("/test/*")
- Listener --> implements ServletContextListener @WenListener
實現
Bean
@Bean
public ServletRegistrationBean testServlet01() {
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean<>(new HttpServlet() {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
logger.info("[doGet][uri: {}]",req.getRequestURI());
}
});
servletRegistrationBean.setUrlMappings(Collections.singleton("/test/01"));
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean testFilter01() {
FilterRegistrationBean<Filter> filterFilterRegistrationBean = new FilterRegistrationBean<>(new Filter() {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
logger.info("[doFilter]");
filterChain.doFilter(servletRequest,servletResponse);
}
});
filterFilterRegistrationBean.setUrlPatterns(Collections.singleton("/test/*"));
return filterFilterRegistrationBean;
}
@Bean
public ServletListenerRegistrationBean testListener01() {
return new ServletListenerRegistrationBean<>(new ServletContextListener() {
@Override
public void contextInitialized(ServletContextEvent sce) {
logger.info("[contextInitialized]");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
});
}
註解
@WebServlet(urlPatterns = "/test/02")
public class TestServlet02 extends HttpServlet {
private Logger logger = LoggerFactory.getLogger(getClass());
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
logger.info("[doGet][uri: {}]", req.getRequestURI());
}
}
// TestFilter02.java
@WebFilter("/test/*")
public class TestFilter02 implements Filter {
private Logger logger = LoggerFactory.getLogger(getClass());
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
logger.info("[doFilter]");
filterChain.doFilter(servletRequest, servletResponse);
}
}
@WebListener
public class TestServletContextListener02 implements ServletContextListener {
private Logger logger = LoggerFactory.getLogger(getClass());
@Override
public void contextInitialized(ServletContextEvent sce) {
logger.info("[contextInitialized]");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}
@SpringBootApplication
@ServletComponentScan
public class SpringbootSpringmvcCommonresultApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootSpringmvcCommonresultApplication.class, args);
}
}
謝謝觀看
原文參考:傳送門