SpringBootサーブレット、Fillter、Listenerをコードで登録
4797 ワード
Spring Bootは、
カスタムプロファイルで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を構成することができます.
その中で注意すべきはregistrationである.setName(「rest」)この文は重要です.nameと同じサーブレットRegistrationBeanは1つしか有効ではありません.つまり、後に登録するとnameと同じサーブレットRegistrationBeanが上書きされます.
ServletRegistrationBean
、FilterRegistrationBean
、ServletListenerRegistrationBean
の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が上書きされます.