转储 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(即使是整页刷新)背后的原因总结。
除非您有一个非常简单的应用程序,否则您可能需要使用 AJAX 支持部分页面刷新(而不是每次页面上的某些数据需要更改时都刷新整个页面)。为此,您需要在 Java 对象 (JavaBeans) 和 JavaScript 对象 (JSON) 之间进行映射,以便在浏览器/客户端和应用程序服务器之间交换数据。因此,支持两个数据交换通道(用于全页面刷新的 JSP 标记库和用于部分页面刷新的 AJAX/JSON)可能没有多大意义。如果您必须选择一个,它必须是 AJAX/JSON,因为 JSP 标记库不适用于部分页面刷新。因此,我建议首先使用 AJAX/JSON 并放弃 JSP 标记库。但是,如果您需要更多激励,请继续阅读。
我曾与分析过网络中来回传输的数据大小的团队合作,发现 JSON 消耗的网络带宽比 JavaBeans/JSP 标记库方法甚至 XML 有效负载要少得多。他们的分析对我来说似乎很有意义,因为 JSON 是一种简单的纯文本格式,没有涉及 XML 的语法开销或涉及 JavaBeans 的丰富对象开销。
相对于使用 JSP 标记库操作 JavaBeans 所需的杂技(见图 1),JavaBeans 到 JSON 的映射与 Spring MVC 完全无缝,不需要任何编码(见图 2)。无论您是否使用 JSP 标记库,您都可能需要使用数据填充 JavaScript 对象,以便 jQuery 小部件使用数据。换句话说,无论您是否使用 JSP 标记库,都需要 JavaScript 对象。放弃 JSP 标记库允许您跳过第 2 步(见图)并直接使用 JSON 和相应的 JavaScript 对象,而无需使用 JSP 标记库操作 JavaBean 对象。