【发布时间】:2009-05-04 23:24:02
【问题描述】:
我非常喜欢将应用程序逻辑保留在 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)。
【问题讨论】:
-
您是否特别使用了任何框架?您应该提及这一点,以便更容易与您的问题联系起来。
-
不。我正在使用 JSTL/Tomcat/Apache/JDBC。
-
如果你已经知道productId,为什么不在逻辑命中JSP页面之前查询产品并将其放入请求对象中。
-
servlet不知道产品ID,JSP的设计者知道。
-
鉴于您的更新,我认为产品 ID 应该存储在您的设计师可以维护的非常简单的配置文件中。然后 servlet 可以读取并提供正确的 bean。