Запустите / останавливают веб-приложение от себя?

Вы хотите тонкий шпон? Это легко приготовить. Попробуйте в качестве начала следующую тривиальную оболочку вокруг ElementTree:

# geetree.py
import xml.etree.ElementTree as ET

class GeeElem(object):
    """Wrapper around an ElementTree element. a['foo'] gets the
       attribute foo, a.foo gets the first subelement foo."""
    def __init__(self, elem):
        self.etElem = elem

    def __getitem__(self, name):
        res = self._getattr(name)
        if res is None:
            raise AttributeError, "No attribute named '%s'" % name
        return res

    def __getattr__(self, name):
        res = self._getelem(name)
        if res is None:
            raise IndexError, "No element named '%s'" % name
        return res

    def _getelem(self, name):
        res = self.etElem.find(name)
        if res is None:
            return None
        return GeeElem(res)

    def _getattr(self, name):
        return self.etElem.get(name)

class GeeTree(object):
    "Wrapper around an ElementTree."
    def __init__(self, fname):
        self.doc = ET.parse(fname)

    def __getattr__(self, name):
        if self.doc.getroot().tag != name:
            raise IndexError, "No element named '%s'" % name
        return GeeElem(self.doc.getroot())

    def getroot(self):
        return self.doc.getroot()

Вы вызываете ее так:

>>> import geetree
>>> t = geetree.GeeTree('foo.xml')
>>> t.xml_api_reply.weather.forecast_information.city['data']
'Mountain View, CA'
>>> t.xml_api_reply.weather.current_conditions.temp_f['data']
'68'
8
задан harpun 14 October 2013 в 17:28
поделиться

3 ответа

Просто нажмите URL-адреса

http://<username>:<password>@<hostname>:<port>/manager/stop?path=/<context path> 

, чтобы остановить, и

http://<username>:<password>@<hostname>:<port>/manager/start?path=/<context path> 

, чтобы начать. Это имитирует использование приложения-менеджера.

3
ответ дан 5 December 2019 в 19:02
поделиться

Я бегло просмотрел исходный код Tomcat Manager. Похоже, есть класс, который является частью исходного кода Tomcat, под названием «Сервлет контейнера». Из документации javadocs:

A ContainerServlet - это сервлет который имеет доступ к внутреннему функциональность, и загружается из Загрузчик классов Catalina вместо загрузчик классов веб-приложения.

ContainerServlet автоматически получает оболочку, которая может использоваться для получения контекста и средства развертывания, а средство развертывания имеет полезные методы, такие как start (String contextPath) и stop (String contextPath) , который будет делать то, что вы хотите.

Итак, я думаю, что вам нужно будет написать свой собственный сервлет, который наследуется от ContainerServlet, и настроить Tomcat для загрузки вашего сервлета с помощью загрузчика классов Catalina (посмотрите, как настроен Менеджер, чтобы узнать как). Обратите внимание, что это, вероятно, не будет вариантом для вас в размещенной среде.

Тогда ваш сервлет может иметь, скажем, кнопку, которую вы нажимаете, чтобы перезагрузить приложение. Я рекомендую поставить перед этим какую-нибудь защиту паролем. :)

5
ответ дан 5 December 2019 в 19:02
поделиться

Tomcat Manager предлагает http-интерфейс для запуска / остановки приложения и других задач. Есть Ant-задачи , которые можно использовать для быстрого доступа к этим операциям.

1
ответ дан 5 December 2019 в 19:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: