Я играю с проектом GWT / GAE, который будет иметь три разные «страницы», хотя на самом деле это не страницы в смысле GWT. Верхние представления (по одному для каждой страницы) будут иметь совершенно разные макеты, но некоторые из виджетов будут общими.
Одна из страниц - это главная страница, которая загружается по URL-адресу по умолчанию (http://www.site.com), но двум другим нужна дополнительная информация об URL-адресе, чтобы различать тип страницы. Им также нужен параметр имени (например, http://www.site.com/project/project-name. Я знаю как минимум два решения этой проблемы.
- Используйте механизм истории GWT и позвольте типу страницы и параметрам (например, имени проекта) быть частью токена истории.
- Используйте сервлеты с шаблонами сопоставления URL-адресов (например, / project / *)
Первый выбор сначала может показаться очевидным, но у него есть несколько недостатков. Во-первых, пользователь должен легко запоминать и вводить URL-адрес проекта. Трудно создать удобный для человека URL-адрес с токенами истории. Во-вторых, я использую gwt-presenter, и этот подход будет означать, что нам нужно поддерживать подместы в одном токене, чего я бы предпочел избежать. В-третьих, пользователь обычно остается на одной странице, поэтому имеет больше смысла, что информация о странице является частью «статического» URL-адреса.
Использование сервлетов решает все эти проблемы, но также создает другие.
Итак, мои первые вопросы: какое здесь лучшее решение?
Если бы я выбрал решение сервлета, появятся новые вопросы.
- Возможно, имеет смысл разделить приложение GWT на три отдельных модуля, каждый с точкой входа. Каждый сервлет, отображаемый на определенную страницу, затем просто пересылает запрос модулю GWT, который обрабатывает эту страницу. Поскольку пользователь обычно остается на одной странице, браузеру нужно только загрузить js для этой страницы. Судя по тому, что я читал, это решение не рекомендуется.
Я также мог бы придерживаться одного модуля, но тогда GWT нужно выяснить, какую страницу он должен отображать. Он может либо запросить сервер, либо проанализировать сам URL.
- Если я придерживаюсь одного модуля GWT, мне нужно хранить информацию о странице на стороне сервера. Естественно, я думал о сеансах, но не уверен, стоит ли смешивать информацию о странице с данными пользователя. Сеанс обычно находится между входом в систему и выходом из системы, но в этом случае потребуется другое поведение. Будет ли плохой практикой справляться с этим через сеансы?
Решение из одного модуля GWT + сервлета также приводит к другой проблеме. Если пользователь переходит со страницы проекта на главную, как GWT узнает, что это произошло? Приложение не будет перезагружено, поэтому оно будет рассматриваться как простое изменение состояния. Кажется неэффективным проверять информацию о странице при каждом изменении состояния.
Кто-нибудь хочет вывести меня из туманной тьмы, которая меня окружает? :-)