SpringBoot中有两种方式可以添加 Servlet、Filter、Listener。
1.代码注册
通过ServletRegistrationBean、 FilterRegistrationBean 和 ServletListenerRegistrationBean 获得控制。
新建WebConfig 类,用于bean的注入,内容如下:
1 package com.xsjt.config; 2 3 import java.util.ArrayList; 4 import java.util.EventListener; 5 import java.util.List; 6 import org.springframework.boot.web.servlet.FilterRegistrationBean; 7 import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; 8 import org.springframework.boot.web.servlet.ServletRegistrationBean; 9 import org.springframework.context.annotation.Bean; 10 import org.springframework.context.annotation.Configuration; 11 import com.xsjt.filter.XbqFilter; 12 import com.xsjt.listener.XbqListener; 13 import com.xsjt.servlet.XbqServlet; 14 15 /** 16 * ClassName:WebConfig 17 * 通过 @bean 注入 servlet、filter、listener 18 * Date: 2017年11月6日 下午6:10:30 19 * @author Joe 20 * @version 21 * @since JDK 1.8 22 */ 23 @Configuration 24 public class WebConfig { 25 26 /** 27 * servletRegistrationBean:(使用代码注册Servlet(不需要@ServletComponentScan注解)). 28 * @author Joe 29 * Date:2017年11月6日下午6:13:29 30 * 31 * @return 32 */ 33 @Bean 34 public ServletRegistrationBean servletRegistrationBean(){ 35 ServletRegistrationBean registrationBean = new ServletRegistrationBean(); 36 registrationBean.setServlet(new XbqServlet()); 37 List<String> urlMappings = new ArrayList<String>(); 38 // 访问,可以添加多个 39 urlMappings.add("/xbq/servlet"); 40 registrationBean.setUrlMappings(urlMappings); 41 registrationBean.setLoadOnStartup(1); 42 return registrationBean; 43 } 44 45 /** 46 * getDemoFilter:(使用代码注册拦截器). 47 * @author Joe 48 * Date:2017年11月6日下午6:17:31 49 * 50 * @return 51 */ 52 @Bean 53 public FilterRegistrationBean getDemoFilter(){ 54 XbqFilter demoFilter = new XbqFilter(); 55 FilterRegistrationBean registrationBean=new FilterRegistrationBean(); 56 registrationBean.setFilter(demoFilter); 57 List<String> urlPatterns=new ArrayList<String>(); 58 urlPatterns.add("/*"); //拦截路径,可以添加多个 59 registrationBean.setUrlPatterns(urlPatterns); 60 registrationBean.setOrder(1); 61 return registrationBean; 62 } 63 64 /** 65 * getDemoListener:(使用代码 引用 监听器). 66 * @author Joe 67 * Date:2017年11月6日下午6:35:28 68 * 69 * @return 70 */ 71 @Bean 72 public ServletListenerRegistrationBean<EventListener> getDemoListener(){ 73 ServletListenerRegistrationBean<EventListener> registrationBean = new ServletListenerRegistrationBean<>(); 74 registrationBean.setListener(new XbqListener()); 75 registrationBean.setOrder(1); 76 return registrationBean; 77 } 78 }
其中,代码中 XbqServlet 、XbqFilter、XbqListener 代码如下:
1 package com.xsjt.servlet; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 /** 11 * ClassName:XbqServlet 12 * 通过 代码注册Servlet 13 * Date: 2017年11月6日 下午5:13:10 14 * @author Joe 15 * @version 16 * @since JDK 1.8 17 */ 18 public class XbqServlet extends HttpServlet{ 19 20 private static final long serialVersionUID = 1L; 21 22 @Override 23 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 24 this.doPost(req, resp); 25 } 26 27 @Override 28 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 29 resp.setCharacterEncoding("UTF-8"); 30 resp.setContentType("text/html"); 31 PrintWriter out = resp.getWriter(); 32 out.println("<html>"); 33 out.println("<head>"); 34 out.println("<title>Hello World</title>"); 35 out.println("</head>"); 36 out.println("<body><center>"); 37 out.println("<h3>我是通过代码注册Servlet</h3>"); 38 out.println("</center></body>"); 39 out.println("</html>"); 40 } 41 }