SpringBootサーブレット、Fillter、Listenerをコードで登録

4797 ワード

Spring Bootは、ServletRegistrationBeanFilterRegistrationBeanServletListenerRegistrationBeanの3つを提供し、サーブレット、Filter、Listenerを配置しています.
カスタムプロファイルでWebConfig.JAvaはサーブレット、Filter、Listenerを登録します.
[java]  view plain
 copy
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 urlPatterns = new ArrayList();  
        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 urlMappings=new ArrayList();  
        urlMappings.add("/demoservlet");////アクセス、複数追加可能        registrationBean.setUrlMappings(urlMappings);  
        registrationBean.setLoadOnStartup(1);  
        return registrationBean;  
    }  
    @Bean  
    public ServletListenerRegistrationBean getDemoListener(){  
        ServletListenerRegistrationBean registrationBean = new ServletListenerRegistrationBean<>();  
        registrationBean.setListener(new DemoListener());  
        //registrationBean.setOrder(1);  
        return registrationBean;  
    } 
Spring bootにサーブレットを登録する2つの方法
しかしspring bootはtomcatを隠して、webは言うまでもありません.xmlです.幸いなことにservletを構成する別の方法が提供されています.1.@WebServicelet注記:javaeeの注記でservlet 3です.0以降で提供されます.Spring bootはこの注釈をスキャンし、この注釈のクラスをservletとしてwebコンテナに登録します.ただし、DispatcherServiceletはカスタムservletではなく、フレームワークが提供するservletなので、この方法はできません.2.サーブレットRegistrationBean:このbeanはspring bootによってservletを登録するために提供され、beanを登録するようにservletを構成することができます.
    @Bean
    public ServletRegistrationBean restServlet(){
        //       
        AnnotationConfigWebApplicationContext applicationContext
                = new AnnotationConfigWebApplicationContext();
        //base package
        applicationContext.scan("com.jerryl.rest");
        //        dispatcherServlet    
        DispatcherServlet rest_dispatcherServlet
                = new DispatcherServlet(applicationContext);

        // ServletRegistrationBean  servlet
        ServletRegistrationBean registrationBean
                = new ServletRegistrationBean(rest_dispatcherServlet);
        registrationBean.setLoadOnStartup(1);
        //  urlmapping
        registrationBean.addUrlMappings("/rest/*");
        //  name,        dispatcherServlet
        registrationBean.setName("rest");
        return registrationBean;
    }

その中で注意すべきはregistrationである.setName(「rest」)この文は重要です.nameと同じサーブレットRegistrationBeanは1つしか有効ではありません.つまり、後に登録するとnameと同じサーブレットRegistrationBeanが上書きされます.