0

我正在使用一个必须对 MYSQL 数据库执行许多查询的网络。我使用 Java+Tomcat 作为开发环境。

我尝试了不同的方法来解决这个问题:

  • 一开始我开始使用带有 sql 标签的 jstl。以这种方式创建的每个 jsp 文档看起来都很“脏”,有许多使用 jstl sql 标记的 sql 查询,当数据库更改时,您必须更改每个文档。

  • 我尝试的第二个解决方案是使用 servlet 中的列表和映射来访问来自 jstl el 的数据。它看起来不错,但似乎有点奇怪 - 至少对我来说 - 必须使用自定义 url 访问每个文档(首先你用几个类操作数据,直到你设置请求属性并调用 jsp 文档 RequestDispatcher),有时它可以如果用户在导航序列中从这里跳转到那里,则失败(缺少填充某些菜单或表格所需的查询)。

  • 我现在尝试的最终解决方案是向/从服务器端发送和接收 JSON 数据。我喜欢它(一切都发生在相同的 url 上下文中,html 文档部分是干净的,更动态的 web ......)但是 JSON 数据必须在客户端使用 javascript 处理,这可能会影响大数据块的性能,由于字符串格式,可能有一些大小限制。例如,JSON 可以很好地使用 DataTables js 库进行数据拆分,其中我只能从数据库中同时获得 200 行的最大值 - 我设置了这个参数。但是,当我不执行此数据拆分并显示例如多个组合框或包含 MYSQL DB 中表中所有行的表时,它会减慢网络速度。

几年前,我开发了一个桌面应用程序 (C#),其中嵌入了用于导航的 flash 和用于 DB 和 APP 之间数据交换的 xml。但我认为 XML 更适合不同应用程序之间的数据导出,如果我已经有数据库,我不需要更多包含部分数据的文件。

那么,小伙伴们,你们认为最好的解决方案是什么呢?我想检查不同的观点。

4

1 回答 1

3

图1 图 2 图 3 图 4

转储 JSP 标记库并切换到 JSON。

我经常看到开发团队在不应该使用 JSP 标记库时使用它们。我写这篇文章是为了解释为什么最好将 JSP 标记库视为过去的遗物。

大多数重要的 Web 应用程序将数据存储在服务器端的数据库中。这些应用程序需要允许客户端(Web 浏览器)和服务器(例如 Java 应用程序服务器)交换数据的机制。通常,a) 需要为用户显示数据(因此,客户端将查找条件发送到服务器,服务器用相关数据进行响应)或 b) 用户在浏览器中更改数据并且客户端需要将数据修改提交给服务器进行处理和/或永久存储。

直到最近,大多数 Java Web 应用程序都使用 JSP 标记库作为客户端机制,以从客户端(Web 浏览器)和服务器之间来回传递的 Java 对象(JavaBeans)中提取数据,作为 JSP/servlet 范式的一部分。爪哇。(注意:JSP 是转换成 Java servlet 的 HTML 文件,因此它们可以包含用于操作服务器端 Java 对象的 Java 代码。)在每种情况下,服务器都会响应一个新页面(带有嵌入数据),也称为整页刷新。

1995 年,AJAX 出现并改变了上述整页刷新范式。AJAX 允许在浏览器和应用服务器之间进行部分页面刷新和数据交换,而无需进行全页面刷新。从那时起,AJAX 不断获得动力,并在 v3.0/2010 中内置了流行的框架,如 Spring (for Java)和 v1.5/2011 中的 jQuery(用于 JavaScript)。

最适合 AJAX 的数据交换格式是 JSON,因为除非涉及整个页面刷新,否则无法调用 JSP 标记库。服务器端 Java 模型对象 (JavaBeans) 和 JSON 之间的映射有多种选择,它们可以很容易地被在浏览器中运行的 JavaScript 使用。(注意:由于 JSON 是 JavaScript 对象的文字表示,因此从 JSON 到 JavaScript 对象的转换是微不足道的。)我推荐并一直使用的选项是 Spring MVC 的 @RequestBody 和 @ResponseBody 注释作为控制器方法定义的一部分(利用 Jackson 库)自动将 JavaBeans 映射到 JSON 并返回(参见图 3 和图 4)。(另一种方法是使用 Direct Web Remoting 或 DWR 等专有框架,出于显而易见的原因,我不建议使用它。)

因此,我建议我咨询过的大多数团队最好完全放弃 JSP 标记库,转而采用基于 AJAX/JSON 的纯方法。

以下是我建议仅使用 AJAX/JSON(即使是整页刷新)背后的原因总结。

  1. 除非您有一个非常简单的应用程序,否则您可能需要使用 AJAX 支持部分页面刷新(而不是每次页面上的某些数据需要更改时都刷新整个页面)。为此,您需要在 Java 对象 (JavaBeans) 和 JavaScript 对象 (JSON) 之间进行映射,以便在浏览器/客户端和应用程序服务器之间交换数据。因此,支持两个数据交换通道(用于全页面刷新的 JSP 标记库和用于部分页面刷新的 AJAX/JSON)可能没有多大意义。如果您必须选择一个,它必须是 AJAX/JSON,因为 JSP 标记库不适用于部分页面刷新。因此,我建议首先使用 AJAX/JSON 并放弃 JSP 标记库。但是,如果您需要更多激励,请继续阅读。

  2. 我曾与分析过网络中来回传输的数据大小的团队合作,发现 JSON 消耗的网络带宽比 JavaBeans/JSP 标记库方法甚至 XML 有效负载要少得多。他们的分析对我来说似乎很有意义,因为 JSON 是一种简单的纯文本格式,没有涉及 XML 的语法开销或涉及 JavaBeans 的丰富对象开销。

  3. 相对于使用 JSP 标记库操作 JavaBeans 所需的杂技(见图 1),JavaBeans 到 JSON 的映射与 Spring MVC 完全无缝,不需要任何编码(见图 2)。无论您是否使用 JSP 标记库,您都可能需要使用数据填充 JavaScript 对象,以便 jQuery 小部件使用数据。换句话说,无论您是否使用 JSP 标记库,都需要 JavaScript 对象。放弃 JSP 标记库允许您跳过第 2 步(见图)并直接使用 JSON 和相应的 JavaScript 对象,而无需使用 JSP 标记库操作 JavaBean 对象。

于 2013-05-23T22:28:23.000 回答