gpt4 book ai didi

java - 我应该使用 session 来实现搜索框吗?

转载 作者:行者123 更新时间:2023-12-01 07:06:30 26 4
gpt4 key购买 nike

我有一个包含以下字段的搜索表单

price, status, owner

当用户填写所有字段时,请求将发送到后端以显示具有指定价​​格、状态和所有者的产品的类别列表。用户可以单击每个类别来查看其产品列表。

为了实现它,我有以下方法来检索类别,并将搜索字段(价格、状态、所有者)放入 session 中,以便在搜索的下一页中可用(选择类别时)。

参数的值可能会很长,我更喜欢将它们设置为 GET 以便于为结果添加书签。

public String retrieveCategories(){
//... here I retrieve categories which their products are matched
//with the search fields
Map session = ActionContext.getContext().getSession();
session.put("Items", this.items);
return "SUCCESS";
}

显示所有类别后,用户就可以单击每个类别来查看其产品。类别名称将发送到后端,因此我将从 session 中检索值以搜索与所选类别具有相同规范的产品。

public String retrieveProductsOfSelectedCategory(){
Map session = ActionContext.getContext().getSession();
this.items = (Items) session.get("Items");
//... here I retrieve products of the selected category based on values retrieved
// from session
}

我想知道实现它是否是一个好的做法,如果不是,您的建议是什么?

最佳答案

不,我不会使用 session 来实现它。使用 session 有几个不方便的地方:

  • 它使您的应用程序有状态,这使得集群变得更加困难:来自给定客户端的每个请求都必须发送到同一服务器,或者 session 必须是持久的或复制的。您在 session 中投入的内容越多,内存、存储和带宽的成本就越高
  • 由于您使用硬编码 session key 来存储搜索条件和项目,因此您无法在同一搜索页面上打开多个选项卡:它们将共享相同的条件和项目。
  • 清理 session 很复杂:什么时候清理?如果您将此模式应用于许多用例,您最终会在 session 中得到大量无用的数据。对于生命周期为整个 session 的数据,应起诉 session 。不适用于将数据从特定页面传递到下一页。

干净的解决方案并不难。只需使用隐藏字段或请求参数即可在页面之间传递数据:

首页:

<input type="text" name="price" />
<input type="text" name="owner" />

第二页

Please choose a category:

<ul>
<li><a href="/products?name=foo&price=12&category=first"></a></li>
<li><a href="/products?name=foo&price=12&category=second"></a></li>
<li><a href="/products?name=foo&price=12&category=third"></a></li>
</ul>

映射到/products 的操作可以从请求参数中检索名称、价格和类别,并显示结果。并且 session 中没有存储任何内容。

关于java - 我应该使用 session 来实现搜索框吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22520404/

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