2

我有一个问题,我确信必须有一个简单的解决方案。我正在编写一个小型 GWT 应用程序,我想在其中实现这一点:

www.domain.com:应该服务于欢迎页面

www.domain.com/xyz:应该提供页面 xyz,其中 xyz 只是数据库中项目的键。如果有与键 xyz 关联的项目,我将加载该项目并显示一个页面,否则我将显示一个 404 错误页面。

我试图相应地修改 web.xml 文件,但我无法让它工作。如果有问题的键在另一个 / 之后,我可以使用url 模式,例如: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(因为它不是实际的 servlet),然后它将加载我的主 GWT 模块。

我可以通过一个不好的解决方法使其工作(见下文):将 404 异常重定向到 index.html,然后在主入口点进行查找,但我确信这不是最佳实践,也用于 SEO 目的.

谁能给我一个关于如何为我的目的使用 GWT 配置 web.xml 的提示?

非常感谢。

麦克风

通过 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

4 回答 4

2

杰伦是对的。你没有。

但是,如果你想强迫它,你可以。基本上每个新的 url 都必须有一个包含 GWT 小部件的 HTML 页面。因此,导致 GWT 小部件必须在每个新 url 上重新加载自己。然后它将根据 URL 相应地配置其 UI。您可以使用诸如 Jersey 或 Restlet 之类的 REST 框架来简化操作。

但是,仅当您打算在 GWT 应用程序之外分发这些新链接或 url 时才需要这样做。但是,GWT 支持通过锚点更改 URL(不确定这是否是正确的术语),请参阅有关历史记录的文档以获取更多信息。不要在您的应用程序中“链接”到您域中包含相同 GWT 小部件的其他 URL。做任何会导致页面刷新和你的 GWT 小部件重新加载的事情都是非常低效的。使用 ClickHandler。

总而言之,不要这样做。=)

于 2010-02-12T06:07:38.700 回答
2

你没有!

GWT 旨在创建不超链接到各种松散页面的单页 Web 应用程序 (RIA)。您实际上是在初始页面中加载 GWT 应用程序时引导 GWT 应用程序,并通过使用小部件、处理事件和通过 GWT-RPC 或简单的 HTTP 请求请求服务器数据在应用程序中动态生成内容(例如,当访问其他一些上的 REST 服务时)领域)。

两周前我向 GWT 介绍了一位同事,当他被困在如何“链接到新页面?”时,让他研究了一段时间。我解释说 GWT 不是面向基于页面的导航网站,而是用于构建使用浏览器作为运行时的应用程序。

希望这可以对您的问题有所了解:)

问候,——杰伦

于 2010-02-11T16:28:43.033 回答
0

您可以使用 GWT 的方式来代替 www.domain.com/?key=A1B2C3 吗: www.domain.com/#key=A1B2C3 您可以通过历史机制来执行此操作。

于 2010-03-31T14:49:02.587 回答
0

试试 UrlRewriteFilter:http ://tukey.org/urlrewrite/它是一个普通的 Java EE 过滤器,所以它应该可以工作。

于 2010-02-19T15:49:32.503 回答