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