JBoss AS 7 を使用して、web.xml の代わりに Java コードを使用して Servlet 3.0 コンテナーを構成しようとしています。私の問題は、コンテキスト ルート ("/") にマップされたサーブレットを登録すると、デフォルトのサーブレットが優先され、代わりにリクエストを処理することです。ServletContextListener と ServletContainerInitializer の両方を試しましたが、うまくいきませんでした。
試行 1: ServletContextListener
@WebListener
public class AppInitializer implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
ServletContext context = event.getServletContext();
ServletRegistration.Dynamic homeServlet = context.addServlet("homeServlet", new HomeServlet());
homeServlet.addMapping("/");
homeServlet.setLoadOnStartup(1);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
// Do nothing.
}
}
試行 2: ServletContainerInitializer
public class AppInitializer2 implements ServletContainerInitializer {
@Override
public void onStartup(Set<Class<?>> classes, ServletContext context) throws ServletException {
ServletRegistration.Dynamic homeServlet = context.addServlet("homeServlet", new HomeServlet());
homeServlet.addMapping("/");
homeServlet.setLoadOnStartup(1);
}
}
追加情報
- マッピングを から に変更する
/
と/example
、サーブレットは新しいパスへのリクエストを正しく処理します。 - Java コードではなく web.xmlを介してサーブレットを登録すると、
/
サーブレットはコンテキスト ルートへの要求を正しく処理します。
では… DefaultServlet によってオーバーライドされることなく、Java コードを介してコンテキスト ルートにサーブレットを登録するにはどうすればよいでしょうか?
ありがとう!