SpringBoot學習篇7[自定義Servlet三大組件---Servlet、Filter、Listener]

1. 自定義Servlet

1.1 自定義步驟

步驟:

  1. 編寫類,繼承HttpServlet,重寫doGet、doPost方法
  2. 編寫自定義配置類
  3. 使用ServletRegistrationBean對象註冊之前編寫的Servlet
  4. 在自定義配置類中將ServletRegistrationBean對象注入Spring IOC容器。

自定義Servlet代碼如下

public class MyServlet extends HttpServlet {
    @Override
    public void init() throws ServletException {
        System.out.println("MyServlet 創建了");
    }

    @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.getWriter().write("Hello Servlet");
    }
}

自定義配置類代碼如下:

@Configuration
public class MyServletConfig {

    @Bean
    public ServletRegistrationBean servletRegister()
    {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
        servletRegistrationBean.setServlet(new MyServlet());
        servletRegistrationBean.addUrlMappings("/hello");

        return servletRegistrationBean;
    }
}

一個ServletRegistrationBean只能註冊一個Servlet,如果有多個Servlet要註冊,那寫多個ServletRegistrationBean就可以了。

	@Bean
    public ServletRegistrationBean registerMyServlet()
    {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
        ....
        return servletRegistrationBean;
    }

    @Bean
    public ServletRegistrationBean registerOnStartServlet()
    {
		ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
        ....
        return servletRegistrationBean;
	}

可以看到Hello Servlet成功打印出來了
在這裏插入圖片描述

1.2 Servlet參數配置

直接用ServletRegistrationBean提供的方法就可以了
在這裏插入圖片描述
比如,最常用的是設置某個Servlet跟隨項目啓動,然後在Servlet的init方法中做一些必要處理。直接調用setLoadOnStartup方法即可。

public class OnStartServlet extends HttpServlet {
    @Override
    public void init() throws ServletException {
        System.out.println("跟隨項目啓動");
    }
}

在這裏插入圖片描述

2. 自定義Filter

自定義Filter和自定義Servlet類似,在這裏要用到FilterRegistrationBean去註冊我們自定義的Filter。

編寫Filter

public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("filter 初始化了");
    }

    @Override
    public void destroy() {
        System.out.println("Filter 銷燬了");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("doFilter");
        
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

註冊Filter

	@Bean
    public FilterRegistrationBean registerMyFilter()
    {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new MyFilter());
        filterRegistrationBean.addUrlPatterns("/hello");

        return filterRegistrationBean;
    }

3. 自定義Listener

使用ServletListenerRegistrationBean將自定義Listener註冊進容器,用法跟前面兩個的用法基本一樣。

	@Bean
    public ServletListenerRegistrationBean registerMyListener()
    {
        ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean();
        bean.setListener(new MyListener());
        return bean;
    }
發佈了41 篇原創文章 · 獲贊 18 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章