由于遵从MVC(著名的模型-视图-控制器软件架构)整合了若干编程措施,Java 2 Enterprise Edition(j2ee)为高度复杂和可伸缩的因特网应用程序提供了基于组件的的强大开发功能。同时,j2ee开发层次的不同满足了各个方面的需要:某些开发者采用Enterprise JavaBean实现软件的模型;某些企业则利用JSP实现软件的视图;还有些开发商则专门通过Java Servlet实现软件中的控制器。一切都层次分明,井井有条。不是吗?
但是层次划分的技术复杂性却在实际开发中给开发人员带来了不小的压力和负担。多层开发模式有时会令j2ee成为庞大的、难以超越的技术集合。了解各类层次技术的特性是要花时间的,而且j2ee项目还过分要求小型开发团队的技能资源。充分理解现有j2ee应用程序的体系结构和实现令开发人员的学习曲线非常尖锐,尤其是在考虑到开发周期的时间限制这一方面上更是如此了。结果就会导致技术开发团队试图“躲避”合理的j2ee实现,很有可能在将来的开发或维护中引发问题。
为了避免出现以上问题,开发者们可以根据自己的实际需要分别采用不同的j2ee技术,这样可以更好地利用开发者的技能并让他们更关注于任务本身。
首要的而且也可能是最早单独运用的j2ee技术恐怕该算是JSP了。开发者们采用JSP可以创建具有HTML的表示页面和脚本小程序、JavaBean 乃至定制标签等功能。这种联合多种技术的JSP编程建议似乎是对单纯编程技术的诅咒;j2ee教义上说的是应用程序的逻辑和显示层从来都不应该混合起来。
然而,在有的时候,合理地唯一采用JSP会给项目开发带来莫大的好处。鼓吹表示层和功能层分离的争论观点实际上会给编程带来更大的负担,尤其是在单一JSP用在超过两个显示页面的情况下。但是体积更小更单纯的JSP项目却可能工作得更好。为了达到适度的工作量,像简单时钟这样的编码任务就变得非常容易了(参看程序清单A)。
这个例子说明了若干问题。以上程序中的代码提供了一个用户界面(虽然很基础),这个界面接受用户输入并做出动态响应,而这就是因特网应用程序所有的基本要素了,该程序连同注释在内只有33行代码。要编写一个JSP时钟程序的更有用实现所需要的代码就更少了:
<%
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("d MMMM yyyy, h:mm:ss a");
TimeZone zone = TimeZone.getDefault();
sdf.setTimeZone( zone );
%>
Current date and time in the <b><%= zone.getID() %></b>
time zone: <b><%= sdf.format( d ) %></b>
只用JSP开发项目的另一优点是:JSP的学习和使用都相当方便。JSP采用了Java的语法,但在上下文环境中则完全可以用于其他服务器端开发环境——例如ASP或ColdFusion等。这样在没有多大技术变迁的情况下就可以充分利用JSP了。