我非常喜欢将应用程序逻辑保留在 servlet 中,并使 JSP 尽可能简单。原因之一是任何优秀的网页设计师都应该能够扩展他的 HTML 知识以构建一些 JSTL 标记来进行简单的迭代、访问 bean 等。我们还保留了更复杂的/ajax/js 组件一个标签库(类似于 displayTag 但用于我们自己的组件)。
大多数时候一切正常 - servlet 执行它需要的任何 SQL,并将结果存储在 bean 中以供 JSP 访问。我们遇到的问题是我们希望访问的记录是由设计指定的。
最明显的例子是主页——它需要引人注目且有效。它不需要像网站的其他部分一样统一。这里有很多一次性或“特殊情况”,我们想要查询特定的产品记录,或者其他什么。
设计师真正想要的是一种通过产品 id 获取产品 bean 的方法,以便他可以正常访问属性。我们显然不想查询所有产品,我也不想在演示文稿中查询。
我很确定我在这里问的是不可能的事情,我必须放弃一些东西。我的问题是什么?
编辑
我认为在调用 JSP之前应该完成所有应用程序逻辑是错误的吗?我的印象是最好的做法是在 servlet 中进行所有查询/计算/处理,然后将(相当)愚蠢的 bean 传递给(非常)愚蠢的 JSP。
有几种方法可以将查询的实际复杂性封装在另一个类(自定义标记或 bean)中,并且 JSP 可以调用它。这使 JSP 保持简单(目标 1),但 JSP 仍在“触发”查询 - 在此过程中相当晚。
- 我是否完全错了,这样做很好。
- 这是一般规则吗,但在这种情况下这样做是完全可以的。
- 我会遇到问题吗?
编辑 - 示例
我希望这个例子会有所帮助:
主页不像类别/搜索页面那样是“模板” - 它是定制设计的,可以很好地与营销图像和几个特定的产品图像配合使用。然而,它确实有关于应该动态获取的这两种产品的信息(所以名称,重要的是价格)与数据库保持同步。
servlet 无法知道这些产品将是哪些产品,因为如果设计人员想要更改/删除它们/添加更多产品,他应该只需要编辑 JSP(可能还有 XML 作为建议的答案)。