Можно ли программно изменить путь сервлета GWT RPC? - PullRequest
1 голос
/ 05 апреля 2011

Мое приложение GWT работает нормально при запуске с http://localhost:8080/myapp.

Мне нужно разместить приложение gwt за тем, что по сути является прокси.Находясь за прокси, URL-адрес меняется на что-то вроде http://localhost:8080/foo/bar/00_00_00/myapp.

GWT выдает ошибку при попытке доступа через прокси-сервер:

myAppServlet: ERROR:Запрошенный путь к модулю / foo / bar / 00_00_00 / myapp / MyApp / не находится в том же веб-приложении, что и этот сервлет / myapp.Возможно, ваш модуль не настроен должным образом или ваш код клиента и сервера устарел.

Ошибка возникает после запроса rpc, когда gwt пытается сериализовать объекты Java и отправить их обратно клиенту.

Есть ли способ сообщить GWT, что приложение находится за прокси-сервером?

Обновление:

Кажется, что он отлично работает при первом запросе.Но тогда это терпит неудачу для всех других запросов ?? !!Я обнаружил, что ошибка исходит от RemoteServiceServlet.loadSerializationPolicy.К сожалению, я не могу переопределить, так как он статический.

Может быть, можно задать путь контекста сервлета программно?

1 Ответ

1 голос
/ 05 апреля 2011

Я не уверен, решит ли это всю проблему, потому что вы говорите, что она уже работает в первый раз, когда вы делаете вызов - но вы можете попробовать следующее при создании serviceAsync на стороне клиента:

MyServiceAsync service = GWT.create(MyService.class);
ServiceDefTarget serviceDefTarget = (ServiceDefTarget) service;
serviceDefTarget.setServiceEntryPoint(
     "http://localhost:8080/foo/bar/00_00_00/myapp/MyApp/");
   /* ^^ Use your full servlet path here ^^ */

Если вы удивляетесь, зачем вам явно приводить это значение к ServiceDefTarget - вот объяснение из Javadoc ServiceDefTarget:

/**
 * An interface implemented by client-side RPC proxy objects. Cast the object
 * returned from {@link com.google.gwt.core.client.GWT#create(Class)} on a
 * {@link RemoteService} to this interface to initialize the target URL for the
 * remote service.
 */

(я предполагаю, что вы загружаете свою html-страницу из "http://localhost:8080",, иначе это не получится из-за той же политики происхождения.)

Другая проблема, которую я могу себе представить, может быть связана с кэшированием в вашем прокси - поэтому, возможно, сначала попробуйте отключить любое кэширование, а затем повторно включить его только для ресурсов с "*.cache.*" именами файлов (см. Также: Идеальный HTTP заголовки управления кэшем для различных типов ресурсов ).

...