gpt4 book ai didi

java - GWT 中的多个 "pages"具有人类友好的 URL

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:19:41 24 4
gpt4 key购买 nike

我正在玩一个 GWT/GAE 项目,它将具有三个不同的“页面”,尽管它不是 GWT 意义上的真正页面。顶部 View (每个页面一个)将具有完全不同的布局,但一些小部件将共享。

其中一个页面是通过默认 url ( http://www.site.com ) 加载的主页面,但另外两个页面需要额外的 URL 信息来区分页面类型。他们还需要一个名称参数(例如 http://www.site.com/project/project-name 。据我所知,至少有两种解决方案。

  1. 使用GWT history机制,让页面类型和参数(如项目名称)成为history token的一部分。
  2. 使用带有 url 映射模式的 servlet(如/project/*)

第一个选择乍一看似乎很明显,但它有几个缺点。首先,用户应该能够轻松记住并直接键入项目的 URL。很难生成具有历史标记的人类友好 URL。其次,我正在使用 gwt-presenter,这种方法意味着我们需要在一个标记中支持子位置,我宁愿避免这种情况。第三,用户通常会停留在一个页面上,因此页面信息是“静态”URL 的一部分更有意义。

使用 servlet 解决了所有这些问题,但也带来了其他问题。

所以我的第一个问题是,最好的解决方案是什么?

如果我选择 servlet 解决方案,就会弹出新问题。

  1. 将 GWT 应用程序拆分为三个独立的模块可能很有意义,每个模块都有一个入口点。然后,映射到特定页面的每个 servlet 将简单地将请求转发到处理该页面的 GWT 模块。由于用户通常停留在一个页面,浏览器只需要加载该页面的js。根据我读到的内容,并不真正推荐此解决方案。

我也可以坚持使用一个模块,但是 GWT 需要确定它应该显示哪个页面。它可以查询服务器或自己解析 URL。

  1. 如果我坚持使用一个 GWT 模块,我需要将页面信息存储在服务器端。我自然而然地想到了 session ,但我不确定将页面信息与用户数据混合是否是个好主意。 session 通常存在于用户登录和注销之间,但在这种情况下,它需要不同的行为。通过 session 处理此问题是否是一种不好的做法?

one GWT module + servlet 的解决方案也导致了另一个问题。如果用户从项目页面转到主页面,GWT 如何知道发生了什么?该应用程序不会重新加载,因此它会被视为简单的状态更改。每次状态更改都必须检查页面信息似乎效率很低。

有人愿意带我走出包围我的迷雾黑暗吗? :-)

最佳答案

我会选择历史标记。这是处理此类情况的标准方法。不过,我不明白,你所说的“很难用历史标记生成一个人性化的 URL”是什么意思——它们对我来说似乎非常人性化 :) 如果你使用 servlet 来处理 url,我认为这会导致要重新加载整个页面 - 我认为您宁愿避免这种情况。

Second, I'm using gwt-presenter and this approach would mean that we need to support subplaces in one token, which I'd rather avoid.

如果您对 gwt-presenter 不满意(就像我一样:)),推出您自己的类来帮助实现 MVP - 这真的很容易(您可以从头开始或修改 gwt-presenter 类)并且您'您将获得适合您需求的解决方案。我正是这样做的,因为 gwt-presenter 对我来说似乎“复杂”/复杂 - 通用,而我所需要的只是它提供(或尝试提供)的一个子集。

至于多模块的想法 - 这是一个很好的想法,但我建议使用 Code Splitting - 这种情况(可以分为“独立”模块/ block 的页面/应用程序)正是它的用途,而且你只引导你的应用程序一次,所以在页面之间切换时不会下载额外的代码。 另外,以这种方式共享状态应该更容易(例如,通过事件总线)。

关于java - GWT 中的多个 "pages"具有人类友好的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2401752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com