SpringBoot学习记录(五)——Servlet、Filter、Listener配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42969074/article/details/85215055

SpringBoot中没有了web.xml文件,但是有时候需要使用Servlet,Listener,Filter,则SpringBoot中有2种方式:

         1、Servlet3中的注解@WebServlet 、@WebListener、@WebFilter来配置

         2、SpringBoot配置bean的方式进行配置

第一种方式:

使用Servlet3中的注解@WebServlet 、@WebListener、@WebFilter来配置,下面进行配置:

TestServlet

/**
 * @author Tang Haorong
 * @create 2018-12-22 21:36
 * @name
 */
@WebServlet(name = "TestServlet",urlPatterns = "/hello")
public class TestServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().print("hello word");
        resp.getWriter().flush();
        resp.getWriter().close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

TestListener

/**
 * @author Tang Haorong
 * @create 2018-12-22 21:41
 * @name
 */
@WebListener
public class TestListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("TestListener contextInitialized");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {

    }
}

TestFilter

/**
 * @author Tang Haorong
 * @create 2018-12-22 21:41
 * @name
 */
@WebFilter(urlPatterns = "/*",filterName = "TestFilter")
public class TestFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init TestFilter");
    }

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

    @Override
    public void destroy() {

    }
}

然后还要在SpringBoot的启动类上面添加一个重要的注解@ServletComponentScan,这样才能扫描到对应的servlet。

@SpringBootApplication
@ServletComponentScan
public class SpringBootServletApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootServletApplication.class, args);
    }

}

第二种方式:

SpringBoot配置bean的方式进行配置,SpringBoot提供了三种ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean,分别对应配置原生的Filter、Servlet、Listener,下面配置和能够达到一样的效果。

/**
 * @author Tang Haorong
 * @create 2018-12-22 21:57
 * @name
 */
/**
 * @configuration:指明当前类是一个配置类,可以表示为一个spring的xml配置文件
 */
@Configuration
public class ServletConfig {

    /**
     * @Bena可以表示如下
     * 将发放的返回值添加到容器中;容器中的这个组件默认id就是方法名
     * <bean id="testServletRegistration" class="org.springframework.boot.web.servlet.testServletRegistration">
     * </bean>
     * @return
     */
    @Bean
    public ServletRegistrationBean testServletRegistration() {
        ServletRegistrationBean registration = new ServletRegistrationBean(new TestServlet());
        registration.addUrlMappings("/hello");
        return registration;
    }

    @Bean
    public FilterRegistrationBean testFilterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean(new TestFilter());
        registration.addUrlPatterns("/*");
        return registration;
    }
    @Bean
    public ServletListenerRegistrationBean testServletListenerRegistrationBean(){
        ServletListenerRegistrationBean servletListenerRegistrationBean = new ServletListenerRegistrationBean();
        servletListenerRegistrationBean.setListener(new TestListener());
        return servletListenerRegistrationBean;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42969074/article/details/85215055
今日推荐