在三层结构的web应用中,现在,我们总是被要求支持多种客户端,浏览器、手机、REST风格的服务请求等,它们之间的不同主要是格式和编排(html/xml/json等),我们通过不同的展示层即可实现,业务层提供给展现层的数据模型是不变的,因此我们希望保持业务层的唯一和复用。比如,当需要支持wap时,新建一个jsp,调用同样的bean,但新jsp输出xml格式的数据,就此实现多客户端支持而复用业务层。而三层结构中,业务层还负责控制,特别是传统的web交互规则:表单提交和返回响应,例如“增加用户”这个请求:一个表单提交(假设提交了新用户的资料)后,业务层处理完成后(保存用户信息到数据库),需要返回响应,用户可能希望看到一个新的用户列表,要么是转发(forward)要么是重定向(sendRedirect)到用户列表请求,此时返回的响应并非“增加用户”业务的,而是“用户列表”的,“增加用户”这个业务根本没有展示层或者说没有到展示层就转向了。传统的web开发这当然没问题,但要求支持多客户端则遇到了挑战,1、当请求以Ajax方式提交(或者使用flex或flash构建富客户端)时,“增加用户”业务需要返回xml或json数据,也需要展示层来组装返回数据;2、支持服务请求,可能并非浏览器而是另一个应用发起的,也需要返回xml或json数据,以告之该请求是否完成或更多信息。在这种情况下,我们需要“增加用户”这个请求走到展示层并提供返回而不中途转向,这与前述转发或重定向的模式是完全不同的。1、是否放弃表单提交模式,即传统的表单提交后转发或重定向的做法,改为Ajax方式提交并返回响应。(因为表单提交必然导致页面刷新,因此也必须要求返回的内容是html呈现给用户)2、--别的方法我还没有想到问题的关键似乎在于:表单提交导致页面刷新,要求返回内容是html呈现给用户,而多客户端支持要求返回不同的数据格式而不仅是html谢谢您的关注,请大家讨论或提出建议。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货