Доступ к сопоставлениям URL-адресов сервлета в Tomcat только со статическими функциями

Мне нужно использовать сопоставление URL-адресов для моего сервлета, который установлен в web.xml. В настоящее время я могу прочитать сопоставления с помощью следующего кода в функции 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.


person Nuri Tasdemir    schedule 25.08.2014    source источник


Ответы (1)


Добавьте ServletContextListener в файл web.xml. Это будет вызываться при загрузке вашего веб-приложения. В методе 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 и предоставить метод getter, а также проверить значение null перед его использованием.

person icza    schedule 25.08.2014