Запустите внутренний запрос Servlet в Tomcat - PullRequest
5 голосов
/ 13 ноября 2009

Я использую Quartz для планирования фоновых задач для веб-приложения. Некоторые из этих задач просто запускают запросы к одному и тому же веб-приложению.

Я хочу избежать зависимости от каких-либо сетевых настроек (например, запрос с моим собственным доменным именем может быть неправильно перенаправлен, если сделан из центра обработки данных). Существует ли Java API для запуска ServletRequest и внутренней обработки Tomcat (без какого-либо реального HTTP-запроса)?

Я все еще хочу обернуть работу в запрос сервлета, а не вызывать код Java для фоновых задач напрямую, чтобы я мог вернуться к обычному HTTP-запросу в качестве параметра конфигурации.

Допустим специфичный для Tomcat код.

Ответы [ 4 ]

1 голос
/ 13 ноября 2009

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

Если приведенное выше предположение верно, вы можете просто отделить логику сервлета / jsp от логики бизнес-обработки и вызвать классы уровня бизнес-логики непосредственно из запланированных задач.

0 голосов
/ 13 ноября 2009

У кода сервлета слишком много обязанностей. Переведите его в обычный Java-класс и разрешите доступ к нему для класса задач (или, наоборот, дайте ему посетить класс задач). При необходимости разумно используйте ServletContext.

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

0 голосов
/ 13 ноября 2009

Используйте URLConnection или apache-commons httpclient с localhost / 127.0.0.1 - таким образом, он будет правильно маршрутизироваться.

0 голосов
/ 13 ноября 2009

Интересное понятие. Конечно, для этого нет стандартного API, и я не думаю, что есть опубликованный механизм, специфичный для Tomcat.

Что бы получить запрос? Сервлет? JSP? Пружинный контроллер? В зависимости от этого и в зависимости от того, что делает цель, вы, возможно, сможете вызывать цель напрямую, а не маршрутизировать ее через контейнер. Но если у вас есть JSP, стек фильтров и другие тонкости сервлета, это, вероятно, не не вариант.

Если вы не используете Spring, то ваша задача Quartz может быть просто подключена напрямую к контроллеру, и это будет легко, как вам нравится. Тебе так повезло?

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