zoukankan      html  css  js  c++  java
  • 2.4 Spring boot 配置Servelt、Filter、Listener

    Spring Boot集成了servlet容器,当我们在pom文件中增加spring- boot-starter-web的maven依赖时,不做任何web相关的配置便能提供web服务,这还得归于spring boot 自动配置的功能(因为加了EnableAutoConfiguration的注解),帮我们创建了一堆默认的配置,以前在web.xml中配置,现在都可 以通过spring bean的方式进行配置,由spring来进行生命周期的管理,大多数情况下,我们需要重载这些配置(例如修改服务的启动端 口,contextpath,filter,listener,servlet,session超时时间等)

    本节讲解在SpringBoot中如何配置ServeltFilterListener。大家可能已经注意到,在SpringBoot中,不光将Spring的配置文件省略了,连web容器的web.xml文件都省略了,而之前,我们通常都是将Servelt、Filter、Listener等配置在web.xml中配置的,而SpringBoot提供了更加简化的配置。在讲解如何配置之前,我们先将演示用Servelt、Filter、Listener的准备好。

    DemoServelt.java

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    public class DemoServlet extends HttpServlet{
     
        /**
         * 
         */
        private static final long serialVersionUID = 2600143224322327782L;
     
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
                System.out.println("==>DemoServlet接受请求");
            resp.getWriter().write("DemoServlet access success");
            
        }
     
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            this.doGet(req, resp);
        }
        
    }

    DemoFilter.java

    import java.io.IOException;
     
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
     
    public class DemoFilter implements Filter{
     
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            System.out.println("==>DemoFilter启动");
        }
     
        @Override
        public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
            System.out.println("==>DemoFilter拦截请求");
            chain.doFilter(request, response);
            
        }
     
        @Override
        public void destroy() {
            
        }
    }

    DemoListener.java

    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
     
    public class DemoListener implements ServletContextListener{
     
        @Override
        public void contextInitialized(ServletContextEvent sce) {
            System.out.println("==>DemoListener启动");
            
        }
     
        @Override
        public void contextDestroyed(ServletContextEvent sce) {
            
        }
     
    }

    在准备好这些文件之后,我们开始配置。SpringBoot提供了2种方式配置Servlet、Listener、Filter。一种是基于RegistrationBean,另一种是基于注解。

    1、基于RegistrationBean的配置

    spring boot提供了 ServletRegistrationBeanFilterRegistrationBeanServletListenerRegistrationBean这3个东西来进行配置Servlet、Filter、Listener

    编写配置类WebConfig.java

    import java.util.ArrayList;
    import java.util.EventListener;
    import java.util.List;
     
    import org.springframework.boot.context.embedded.FilterRegistrationBean;
    import org.springframework.boot.context.embedded.ServletListenerRegistrationBean;
    import org.springframework.boot.context.embedded.ServletRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
     
    import com.tianshouzhi.springbootstudy.web.filter.DemoFilter;
    import com.tianshouzhi.springbootstudy.web.listener.DemoListener;
    import com.tianshouzhi.springbootstudy.web.servlet.DemoServlet;
     
    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter{
        @Bean
        public FilterRegistrationBean getDemoFilter(){
            DemoFilter demoFilter=new DemoFilter();
            FilterRegistrationBean registrationBean=new FilterRegistrationBean();
            registrationBean.setFilter(demoFilter);
            List<String> urlPatterns=new ArrayList<String>();
            urlPatterns.add("/*");//拦截路径,可以添加多个
            registrationBean.setUrlPatterns(urlPatterns);
            registrationBean.setOrder(1);
            return registrationBean;
        }
        @Bean
        public ServletRegistrationBean getDemoServlet(){
            DemoServlet demoServlet=new DemoServlet();
            ServletRegistrationBean registrationBean=new ServletRegistrationBean();
            registrationBean.setServlet(demoServlet);
            List<String> urlMappings=new ArrayList<String>();
            urlMappings.add("/demoservlet");////访问,可以添加多个
            registrationBean.setUrlMappings(urlMappings);
            registrationBean.setLoadOnStartup(1);
            return registrationBean;
        }
        @Bean
        public ServletListenerRegistrationBean<EventListener> getDemoListener(){
            ServletListenerRegistrationBean<EventListener> registrationBean
                                       =new ServletListenerRegistrationBean<>();
            registrationBean.setListener(new DemoListener());
    //        registrationBean.setOrder(1);
            return registrationBean;
        }
    }

    这个类编写好,就相当于已经完成了配置。

    运行Application.java,控制台输出:

    QQ截图20160219222237.png

    可以看到Listener和Filter在应用启动的时候,都初始化了。

    在浏览器中访问servlet:http://localhost:8080/demoservlet

    QQ截图20160219222540.png

    可以看到servlet可以接受到请求并响应。而在控制台中,我们还可以看到

    QQ截图20160219222750.png

    说明对于servlet的请求,Filter是可以进行成功拦截的。

    2、基于注解的配置

    转载于:http://www.tianshouzhi.com/api/tutorials/springboot/89

  • 相关阅读:
    Zabbix 管理界面中文出现乱码解决方法
    zabbix应用监控实践
    linux系统基础优化
    linux下创建软链--laravel软链
    php使用webservice调用C#服务端/调用PHP服务端
    php+ajax远程加载避免重复提交
    date
    函数类型
    DOM及其扩展
    字符串的截取方法
  • 原文地址:https://www.cnblogs.com/it-deepinmind/p/13490527.html
Copyright © 2011-2022 走看看