SpringBoot(四)-- 整合Servlet、Filter、Listener
2017-11-01 22:33
721 查看
SpringBoot中有两种方式可以添加 Servlet、Filter、Listener。
新建WebConfig 类,用于bean的注入,内容如下:
其中,代码中 XbqServlet 、XbqFilter、XbqListener 代码如下:
View Code
1) Servlet
2) Filter
3) Listener
1.代码注册
通过ServletRegistrationBean、 FilterRegistrationBean 和 ServletListenerRegistrationBean 获得控制。新建WebConfig 类,用于bean的注入,内容如下:
package com.xsjt.config; import java.util.ArrayList; import java.util.EventListener; import java.util.List; import org.springframework.boot.web.servlet.FilterRegistrationBean; 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.Configuration; import com.xsjt.filter.XbqFilter; import com.xsjt.listener.XbqListener; import com.xsjt.servlet.XbqServlet; /** * ClassName:WebConfig * 通过 @bean 注入 servlet、filter、listener * Date: 2017年11月6日 下午6:10:30 * @author Joe * @version * @since JDK 1.8 */ @Configuration public class WebConfig { /** * servletRegistrationBean:(使用代码注册Servlet(不需要@ServletComponentScan注解)). * @author Joe * Date:2017年11月6日下午6:13:29 * * @return */ @Bean public ServletRegistrationBean servletRegistrationBean(){ ServletRegistrationBean registrationBean = new ServletRegistrationBean(); registrationBean.setServlet(new XbqServlet()); List<String> urlMappings = new ArrayList<String>(); // 访问,可以添加多个 urlMappings.add("/xbq/servlet"); registrationBean.setUrlMappings(urlMappings); registrationBean.setLoadOnStartup(1); return registrationBean; } /** * getDemoFilter:(使用代码注册拦截器). * @author Joe * Date:2017年11月6日下午6:17:31 * * @return */ @Bean public FilterRegistrationBean getDemoFilter(){ XbqFilter demoFilter = new XbqFilter(); FilterRegistrationBean registrationBean=new FilterRegistrationBean(); registrationBean.setFilter(demoFilter); List<String> urlPatterns=new ArrayList<String>(); urlPatterns.add("/*"); //拦截路径,可以添加多个 registrationBean.setUrlPatterns(urlPatterns); registrationBean.setOrder(1); return registrationBean; } /** * getDemoListener:(使用代码 引用 监听器). * @author Joe * Date:2017年11月6日下午6:35:28 * * @return */ @Bean public ServletListenerRegistrationBean<EventListener> getDemoListener(){ ServletListenerRegistrationBean<EventListener> registrationBean = new ServletListenerRegistrationBean<>(); registrationBean.setListener(new XbqListener()); registrationBean.setOrder(1); return registrationBean; } }
其中,代码中 XbqServlet 、XbqFilter、XbqListener 代码如下:
package com.xsjt.listener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * ClassName:JoeListener * Date: 2017年11月6日 下午6:28:29 * @author Joe * @version * @since JDK 1.8 */ public class XbqListener implements ServletContextListener{ private static Logger logger = LoggerFactory.getLogger(XbqListener.class); @Override public void contextInitialized(ServletContextEvent sce) { logger.info("--xbq-监听器-ServletContext 初始化"); logger.info(sce.getServletContext().getServerInfo()); } @Override public void contextDestroyed(ServletContextEvent sce) { logger.info("--xbq-监听器-ServletContext 销毁"); } }
View Code
2.通过注解自动注册
在 SpringBootApplication 上使用@ServletComponentScan 注解后,Servlet、Filter、Listener 可以直接通过 @WebServlet(urlPatterns = "/test/*")、@WebFilter、@WebListener 注解自动注册,这些注解都是JDK的,无需其他代码。1) Servlet
package com.xsjt.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * ClassName:XbqServlet * 通过 @WebServlet 注解 整合Servlet * Date: 2017年11月6日 下午5:13:10 * @author Joe * @version * @since JDK 1.8 */ @WebServlet(urlPatterns = "/joe/*") public class JoeServlet extends HttpServlet{ private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setCharacterEncoding("UTF-8"); resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hello World</title>"); out.println("</head>"); out.println("<body><center>"); out.println("<h3>我是通过 @WebServlet 注解注册Servlet的</h3>"); out.println("</center></body>"); out.println("</html>"); } }
2) Filter
package com.xsjt.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.annotation.Order; /** * ClassName:JoeFilter * 自定义 Filter * @Order注解表示执行过滤顺序,值越小,越先执行 * Date: 2017年11月6日 下午6:01:33 * @author Joe * @version * @since JDK 1.8 */ @Order(1) @WebFilter(filterName = "joeFilter", urlPatterns = "/*") public class JoeFilter implements Filter { private static Logger logger = LoggerFactory.getLogger(JoeFilter.class); @Override public void init(FilterConfig filterConfig) throws ServletException { logger.info("--joe--初始化JoeFilter!"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest)request; logger.info(req.getRequestURL() + "---joe---> doFilter"); chain.doFilter(request, response); } @Override public void destroy() { logger.info("--joe--销毁JoeFilter!"); } }
3) Listener
package com.xsjt.listener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * ClassName:JoeListener * Date: 2017年11月6日 下午6:28:29 * @author Joe * @version * @since JDK 1.8 */ @WebListener public class JoeListener implements ServletContextListener{ private static Logger logger = LoggerFactory.getLogger(JoeListener.class); @Override public void contextInitialized(ServletContextEvent sce) { logger.info("--Joe-监听器-ServletContext 初始化"); logger.info(sce.getServletContext().getServerInfo()); } @Override public void contextDestroyed(ServletContextEvent sce) { logger.info("--Joe-监听器-ServletContext 销毁"); } }
3.源码下载
https://gitee.com/xbq8023/spring-boot-learn相关文章推荐
- Spring Boot 编写Servlet、Filter、Listener、Interceptor的方法
- 【spring】SpringBoot之Servlet、Filter、Listener配置
- servlet3.0 新特性和springboot Listener和filter案例
- springboot 使用Servlet,Filter,Listener的方法
- springboot 2.0.0.M7 之 Servlet Listener Filter
- SpringBoot之Servlet、Filter、Listener配置
- SpringBoot初始教程之Servlet、Filter、Listener配置
- Spring Boot参考教程(六)Spring Boot配置Servlet,Filter,Listener,Interceptor
- Spring Boot - Web 应用开发 - Servlet, Filter, Listener
- springboot注册servlet,Filter,Listener
- spring-boot如何定义一个servlet,filter,listener
- 18.玩转Spring Boot 注册Servlet、Filter、Listener
- SpringBoot初始教程之Servlet、Filter、Listener配置(七)
- SpringBoot初始教程之Servlet、Filter、Listener配置(七)
- Spring Boot Servlet Filter Listener
- SpringBoot中Servlet&Listener&Filter的应用
- SpringBoot 配置 Servlet、Filter、Listener
- Spring Boot中Servlet&Filter&Listener&Interceptor的使用
- Spring Boot使用Servlet、Filter或Listener的方式
- spring boot(18)-servlet、filter、listener