どのようにweb.xmlのcontext-param、Servlet、Listener、Filter定義をSpring Bootに追加しますか?


伝統的なwebプロジェクトをSprigBootに移行するには、web.xmlのcontext-param、Servlet、Filter、Listenerなどの定義の移転が欠かせません。      Servlet、Filter、Listenerに関する定義変換は、比較的明確である:
Servlet定義の移行
一般servletの移行
例は以下の通りです
@WebServlet("/jsonIndexSearchServlet")
public class JsonIndexSearchServlet extends HttpServlet {
...
}
Faces Servletの移行
 
@Bean
    public ServletRegistrationBean servletRegistrationBean() {
        FacesServlet servlet = new FacesServlet();
        //, "*.jsf"
        ServletRegistrationBean bean = new ServletRegistrationBean(servlet);
        bean.setOrder(40);
        bean.setName("FacesServlet");
        List urlPattern = new ArrayList<>();
        urlPattern.add("*.jsf");
        bean.setUrlMappings(urlPattern);
        return bean;
    }
しかし、jsfプロジェクトにとっては、まだ足りないです。web.xmlの定義が必要です。具体的な原因はまだ分かりません。後で暇があったらまた研究します。(Bean注入とweb.xml定義は両方とも少なくないと異常を報告します。具体的には後のブログで詳しく述べます。)
web.xml定義:

		FacesServlet
		javax.faces.webapp.FacesServlet
		1
	
	
		FacesServlet
		*.jsf
	
Filter定義の移行
例は以下の通りです
    @Bean
    public FilterRegistrationBean rewriteFilter() {
        FilterRegistrationBean rwFilter = new FilterRegistrationBean(new RewriteFilter());
        rwFilter.setDispatcherTypes(EnumSet.of(DispatcherType.FORWARD, DispatcherType.REQUEST,
                DispatcherType.ASYNC, DispatcherType.ERROR));
        rwFilter.addUrlPatterns("/*");
        rwFilter.setOrder(30);
        return rwFilter;
    }
 
Listener定義の移転
例は以下の通りです
    @Bean
    public ServletListenerRegistrationBean setStartupServletContextListener(){
    	ServletListenerRegistrationBean result = new ServletListenerRegistrationBean<>();
    	result.setListener(new StartupServletContextListener());
    	result.setOrder(20);
    	return result;
    }
 
context-param定義の移転
    content-param定義の変換に対して、ネット上の例は少ないです。    次の方法で実現することを勧められましたが、失敗しました。
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    	return builder.sources(Application.class);
    }
    
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
    	//web.xml context-param
    	servletContext.setInitParameter("org.apache.myfaces.AUTO_SCROLL", "true");
    	super.onStartup(servletContext);
    }
 私はdebugの時、この二つの方法の断線点がまったく入っていないと発見しました。つまり、この二つの方法は呼び出されていません。       その後も万能のstackoverflowサイトで方法を見つけました。InitParameter ConfigServletContintext Initializerを使います。
例は以下の通りです
    @Bean
    public InitParameterConfiguringServletContextInitializer initParamsInitializer() {
        Map contextParams = new HashMap<>();
        contextParams.put("org.apache.myfaces.AUTO_SCROLL", "true");
        return new InitParameterConfiguringServletContextInitializer(contextParams);
    }
文章が終わる。