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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章