В GWT я хотел бы загрузить главную страницу на www.domain.com и динамическую страницу на www.domain.com/xyz - я просто не могу заставить ее работать - PullRequest
2 голосов
/ 11 февраля 2010

У меня есть вопрос, для которого, я уверен, должно быть простое решение. Я пишу небольшое приложение GWT, где я хочу добиться этого:

www.domain.com : должна отображаться страница приветствия

www.domain.com / xyz : должен обслуживать страницу xyz, где xyz просто ключ для элемента в базе данных. Если есть элемент, связанный с ключом xyz, я загружу его и покажу страницу, в противном случае я покажу 404 ошибка страницы.

Я пытался соответствующим образом изменить файл web.xml, но просто не мог сделай так, чтоб это работало. Я мог бы заставить его работать с url-pattern , если рассматриваемый ключ находится после другого /, например: www.domain.com/search/xyz. Тем не мение, Я хотел бы иметь ключ xyz непосредственно после корня / (http://www.domain.com/xyz).

Что-то вроде

    <servlet-mapping> 
            <servlet-name>main</servlet-name> 
            <url-pattern>/</url-pattern> 
    </servlet-mapping> 

не работает, так как я не знаю, как обратиться к главной странице index.html (поскольку это не настоящий сервлет), который затем загрузит мой основной модуль GWT.

Я мог бы заставить его работать с плохой работой (см. Ниже): перенаправление 404 исключение для index.html и затем поиск в главном точка входа, но я уверен, что это не лучшая практика, в том числе и для SEO цели.

Может кто-нибудь подсказать, как настроить web.xml с GWT для моя цель?

Большое спасибо.

Майк

Обход через 404:

web.xml:

<web-app> 
  <error-page> 
     <exception-type>404</exception-type> 
     <location>/index.html</location> 
  </error-page> 
  <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
  </welcome-file-list> 
</web-app> 

index.html -> Главная точка входа -> onModuleLoad ():

String path = Window.Location.getPath(); 
if (path == null || path.length() == 0 || path.equalsIgnoreCase("/") 
|| path.equalsIgnoreCase("/index.html")) { 
    ... // load main page 
} else { 
    lookup(path.substring(1)); // that's key xyz 

Ответы [ 4 ]

2 голосов
/ 12 февраля 2010

Джероен прав. Вы не.

Однако, если вы хотите форсировать это, вы можете. По сути, каждый новый URL должен иметь HTML-страницу, содержащую виджет GWT. Таким образом, заставляя виджет GWT затем перезагружаться при каждом новом URL. Затем он будет настраивать свой интерфейс соответственно на основе URL. Вы можете использовать среду REST, такую ​​как Джерси или Рестлет, чтобы упростить процесс.

Но вы хотите делать это только в том случае, если вы собираетесь распространять эти новые ссылки или URL-адреса за пределами вашего приложения GWT. Однако GWT поддерживает изменения URL через привязки (не уверен, что это правильная терминология), см. Документацию по истории для получения дополнительной информации. Не связывайте в своем приложении ссылки на другие URL-адреса вашего домена, содержащие тот же виджет GWT. Делать что-либо, что приведет к обновлению страницы и перезагрузке вашего GWT-виджета, было бы очень неэффективно. Используйте ClickHandlers.

В заключение, не делайте этого. =)

2 голосов
/ 11 февраля 2010

Вы не!

GWT предназначен для создания одностраничных веб-приложений (RIA), которые не выполняют гиперссылки на все виды свободных страниц. По сути, вы загружаете приложение GWT при загрузке его на начальной странице и динамически генерируете контент в приложении, используя виджеты, обрабатывая события и запрашивая данные сервера с помощью GWT-RPC или простых HTTP-запросов (например, при обращении к службе REST в некоторых других домен).

Я познакомил коллегу с GWT две недели назад и позволил ему какое-то время копаться, когда он застрял на том, как «дать ссылку на новую страницу?». Я объяснил, что GWT ориентирован не на навигационные веб-сайты на основе страниц, а на создание приложений, использующих браузер в качестве среды выполнения.

Надеюсь, что это может пролить немного света на вашу проблему:)

С уважением, - Йерун

0 голосов
/ 31 марта 2010

Как насчет вместо www.domain.com/?key=A1B2C3 вы используете способ GWT сделать это: www.domain.com/#key=A1B2C3 Вы можете сделать это через механизм истории.

0 голосов
/ 19 февраля 2010

Попробуйте UrlRewriteFilter: http://tuckey.org/urlrewrite/ это простой старый фильтр Java EE, поэтому он должен работать.

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