保持JSP的查询 - 如何?

时间:2009-05-04 23:24:02

标签: sql jsp jstl

我非常喜欢将应用程序逻辑保留在servlet中,并使JSP尽可能简单。其中一个原因是,任何优秀的Web设计人员都应该能够扩展他的HTML知识,构建一些JSTL标签来进行简单的迭代,访问bean等。我们还保留了更复杂的/ ajax / js组件标签库(类似于displayTag但是我们自己的组件)。

大多数情况下一切正常 - servlet执行它需要的任何SQL,并将结果存储在bean中以供JSP访问。我们遇到问题的地方是我们希望访问的记录是由设计指定的。

最明显的例子是主页 - 它需要引人注目且有效。它不需要像网站的其他部分一样统一。这里有很多一次性或“特殊情况”,我们想查询特定的产品记录,或者其他什么。

设计师真正想要的是通过产品ID获取产品bean的方法,这样他就可以正常访问这些属性。我们显然不想查询所有产品,我也不想在演示文稿中查询。

我很确定我在这里问不可能,我必须放弃一些东西。我的问题是什么?

修改

在调用JSP之前,我认为所有应用程序逻辑都应该是是错误的吗?我认为最好的做法是在servlet中进行所有查询/计算/处理,然后将(相当)哑豆传递给(非常)愚蠢的JSP。

有几种方法可以将查询的实际复杂性封装在另一个类(自定义标记或bean)中,JSP可以调用它。这个 保持JSP简单(目标1),但JSP仍然“触发”查询 - 相当 在这个过程的后期。

  • 我是否完全错了,这样做很好。
  • 这是一般规则,但在这种情况下完全可以。
  • 我可能遇到问题吗?

编辑 - 示例

我希望这个例子会有所帮助:

主页不是类别/搜索页面的“模板” - 它是自定义设计,可以很好地用于营销图像和一些特定的产品图像。但它确实有关于应该动态获得的两个产品的信息(因此名称,而且重要的是价格)与数据库保持同步。

servlet无法知道这些产品是哪些产品,因为如果设计者想要更改它们/删除它们/添加更多产品,他应该只需要编辑JSP(并且可能需要XML作为一个答案)。

5 个答案:

答案 0 :(得分:1)

听起来你需要更好地分离显示和数据库代码。你应该有一些单独的类来处理与数据库的交互,并且对显示一无所知。

然后,您只需创建一个方法,该方法将按ID查找产品并返回该bean,以便显示可以提取所需的属性。

答案 1 :(得分:1)

您需要创建一个自定义bean,它将对前端执行查询。实际上,根据你在这里的说法,它可能更像是为你提供数据的几个bean。

从设计角度来看,这没有问题;只是主页的特定设计比您网站的其他部分具有更多的异构要求。确保您的设计师知道他需要很好地向开发团队传达他的需求,以便为您的主页(或其他)创建BO,并且事情应该没问题。

答案 2 :(得分:1)

如果我理解正确,你在JSP中有逻辑需要一个特定的产品,但此时你不想从数据库中查询,而且对于servlet来说它太迟了。

(旁注,虽然我尊重你保持关注点分离的意愿,但事实是这个问题清楚地表明你的框架在表示层中有太多的逻辑......但是因为我们可能无法修复那......继续前进。

我的建议是你的设计师创建一个配置XML文件,其中包含前端需要的任何特殊情况,你的servlet可以读取它,然后将哑豆传回JSP。

或者......你使用XMLHTTPRequest将事情分解为多个请求,并为每个单独的查询回调servlet,然后在客户端上组装页面。

答案 3 :(得分:1)

在认为在渲染JSP之前所有应用程序逻辑都应该完成之前,你没有错。

如果需要获取更多东西以便在JSP中显示,那么它将是对服务器和另一个Page循环的另一个请求。如果您正在寻找“交互式”加载体验,可以使用AJAX。

在单页生命周期中,我发现很难理解为什么必须从JSP调用数据库调用。以前是否已使用所有必需的表单变量发布页面,以帮助您在Servlet / Helper类中查找数据?

如果您能举例说明一个案例,那将会有所帮助。

[编辑] 查看您的示例,是的,您的设计人员(或网站管理员)应将该信息设置为配置,而不是JSP的一部分。或者,您可以使用一个小的应用程序/管理页面来维护数据库中的信息,以便可以随时更改。当您显示主页时,请阅读配置并加载相应的数据。

答案 4 :(得分:0)

我不确定这是什么问题。如果你想从你的jsp页面中获取sql语句,那么你可以将它们放在属性文件中,只需从jsp页面读取属性文件。