実行時に標準API経由でサーブレットを有効にすることはできません。多くの場合、ビルド時にweb.xml
に、またはデプロイメント時にServletContext#addServlet()
で有効にすることができます。あなたの最善の策は、常にそれを有効にして、リクエストごとに制御することです。これにはservlet filterを使用できます。
まず、サーブレットに名前を付けます。
@WebServlet(urlPatterns="/hello", name="yourServlet")
public class YourServlet extends HttpServlet {
// ...
}
サーブレットのURLパターンを気にすることなく、フィルタを直接マップすることができます。
@WebFilter(servletNames="yourServlet")
public class YourFilter implements Filter {
// ...
}
フィルタでは、チェーンを続行するか、設定ファイルの設定に基づいて404を返すかを決定します。
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if (isYourConfigurationFileSettingSet()) {
chain.doFilter(request, response);
} else {
((HttpServletResponse) response).sendError(HttpServletResponse.SC_NOT_FOUND);
}
}
isYourConfigurationFileSettingSet()
一部は、これまで提供された情報に基づいて詳細に回答することはできません。あなたが実際にそれを理解できなかった場合には、Where to place and how to read configuration resource files in servlet based application?へ
これは私が考えている可能性は間違いありませんが、パッケージ化するときに複数の 'web.xml'ファイルのいずれかを選択するのは簡単でしょう。 WARファイルではありませんが、実行時に選択することができるかどうかはわかりません。 –
@Someprogrammerdude私の編集を参照してください。 – Andres