我正在使用一个web,其中许多查询都必须对mysql数据库执行。我使用java+tomcat作为开发环境。
我试过不同的方法来解决这个问题:
开始时,我开始使用带有sql标记的jstl。用这种方式创建的每个jsp文档在使用jstl sql标记的许多sql查询中看起来都是“脏”的,并且在db更改时必须更改每个文档。
我尝试的第二个解决方案是使用servlet中的列表和映射来访问jstl el中的数据。看起来不错,但似乎有点奇怪-至少对我来说-必须使用自定义url访问每个文档(首先用几个类操作数据,直到设置请求属性并调用jsp文档requestdispatcher),有时如果用户从这里跳转,它可能会失败(缺少填充某些菜单或表所需的查询)在导航序列中。
我现在尝试的最后一个解决方案是向服务器端发送和接收json数据。我喜欢它(所有的事情都发生在同一个url上下文中,html文档部分是干净的,更动态的web……)但是json数据必须在客户端用javascript处理,这可能会影响大数据块的性能,并且可能由于字符串格式而有一些大小限制。例如,json可以很好地使用datatables js库进行数据拆分,在这个库中,我只从一个数据库中同时获得200行的最大值(我设置了这个参数)。但是如果我不执行这个数据拆分并显示多个组合框或mysql数据库中一个表中包含所有行的表,则会减慢web的速度。
几年前,我开发了一个桌面应用程序(c),它带有用于导航的嵌入式flash和用于数据库和应用程序之间数据交换的xml。但我认为XML更适合在不同的应用程序之间导出数据,如果我已经有了数据库,我不需要更多带有部分数据的文件。
所以,伙计们,你们认为什么是最好的解决方案?我想看看不同的观点。

请您参考如下方法:

转储jsp标记库并切换到json。
我经常看到开发团队在不应该使用jsp标记库的时候使用它们。我写这篇文章是为了解释为什么最好将jsp标记库看作过去的遗迹。
大多数非平凡的web应用程序将数据存储在服务器端的数据库中。这些应用程序需要允许客户端(web浏览器)和服务器(例如java应用服务器)交换数据的机制。通常,要么a)需要为用户显示数据(因此,客户端将查找条件发送到服务器,服务器用相关数据响应),要么b)用户在浏览器中更改数据,客户端需要将数据修改提交到服务器以进行处理和/或永久存储。
直到最近,大多数java web应用程序都使用jsp标记库作为客户端机制,从作为java提供的jsp/servlet范例的一部分在客户端(web浏览器)和服务器之间来回传递的java对象(javabean)中提取数据。(注意:jsp是被转换成javaservlet的html文件,因此它们可以包含用于操作服务器端java对象的java代码。)在每种情况下,服务器都会用一个新页面(带有嵌入式数据)进行响应,也称为完整页面刷新。
1995年,ajax出现并改变了上面描述的完整页面刷新模式。ajax允许在浏览器和应用服务器之间进行部分页面刷新和数据交换,而无需进行完整的页面刷新。从那时起,ajax在流行的框架(如v3.0/2010中的spring(用于java)和v1.5/2011中的jquery(用于javascript))中不断获得支持。
最适合ajax的数据交换格式是json,因为除非涉及到完整的页面刷新,否则无法调用jsp标记库。服务器端java模型对象(javabeans)和json之间有几个映射选项,在浏览器中运行的javascript很容易使用它们。(注意:由于json是javascript对象的文字表示,从json到javascript对象的转换很简单。)我推荐并一直使用的选项是spring mvc的@requestbody和@responsebody注释,它们是控制器方法定义(利用jackson库)的一部分,用于自动将javabean映射到json和back(参见图3和4)。(另一种方法是使用专有框架,如直接web远程处理或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对象。
谢谢你的阅读。我希望我的理由充分。不过,我希望得到你的反馈,特别是如果你认为我忽略了一些事情。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!