我认为JSP有问题(上)
2020-06-01 23:25:59
供稿:网友
(作者:小龙亭主Blueski编译 2000年12月22日 14:22)
(编者:这篇文章的原文首次在国外出现时,JSP还只是一种刚刚崭露头角的技术,并没有像现在这样如日中天。现在看来这篇文章的某些观点可能会有一定的局限性,但我不得不承认这是一篇很大气的作品,其中涉及很多JSP的内在原理。因此,我想还是有必要把这篇文章介绍给大家,以便各位从另一个侧面更深入的了解JSP技术。)
如今每一个使用servlets的开发者都知道JSP,一种建构在servlet技术之上的由Sun公司发明并花费大量精力加以推行的web技术。JSP将servlet中的html代码脱离了出来,从而可以加速web应用开发和页面维护。实际上,由Sun发布的官方 "应用开发模型"文档上说得更远:"JSP技术应该被视为标准,而servlets在多数情况下可视为一种补充。"
本文将比较JSP和另一项基于servlets的技术:template engines(模板引擎)。
直接使用Servlets的问题
当Servlets被发明时,整个世界都看到了它的优越性。基于Servlet的动态网页可以被快速执行,可以在多个服务器之间轻易转移, 并且可以和后台数据库完美地集成,因此Servlets被广泛接受成为一种web服务器端的首选平台。
但是,通常通过简单方式即可实现的html代码现在却要让程序员通过 out.println()调用每一行HTML行,这在实际的 Servlet应用中变成一个严重问题。HTML内容不得不通过代码来实现, 这对于大的HTML页来说不啻是一项繁重费时的工作。另外,负责网页内容的人员不得不请开发人员来进行所有的更新。为此,人们寻求这一种更好的解决方式。
JSP诞生
JSP 0.90诞生了。在这种技术中你可以将Java代码嵌入到HTML文件,服务器将自动为页面创建一个Servlet。JSP被认为是一种写Servlet的简易方式。所有HTML可以直接得到而不必通过out.println()调用,而负责页面内容的人员可以直接修改HTML而不必冒破坏Java代码的风险。
但是,让页面美术设计师和开发人员在同一文件上工作并不理想,让Java嵌入HTML被证明是就象将HTML嵌入Java一样令人尴尬。读取一堆很乱的代码仍然是一件困难的事情。
于是,人们在使用jsp方面变得成熟,更多地使用了JavaBeans。Beans包含了jsp所需的业务逻缉代码。JSP中的大多数代码都可以取出来放到bean中去,而只留下极少的标记用于调用bean。
最近,人们开始认为这种方式下的JSP页面真的很象是视图(view)。它们成为一个用于显示客户端请求结果的组件。于是人们会想,为什么不直接对view发送请求呢?目标view如果对该请求不合适又将如何?说到底,很多的请求有多种可能来取得结果view视图。例如,同一请求可能产生成功的页面、数据库例外出错报告,或者是缺少参数的出错报告。同一请求可能产生一个英文页面也可能是西班牙文页面,这取决于客户端的locale。为什么客户端必须直接将请求发送给view?为什么客户端不应该将请求发送给一些通用的服务器组件并让服务器来决定JSP view的返回?