Передача объектов в сервлеты GWT через атрибуты сервлета (на стороне сервера) или «Внедрение зависимостей» - PullRequest
1 голос
/ 17 января 2011

Как передать объекты из не серверного кода GWT (например, обычного серверного кода) в «сервлет» GWT (все еще серверный код), в частности, RemoteServiceServlet?

Мой серверный код GWT состоит из RPC-типа RemoteServiceServlet s, на который я не могу получить ссылку, поэтому я не могу передать свой настоящий / поддельный объект в режиме тестирования или добавить атрибуты сервлета. Я не вижу способа просто передать объекты (стиль внедрения зависимостей), так как у меня нет доступа к объекту Server, поскольку GWT, кажется, создает его экземпляр глубоко внутри своих внутренних функций, так какие у меня варианты?

P.S. Я не хочу использовать полноценный DI-фреймворк, такой как GIN / Juice - я нахожу их очень волшебными. Мне просто нужен способ получить доступ к экземпляру сервлета GWT и передать ему материал.

Ответы [ 2 ]

2 голосов
/ 18 января 2011

Позвольте мне начать с того, что, если вы еще этого не сделали, я настоятельно рекомендую посмотреть эту презентацию Google I / O, посвященную лучшим практикам GWT Architecture .Я нашел это очень полезным, и это то, откуда пришло большинство следующего:

Я создал абстрактный сервлет "dispatch", который расширяет GWT RemoteServiceServlet.У каждого моего модуля есть только один сервис (который расширяет мой абстрактный сервис диспетчеризации), с помощью которого я регистрирую набор обработчиков запросов.Все вызовы службы GWT для данного модуля GWT поступают в диспетчерскую службу этого модуля, которая просматривает тип запроса и отправляет его соответствующему обработчику запросов.Обработчики запросов, по сути, обрабатывают работу, которая ранее находилась в сервисном сервлете.Помимо упрощения вашей жизни благодаря меньшему количеству сервлетов, которые можно зарегистрировать в файле web.xml (не говоря уже об исключении дополнительных интерфейсов, требуемых GWT), вы можете более легко управлять объектом диспетчера, который обрабатывает всю фактическую диспетчеризацию.Вы можете, например, передать любой реальный / фиктивный объект, который вам нравится, в эти обработчики запросов, поскольку вы, а не веб-контейнер, отвечаете за их создание.

И хотя я свернул свой собственный, Для этой цели существует проект gwt-dispatch .

Надеюсь, это поможет.

1 голос
/ 18 января 2011

Контейнеры сервлетов разработаны так, чтобы не допустить прямого доступа к сервлетам, которые они размещают;вот почему вам трудно получить какой-либо дескриптор сервлета.

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

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

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