26. SpringBoot 注册原始Servlet三大组件【Servlet、Filter、Listener】
由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文 件。 注册三大组件用以下方式:
分别是3个组件: 1 . ServletRegistrationBean:servlet 2. FilterRegistrationBean 过滤器 3.ServletListenerRegistrationBean 监听器
首先先创建这3大件的类,实现各自的父类 具体看代码:
A.Servket:

package com.bihu.component; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; //继承HttpServlet 重写你想实现方法即可 public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write("Hello, MyServlet !"); //那就简简单单打印一句话 } }
B.Filter

package com.bihu.component; import javax.servlet.*; import java.io.IOException; //过滤器是实现filter接口【javax.servlet中那个】 public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.print("拦截到一个请求 - IP:"); System.out.println(servletRequest.getLocalName()); System.out.println("过滤器正常运作---已放行"); //随便打印一句话 filterChain.doFilter(servletRequest,servletResponse); //放行 } @Override public void destroy() { } }
C.Listener

package com.bihu.component; import javax.servlet.ServletRequestEvent; import javax.servlet.ServletRequestListener; //监听器实现ServletXXXListener XXX代表...学过JSP 的你懂的 public class MyListener implements ServletRequestListener { @Override public void requestDestroyed(ServletRequestEvent servletRequestEvent) { System.out.println("监听到一个销毁的请求 - IP:"); System.out.println(servletRequestEvent.getServletRequest().getLocalName()); //随便打印一句话 } @Override public void requestInitialized(ServletRequestEvent servletRequestEvent) { System.out.println("监听到一个请求 - IP:"); System.out.println(servletRequestEvent.getServletRequest().getLocalName()); //随便打印一句话 } }
然后我们吧他们三个分别注册 - 》 3个组件加入容器中:

package com.bihu.config; import com.bihu.component.MyFilter; import com.bihu.component.MyListener; import com.bihu.component.MyServlet; 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 java.io.File; import java.util.Arrays; @Configuration public class ServletConfig { //注册Servlet @Bean public ServletRegistrationBean mServlet(){ //下面直接用匿名函数写 当然你可以先New 然后分开写。 return new ServletRegistrationBean(new MyServlet(),"/servlet"); } //-------------------------------------------------------- //注册Filter @Bean public FilterRegistrationBean mFilter(){ //你可以点源码进去看看 匿名函数直接写不方便 我们分开: FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(new MyFilter()); filterRegistrationBean.setUrlPatterns(Arrays.asList("/*")); //参数是一个集合 ,转换一下然后拦截全部 return filterRegistrationBean; } //-------------------------------------------------------- //注册Listener @Bean public ServletListenerRegistrationBean mListener(){ return new ServletListenerRegistrationBean(new MyListener()); //直接用匿名函数 } }
运行:
本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/15154382.html