2009-09-17 3 views
1

Я просто получил класс сервлета, работающий в Eclipse. Я тестировал его, развертывая его с помощью App Engine, и это побудило меня работать как веб-приложение. Теперь я хочу запустить этот код из другого класса. Поэтому я сделал еще один класс и поставил «TestServlet ts = new TestServlet();» в основной функции. Когда я бегу, ничего не происходит. Должен ли я сделать вызов метода «doGet» TestServlet, или это связано с тем, что основной класс не работает в качестве веб-приложения?Запуск класса сервлета из другого класса

ответ

0

Умм ... вы не должны этого делать. Извлеките общую логику в отдельный класс POJO (простой старый Java-объект) и вызовите его как из своего сервлета, так и из вашего другого класса.

Вручную создающие/вызывающие сервлеты НЕ являются хорошей идеей.

+0

Ответ на вопрос полностью зависит от того, чего вы пытаетесь достичь. Для тестирования компонентов и/или компонентов поведения классов, конечно, вы проверяете код без уровня сервиса. Для тестирования интеграции может потребоваться его запуск (что задается вопросом). – Joe

+0

Мне нужен только сервлет, чтобы извлечь данные XML из веб-службы. После этого я буду манипулировать XML в другом коде. Я надеялся в основном запустить сервлет, получить XML и отключить его, если это возможно. Я хотел просто запустить один класс, но вы говорите, что я должен запускать веб-приложение и приложение Java отдельно, не так ли? Очень ценю помощь. – Mattk

+0

Я считаю, что вы можете запустить Winstone 'embedded' (т. Е. Вызывать его из кода), не обязательно быть отдельным экземпляром (но это может быть). (Возможно, лучший способ получить XML из веб-службы). – Joe

0

Вам нужен контейнер сервлета, если вы хотите запустить его для реального. Я бы предложил использовать Winstone http://winstone.sourceforge.net. Это небольшой, быстрый, нулевой контейнер конфигурации для запуска вашего сервлета.

+0

Это не очень хороший ответ. OP _has_ контейнер сервлетов, когда он тестировал свой сервлет, развертывая его в App Engine. Это никоим образом не оправдывает попытки вручную создать экземпляр своего сервлета. – ChssPly76

+0

Он говорит, что пытается проверить его, развернув его на GAE. В моей интерпретации вопроса он пытается запустить сервлет на своей машине, на что я и задавал вопрос. – Joe

+0

@Joe - тогда ваша интерпретация вопроса неверна. Я ничего не имею против использования Winstone вместо GAE для проверки сервлета - это, безусловно, проще или быстрее; но вопрос состоял в том, «как я могу запустить сервлет из основного() метода приложения java-приложения. И ответ «вы не должны». – ChssPly76

0

Вызов doGet (или doPost или любой другой видимый метод) в экземпляре объекта сервлета будет выполнять содержащийся код. Однако имейте в виду, что поведение может отличаться от запуска сервлета в веб-контейнере, если код использует любую из переменных «проводного ввода».

При номинальной стоимости я бы предложил вам рефакторинг, чтобы код, который вам нужен, был обычным методом и вызывал как ваш сервлет, так и ваш основной класс.

Смежные вопросы