SpringBootのサーブレット、Filter、Listener構成
1.紹介
以前の記事で見るとSpringBootは多くの構成をカバーしているが、いくつかの構成はオリジナルのサーブレットで行うことが多いが、SpringBootではwebを構成する必要はない.xmlはパッケージ化されたjarパッケージの形式になる可能性があるので、この場合どう解決しますか?SpringBootは2つのソリューションを提供しています
2.クイックスタート
2.1方案一
方案一原生サーブレット3を採用する.0の注記を配置する、@WebService,@WebListener,@WebFilterはService 3である.0 apiで提供する注釈は、注釈によってwebに完全に代わることができる.xmlの構成は、次の簡単な構成です.
IndexServlet
IndexListener
IndexFilter
上の構成が完了しました.コアの注記@サーブレットComponentScanを構成する必要があります.具体的な構成項目は以下の通りです.スキャンのパスを構成できます.
注記を入り口に追加して起動すればいいです
2.2方案二
シナリオ2は独自のSpringBootでbeanを構成する方式で構成されており、SpringBootでは3種類のBeanFilterRegistrationBean、サーブレットRegistrationBean、サーブレットListenerRegistrationBeanがそれぞれ原生のFilter、サーブレット、Listenerを構成することに対応しており、以下に提供する3つの構成とシナリオ1で採用する方式で統一的な効果が得られる
3.まとめ
両方式は使用に差があるが、内部SpringBootの実現においてはサーブレット3を使用するも差がない.0注記は、スキャン注記によってこの3つのbeanに変換されたFilterRegistrationBean、サーブレットRegistrationBean、サーブレットListenerRegistrationBean
4.拡張
実際にSpringBootはSpringMvcを使用している間にDispatcherServiceletを構成する必要はありません.自動構成されているので、初期構成パラメータを追加するには、次のようにします.
DispatcherServiceletを注入してから、サーブレットRegistrationBeanで動的に初期パラメータを追加することができます.
出典:https://blog.csdn.net/king_is_everyone/article/details/53116744
以前の記事で見るとSpringBootは多くの構成をカバーしているが、いくつかの構成はオリジナルのサーブレットで行うことが多いが、SpringBootではwebを構成する必要はない.xmlはパッケージ化されたjarパッケージの形式になる可能性があるので、この場合どう解決しますか?SpringBootは2つのソリューションを提供しています
2.クイックスタート
2.1方案一
方案一原生サーブレット3を採用する.0の注記を配置する、@WebService,@WebListener,@WebFilterはService 3である.0 apiで提供する注釈は、注釈によってwebに完全に代わることができる.xmlの構成は、次の簡単な構成です.
IndexServlet
@WebServlet(name = "IndexServlet",urlPatterns = "/hello")
public class IndexServlet extends HttpServlet {
@Override
public 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);
}
}
IndexListener
@WebListener
public class IndexListener implements ServletContextListener {
private Log log = LogFactory.getLog(IndexListener.class);
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
log.info("IndexListener contextInitialized");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
IndexFilter
@WebFilter(urlPatterns = "/*", filterName = "indexFilter")
public class IndexFilter implements Filter {
Log log = LogFactory.getLog(IndexFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("init IndexFilter");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
log.info("doFilter IndexFilter");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
上の構成が完了しました.コアの注記@サーブレットComponentScanを構成する必要があります.具体的な構成項目は以下の通りです.スキャンのパスを構成できます.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(ServletComponentScanRegistrar.class)
public @interface ServletComponentScan {
@AliasFor("basePackages")
String[] value() default {};
@AliasFor("value")
String[] basePackages() default {};
Class>[] basePackageClasses() default {};
}
注記を入り口に追加して起動すればいいです
@SpringBootApplication
@ServletComponentScan
public class AppApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(AppApplication.class, args);
}
}
2.2方案二
シナリオ2は独自のSpringBootでbeanを構成する方式で構成されており、SpringBootでは3種類のBeanFilterRegistrationBean、サーブレットRegistrationBean、サーブレットListenerRegistrationBeanがそれぞれ原生のFilter、サーブレット、Listenerを構成することに対応しており、以下に提供する3つの構成とシナリオ1で採用する方式で統一的な効果が得られる
@Bean
public ServletRegistrationBean indexServletRegistration() {
ServletRegistrationBean registration = new ServletRegistrationBean(new IndexServlet());
registration.addUrlMappings("/hello");
return registration;
}
@Bean
public FilterRegistrationBean indexFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean(new IndexFilter());
registration.addUrlPatterns("/");
return registration;
}
@Bean
public ServletListenerRegistrationBean servletListenerRegistrationBean(){
ServletListenerRegistrationBean servletListenerRegistrationBean = new ServletListenerRegistrationBean();
servletListenerRegistrationBean.setListener(new IndexListener());
return servletListenerRegistrationBean;
}
3.まとめ
両方式は使用に差があるが、内部SpringBootの実現においてはサーブレット3を使用するも差がない.0注記は、スキャン注記によってこの3つのbeanに変換されたFilterRegistrationBean、サーブレットRegistrationBean、サーブレットListenerRegistrationBean
4.拡張
実際にSpringBootはSpringMvcを使用している間にDispatcherServiceletを構成する必要はありません.自動構成されているので、初期構成パラメータを追加するには、次のようにします.
@Bean
public ServletRegistrationBean dispatcherRegistration(DispatcherServlet dispatcherServlet) {
ServletRegistrationBean registration = new ServletRegistrationBean(dispatcherServlet);
registration.addUrlMappings("*.do");
registration.addUrlMappings("*.json");
return registration;
}
DispatcherServiceletを注入してから、サーブレットRegistrationBeanで動的に初期パラメータを追加することができます.
出典:https://blog.csdn.net/king_is_everyone/article/details/53116744