どのようにweb.xmlのcontext-param、Servlet、Listener、Filter定義をSpring Bootに追加しますか?
3324 ワード
伝統的なwebプロジェクトをSprigBootに移行するには、web.xmlのcontext-param、Servlet、Filter、Listenerなどの定義の移転が欠かせません。 Servlet、Filter、Listenerに関する定義変換は、比較的明確である:
Servlet定義の移行
一般servletの移行
例は以下の通りです
web.xml定義:
例は以下の通りです
Listener定義の移転
例は以下の通りです
context-param定義の移転
content-param定義の変換に対して、ネット上の例は少ないです。 次の方法で実現することを勧められましたが、失敗しました。
例は以下の通りです
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);
}
文章が終わる。