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

1

Мне нужно использовать URL-mapping для моего сервлета, который установлен в 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

Теги:
servlets
tomcat
web.xml

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 и обеспечить getter метод, а также проверить на null значение, прежде чем использовать его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню