Преобразование сервлета Java в автономное приложение Java - PullRequest
1 голос
/ 30 марта 2012

У меня есть устаревший Java-сервлет, который в данный момент работает в контейнере Tomcat.Я хочу запустить его вне контейнера, как отдельное Java-приложение.Основное намерение при этом заключается в том, что новая роль, в которой будет развернуто это приложение, включает в себя только вычисления, а не обслуживание запросов.

Как мне изменить код сервлета?Поможет ли извлечение кода init() сервлета в метод main() нового класса?

Ответы [ 5 ]

2 голосов
/ 30 марта 2012

Извлеките желаемую функциональность из сервлета в другие классы, чтобы сервлет являлся только веб-интерфейсом функциональности.

В идеале эти другие классы не должны ничего использовать в javax.servlet.*.

Затем создайте отдельный класс с помощью метода main, который соответствующим образом использует эти другие классы.

1 голос
/ 30 марта 2012

Сначала нужно разобраться с парой вещей, функциональность сервлета, вероятно, будет реагировать на некоторые параметры URL. сначала выяснить, что такое вычислительная часть и какие параметры она ожидает, как только вы это поймете, выяснить, что нужно поместить в отдельное приложение, будет тривиально.

другой подход заключается в том, чтобы встроить Jetty в ваше основное приложение и позволить этому запускать ваш сервлет,
это оставит ваш код сервлета нетронутым, уменьшая риск появления ошибок

1 голос
/ 30 марта 2012

Вы должны сделать это осторожно.Может случиться, что некоторые фильтры выполняют необходимую работу, не замеченную в сервлете

Если ваш случай довольно прост, а GET или POST просто запускают код, его легко преобразовать в классическое приложение Java.1003 *

Просто с уважением вызывайте прежнюю часть инициализации и код doGet или doPost.

1 голос
/ 30 марта 2012

Я бы преобразовал класс сервлета в основной класс, как вы упомянули. Основной метод нового класса создаст экземпляр основного класса, запустит метод init для инициализации if (потенциально используя аргументы, полученные из командной строки). Затем вызовите сервисный метод внутри блока try / catch / finally и вызовите метод destroy сервлета внутри блока finally. Конечно, ваш новый сервисный метод будет вызываться без параметров и не будет содержать ссылок на сервлет api.

1 голос
/ 30 марта 2012

да.

Сервлет реализует интерфейс для взаимодействия с контейнером сервлета Tomcat.Если параметры не считываются из контекста сервлета (имена путей, параметры конфигурации), вы можете извлечь логику в основной класс.

Вам необходимо убедиться, что вы не полагаетесь на схему запроса / ответа вваши услуги.Обычно, если только один процесс выполняет код, писать его гораздо проще, чем в параллельных сценариях.Но нельзя быть уверенным, что такого эффекта не будет (например, кэши, которые теперь основаны на запросах, не будут очищаться в автономном режиме).

также удаляет все зависимости API сервлета в вашем коде.Это не будет работать и больше не требуется.

удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...