Можно ли вызвать сервлет из Java-класса? - PullRequest
1 голос
/ 10 июня 2010

Я использую IBM WebSphere в качестве моего контейнера сервлетов. Мое приложение имеет несколько сервлетов и классов Java. Я намереваюсь вызвать один из этих сервлетов непосредственно из класса Java. Проведя некоторые исследования, я выяснил, что для этого можно использовать интерфейс RequestDispatcher. Но необходимо передать объекты ServletRequest и ServletResponse в качестве аргументов методу forward (). Есть какой-то способ обойти это безопасно и "красиво"? Под «красиво» я имел в виду сохранение хороших шаблонов программирования и дизайна.

Ответы [ 3 ]

5 голосов
/ 10 июня 2010

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

Преобразовать исходный код сервлета в повторно используемый класс (ы) Java иметод (ы) (который, в свою очередь, не использует что-либо из пакета javax.servlet), так что вы можете наконец импортировать и вызывать его из и класса сервлета и "простого ванили""Класс Java.

2 голосов
/ 10 июня 2010

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

Вы знакомы с архитектурой MVC ?Если ваш «модельный» код был слабо связан, вы могли бы вызвать его напрямую.

2 голосов
/ 10 июня 2010

Вы можете написать фильтр, который хранит текущий запрос и ответ в статическом ThreadLocal, чтобы вы могли использовать их позже из того же запроса. Затем вы можете реализовать свой собственный статический метод forward, который использует их и отправить на другую страницу.

Этот подход используется в JSF, когда к FacesContext.getCurrentInstance можно получить доступ в любое время.

Но я бы не назвал это элегантным дизайном. Скорее попробуйте следовать советам @BalusC и изменить вашу логику.

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