サーブレットコンテナの種類を判別する
warファイルのプログラム中から、それが載っているサーブレットコンテナの種類を判断したい。例えば、tomcatなのか、jettyなのかだ。
これが意外にわからない。サーブレット仕様にはどうもそのようなものが無いようだ。唯一発見したのは以下である。
要するに、どのサーブレットにも”default”サーブレットが用意されているので、ServletContextからそのRequestDispatcherにアクセスしろという。そして、その実装クラス名から判断せよという。
つまり、こんなところだ。ここではJettyか、あるいはJetty以外かを判断している。当方ではJetty/Tomcatの二つにしか対応しないのでこれで十分だ。
public class ServletContainerDetector {
private static boolean jetty;
/**
* サーブレットコンテナからリクエストディスパッチャの名称を取得し、
* その名前からどのサーブレットコンテナであるかを判断する。
*/
public static void setup(ServletContext sc) {
if (sc == null) return;
RequestDispatcher rd = sc.getNamedDispatcher("default");
if (rd == null) return;
jetty = rd.getClass().getName().toLowerCase().indexOf("jetty") >= 0;
}
/** Jettyか */
public static boolean isJetty() {
return jetty;
}
}
ディスカッション
コメント一覧
まだ、コメントがありません