【问题标题】:Using ajax, how can I generate url that can be bookmarked?使用 ajax,如何生成可以添加书签的 url?
【发布时间】:2012-08-19 13:23:39
【问题描述】:

我正在编写一个简单的 Web 应用程序,使用 tomcat 服务器、servlet 和 jsp 页面。理想情况下,我希望我的网站只有一个页面,我可以在其中加载有关用户操作的内容(jsp 文件)。

但同样重要的是,用户将能够为某些网址“添加书签”以直接访问他们需要访问的内容。

例如,假设我有一个详细说明我网站的所有注册用户的页面,然后每个用户都有一个个人资料页面。我希望导航到某人个人资料的用户会看到以下网址:

http://mywebsite.com/users/some_user_name

当他们输入这个 url 时,他们将进入 some_user_name 的个人资料。

问题是所有内容都是使用 ajax 生成的,我手动更改了使用 history.pushState 显示的 url - 这样当您输入示例 url 时,您只会得到 404 页面。

我想到的一个简单解决方案是将一个 servlet 映射到 /users/* 模式,该模式以正确的 jsp 页面响应。这是一个合理的解决方案还是有其他更好和可接受的方法来处理此类问题?

谢谢:)

【问题讨论】:

  • 来自 Wiki 本身关于 AJAX 的缺点:Dynamic web page updates also make it difficult to bookmark and return to a particular state of the application. Solutions to this problem exist, many of which again use the URL fragment identifier.[8][9] 无论如何,听起来您使用 AJAX 只是因为可以。如果可能,请不要再为 Web 提供另一个令人讨厌的 AJAX 网页,并重新考虑是否真的需要为整个网站使用 AJAX。

标签: ajax jsp web-applications servlets


【解决方案1】:

如果您使用 pushState 管理历史记录,那么当通过 url 直接访问应用程序时,您可以获取 url 片段并进行 ajax 调用并加载内容。为了实现这一点,您的所有网址都必须符合其他要求,以便在您的情况下轻松加载正确的视图,它可以是这样的

http://mywebsite.com/users/profile/some_user_name

所以现在当应用程序加载时,您可以使用用户名 some_user_name

加载 profile 视图

如果你想要一些其他的视图,比如编辑,那么它可以是

http://mywebsite.com/users/profile/edit/some_user_name

http://mywebsite.com/users/profileEdit/some_user_name

您应该实现一个可以正确路由这些 url 的路由器,以及一个可以从服务器获取数据并将其传递给查看的 main 方法。

如果您可以将您的 JSP 代码用作休息 web 服务,这可以很容易地实现,并且有很多库支持这样的事情。你可能想看看 Backbone.js /Knockout.js

here 是带有比较的流行框架列表。

但您可能面临的问题是 SEO。也有一些解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 2011-03-08
    • 1970-01-01
    相关资源
    最近更新 更多