1

web.xml に設定されているサーブレットに URL マッピングを使用する必要があります。現在、processRequest 関数で次のコードを使用してマッピングを読み取ることができます。

Iterator<String> urlMappings = this.getServletContext().getServletRegistration(MyServletClass.class.getSimpleName()).getMappings().iterator();
while (urlMappings.hasNext()) {
    System.out.println(urlMappings.next());
}

ただし、 getServletContext 関数は静的ではないため、サーブレットのインスタンスなしでは読み取ることができません。それも問題ありませんが、静的関数のみでこれを行う方法があれば、その解決策を好みます。何か助けはありますか?

Tomcat 8.0.3 と JDK 1.8 を使用しています

4

1 に答える 1

1

ServletContextListenerを に追加しますweb.xml。これは、webapp が読み込まれたときに呼び出されます。メソッドでは、たとえば後で使用するために静的変数にcontextInitialized()格納できます。次に、静的な方法でServletContextにアクセスできるようになります。ServletContext

class MyListener implements ServletContextListener {

    public static ServletContext context;

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        context = sce.getServletContext();
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        context = null;
    }

}

次のように追加しweb-xmlます。

<web-app>
    <listener>
        <listener-class>
            com.something.MyListener
        </listener-class>
    </listener>
</web-app>

そして、次のようにどこからでもアクセスできます。

MyListener.context.getServletRegistration(
    MyServletClass.class.getSimpleName()).getMappings().iterator();

ノート:

として保存してメソッドprivateを提供し、使用する前に値を確認することもできます。getternull

于 2014-08-25T07:19:33.617 に答える