"Мне нужно использовать сеанс на стороне клиента (сеанс браузера) точно так же, как с файлами JSP: session.setAttribute (" UserName ", username);"
Я хочу исправить ваше заблуждение. Ниже приводится не код на стороне браузера и не сеанс на стороне браузера. Это код на стороне сервера, управляющий информацией о сеансе на стороне сервера.
session.setAttribute("UserName", username);
Вы должны передать эту информацию о сеансе на стороне сервера клиенту в своем JSP, например:
<script>
var username = "<%=username%>";
</script>
Or,
<script>
var username = '<%=session.getAttribute("UserName")%>';
</script>
Как опытный программист JSP, вы должны понимать разделение между HTML / Javascript (сгенерированным JSP) и самим JSP. И из-за ограничений, с которыми вы столкнулись с JSP, вы обращаетесь к GWT.
Сходство между клиентом, созданным с помощью JSP, и клиентом, созданным с помощью GWT
Иногда (возможно, часто) программисты ошибочно принимают код на стороне сервера за код на стороне клиента, и наоборот. Как и ты.
Оба генерируют элементы javascript и HTML, которые отправляются клиенту для выполнения.
Все, что вы не можете сделать с javascript, созданным JSP, точно так же не может быть сделано с исходным кодом Java на стороне клиента GWT.
Все, что нужно сделать клиентскому коду, сгенерированному JSP, также необходимо сделать с помощью клиентского кода GWT.
Вы можете встроить информацию о сеансе в HTTP-заголовок, параметры POST или GET.
Вам нужен клиент для хранения информации о сеансе, в основном в виде файлов cookie.
При определенных обстоятельствах файл cookie jsessionid не устанавливается ответом сервера.
Ваш сервлет или его контейнер могут сгенерировать заголовок http set-cookie для JSESSIONID.
Сервлет может контролировать, когда создается заголовок cookie - благодаря request.getSession ().
.
Разница между клиентом, созданным с помощью JSP, и клиентом, созданным с помощью GWT
Клиент, сгенерированный JSP, обновляется при каждом запросе / ответе. Таким образом, вы можете передавать изменения и данные между клиентом и сервером для каждого запроса / ответа.
Клиент, созданный GWT, является постоянным для клиента и не обновляется. Именно по этой причине вы обращаетесь к GWT.
Эта разница в обновлении очень важна для понимания разницы в кодировании для GWT, чем для JSP.
Весь Java-код в JSP - это серверный код. В JSP нет клиентского кода, написанного на Java. Даже код Java, используемый для генерации HTML / javascript, является кодом на стороне сервера.
Весь клиентский код Java транслируется / компилируется в Javascript. Таким образом, код GWT Java на самом деле является кодом "на стороне компилятора".
.
Средства связи между клиент-сервером в GWT
Не забудьте использовать клиентский код класса Dictionary для передачи ваших статических настроек в приложение GWT через объекты Javascript, определенные в файле хостинга. Вы можете установить объекты javascript как переменные, и они будут доступны для чтения классу Dictionary после загрузки модуля gwt.
Не забывайте, что вы можете использовать JSP для создания файла хостинга GWT, чтобы вы могли создавать различные варианты поведения, обеспечиваемые разными чтениями словаря, которые вы можете индивидуализировать для каждого вызова вашего приложения.
Однако не следует размещать идентификатор сеанса или информацию для аутентификации в файле хостинга. Потому что, даже если JSP динамически генерируется, он на самом деле статичен на постоянном клиенте GWT.
Вы можете использовать Window.Location.reload () для ненужного обновления вашего клиента GWT, на всякий случай, если вам все еще нравятся эффекты обновления JSP.
GWT-RPC
RequestBuilder
RequestFactory
REST и REST-RPC
Скрипт включает (для пересечения границ SLD-SOP)
Все взаимодействия клиент-сервер требуют, чтобы клиент GWT обеспечивал обратный вызов из-за асинхронности технологии.
Взгляните на http://google-web-toolkit.googlecode.com/svn/javadoc/2.4/com/google/gwt/http/client/RequestBuilder.html (или просмотрите его в своей личной копии документации GWT javadoc).
... где вы сможете определить набор и получить заголовки. Ваша серверная сторона должна согласовывать с клиентом, какое имя заголовка используется.
Вам не нужно полагаться на обычный сеанс JEE, чтобы «поддерживать сеанс». Вы можете создать свою собственную структуру токенов. Или используйте существующий, например OAuth или OpenId.
При различных условиях вы не получите файл cookie сеанса в ответе сервера.
При определенных обстоятельствах вам может потребоваться вообще отказаться от использования обычных сеансов JEE при написании приложения GWT.
Вам следует подумать об использовании REST или REST-RPC, поскольку я пытаюсь задокументировать это (со скоростью улитки) в: http://h2g2java.blessedgeek.com/2011/11/gwt-with-jax-rs-aka-rpcrest-part-0.html а>.
REST не требует от вас сохранения файла cookie сеанса. На мой взгляд, GWT лучше всего работает с REST-RPC.
Вы можете просмотреть предыдущие сообщения там, где есть объяснения по другим формам взаимодействия клиент-сервер с GWT.
person
Blessed Geek
schedule
01.02.2012