|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
诸如RMI,EJB等一些技术并不是你说的那么复杂,而是它们把一些复杂的工具封装成不复杂的工具了,理解这些工具是需要些时间。我问你,.net里有这些工具吗?要简单多少?。js|成绩我以为JSP有成绩(上)
(小龙亭主Blueski编译 2000年12月22日14:22)
(编者:这篇文章的原文初次在外洋呈现时,JSP还只是一种方才崭露锋芒的手艺,并没有像如今如许方兴未艾。如今看来这篇文章的某些概念大概会有必定的范围性,但我不能不供认这是一篇很年夜气的作品,个中触及良多JSP的内涵道理。因而,我想仍是有需要把这篇文章先容给人人,以便列位从另外一个正面更深切的懂得JSP手艺。)
现在每个利用servlets的开辟者都晓得JSP,一种建构在servlet手艺之上的由Sun公司创造并消费大批精神加以奉行的web手艺。JSP将servlet中的html代码离开了出来,从而能够减速web使用开辟和页面保护。实践上,由Sun公布的官方"使用开辟模子"文档上说得更远:"JSP手艺应当被视为尺度,而servlets在多半情形下可视为一种增补。"
本文将对照JSP和另外一项基于servlets的手艺:templateengines(模板引擎)。
间接利用Servlets的成绩
当Servlets被创造时,全部天下都看到了它的优胜性。基于Servlet的静态网页能够被疾速实行,能够在多个服务器之间容易转移,而且能够和背景数据库完善地集成,因而Servlets被普遍承受成为一种web服务器真个首选平台。
可是,一般经由过程复杂体例便可完成的html代码如今却要让程序员经由过程out.println()挪用每行HTML行,这在实践的Servlet使用中酿成一个严峻成绩。HTML内容不能不经由过程代码来完成,这关于年夜的HTML页来讲不啻是一项沉重费时的事情。别的,卖力网页内容的职员不能不请开辟职员来举行一切的更新。为此,人们追求这一种更好的办理体例。
JSP出生
JSP0.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?为何客户端不该该将哀求发送给一些通用的服务器组件并让服务器来决意JSPview的前往?
这使良多人承受了已被称为"Model2"的计划,这是在JSP0.92中界说的基于model-view-controller的模子。在这类计划中,哀求被发送到一个servlet把持器,它实行了贸易逻缉并发生一个邻近的数据"model"来用于显现。这一数据随后经由过程外部送到一个JSP"view"来举行显现,如许看起来JSP页就象是一个一般的嵌进的JavaBean。能够依据卖力把持的servlet的外部逻辑来选择得当的JSP页面举行显现。如许,JSP文件成了一个大度的templateview。这就是另外一种开展,并被别的一些开辟者所推许至今。
进进TemplateEngines
假如利用templateengine来取代一般目标的JSP,接下往的计划将变得复杂,语法更复杂,堕落信息更容易读,工具也更用户化。一些公司已做了如许的引擎,最出名的多是WebMacro,他们的引擎是收费的。
开辟者应当了然,选定一个templateengine来代替JSP供应了以下一些手艺上风,而这些同时也恰是jsp的不敷的地方:
成绩#1:Java代码太模板化了
固然被以为是欠好的计划,JSP仍试图将Java代码到场web页面。这有些象是Java已经做过的事变,即对C++的简化修正,templateengines也经由过程将jsp中的较低层的源码移往来使之简化。而Templateengines实施了更好的计划。
成绩#2:请求写Java代码
在JSP页中请求写一些Java代码。比方,假定某页要决意以后web使用中根的高低文从而导向其主页,在JSP中最好利用以下Java代码:
<ahref="<%=request.getContextPath()%>/index.html">Homepage</a>
你能够试图制止Java代码,而利用<jsp:getProperty>标志,但这将给你以下难以浏览的字符串:
<ahref="<jsp:getPropertyname="request"property="contextPath"/>/index.html">HomePage</a>
利用templateengine则没有Java代码和丢脸的语法。这里是一样请求下在WebMacro中的写法:
<ahref="$Request.ContextPath;/index.html">Homepage</a>
在WebMacro中,ContextPath作为$Request变量的一个属性,利用相似Perl的语法。别的templateengines利用了别的的语法范例。
再看另外一个例子,假定一个初级的"view"必要设定一个cookie来纪录用户缺省的色彩设置--这类义务看起来也许只能由view而不是servlet把持器来完成。在JSP中要有如许的Java代码:
<%Cookiec=newCookie("colorscheme","blue");response.addCookie(c);%>
在WebMacro中则没有Java代码:
#set$Cookie.colorscheme="blue"
作为最初一个例子,假设又要从头找回本来的cookie中的色彩设置。关于JSP,我们能够以为也有一个响应的工具类来供应匡助,由于用getCookies()间接做如许低层的会变得好笑并且坚苦。在JSP中:
<%Stringcolorscheme=ServletUtils.getCookie(request,"colorscheme");%>
在WebMacro中没有对工具类的必要,一般是:
$Cookie.colorscheme.Value
关于必需往写jsp的图形界面计划师,哪种语法更简单进修呢?
JSP1.1引进了自界说标志(customtags)同意恣意的和HTML类似的标志在JSP页面中在背景实行Java代码,这将具有必定的代价,但条件是要有一个普遍晓得的,全功效的,能够收费失掉的,尺度化的标志库。今朝还没有呈现如许的标志库。
因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。 |
|