当前位置: 代码迷 >> 综合 >> SpringBoot如何注册三大组件(servlet,Listener,Filter)
  详细解决方案

SpringBoot如何注册三大组件(servlet,Listener,Filter)

热度:83   发布时间:2024-03-08 10:07:25.0

         今日学到springboot如何注册三大组件,记录下来:

         由于springboot默认是以jar包的方式启动嵌入式的servlet容器来启动springboot的web应用,没有web.xml文件。注册三大组件用以下方式:

1. servletRegisstrationBean

  自定义一个MyServlet :

public class MyServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req,resp);//这里只调用了一下doGet方法,可以写自己的逻辑。}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("hello world");//像浏览器输出字符串}
}

2.FilterRegistrationBean:

自定义一个过滤器:

//要想成为filter就必须实现接口里面的方法
public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("过滤器init");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("过滤器执行doFilter");//输出之后要放行出去chain.doFilter(request,response);}@Overridepublic void destroy() {System.out.println("过滤器destroy");}
}

3.ServletListenerRegistrationBean

自定义一个监听器:

//监听器有很多,可以写自己的,实现不同接口的方法
public class MyListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {System.out.println("web应用启动");}@Overridepublic void contextDestroyed(ServletContextEvent sce) {System.out.println("web应用销毁");}
}

自定义之后,讲他们注册到配置类中:

@Configuration//说明这是一个配置类
public class MyServerConfig {//注册三大组件@Bean//加到容器中public ServletRegistrationBean myServlet(){ServletRegistrationBean registrationBean =new ServletRegistrationBean(new MyServlet(),"myServlet");//......自己设置要修改的属性return registrationBean;}@Bean//加在容器中public FilterRegistrationBean myFilter(){FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();filterRegistrationBean.setFilter(new MyFilter());//设置拦截hello和myFilter两个请求filterRegistrationBean.setUrlPatterns(Arrays.asList("/hello","/myFilter"));return filterRegistrationBean;}@Bean //加到容器中public ServletListenerRegistrationBean myListener(){ServletListenerRegistrationBean<MyListener> registrationBean =new ServletListenerRegistrationBean<>();//......设置一些属性啥的return registrationBean;}
}

 

  相关解决方案