代码之家  ›  专栏  ›  技术社区  ›  jwoolard

奇怪的网站导航机制

  •  0
  • jwoolard  · 技术社区  · 16 年前

    我正在别人的基于web的应用程序上执行uat。这个系统很大,有几十个表单,几百个独立的输入字段。总的来说,它看起来构造良好,可用。

    我注意到一件对我来说很奇怪的事。我单击的每个链接实际上都会执行一个post请求(包含我想要的页面的详细信息)到我已经打开的页面,然后使用该响应将http重定向到我想要的页面。我可以理解在数据被更改的页面上这样做-这将允许系统保存数据,而不需要用户显式强制。但是,这种行为也用于没有用户输入的页面。

    为什么要这样做?这似乎导致了系统的一些重大减速。

    如果是帮助的话,这个系统是用jsf编写的。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Andrew Martinez    16 年前

    我不会假装自己是一个广泛使用w/jsf的开发人员。但是,我已经在其他技术上创建了许多web应用程序。

    一般来说,对于使用发送额外数据的post请求的导航,确实会增加数据负载,并可能导致速度的小幅度下降。通常,导航执行get请求被认为是最佳实践。post请求通常保存在执行的操作需要辅助数据的情况下。

    现在对于post'ing,然后在响应中接收到重定向,这很奇怪,并且会导致速度减慢,因为您将引发两个网络请求,而不是一个。我会问,“为什么不直接把链接指向我要重新访问的页面呢?”。我唯一能理解的答案是某种定制的会话管理,它不使用cookies或url会话参数。

    可能有更多的原因,但这种设计似乎是相当不必要的,老实说,无论原因是什么,我相信有更好的方法来实现系统,不这样做。

        2
  •  0
  •   Damo    16 年前

    当你使用 <h:commandButton> <h:commandLink> 在jsf页面中,它将执行一个http post;而不是get。

    如果需要get,那么 <h:outputLink> 应该使用,但是开发人员经常使用前两个标记,因为它们允许在导航之前调用操作-例如,在打开某个页面之前,开发人员可能希望在备份bean中运行一个设置/初始化某些变量的方法。因此,Web应用程序执行帖子可能有一个很好的原因。

    如果不需要任何操作,例如如果导航是一个菜单,那么我将考虑更改为使用 <H:OutputLink> 或者只使用facelets和常规锚定标记。

    推荐文章