仓酷云
标题:
JAVA网页编程之困扰JSP的一些成绩与办理办法
[打印本页]
作者:
飘灵儿
时间:
2015-1-18 11:39
标题:
JAVA网页编程之困扰JSP的一些成绩与办理办法
用winrar打包j2ee的程序和用IDE打包应用程序是一样的。按照你的想法,你是不是也希望服务器都整合由一家公司提供呢?js|办理|成绩
现在每个利用servlets的开辟者都晓得JSP,一种由Sun公司创造并消费大批精神加以奉行并建构在servlet手艺之上的web手艺。JSP将servlet中的html代码离开了出来,从而能够减速web使用开辟和页面保护。实践上,由Sun公布的官方"使用开辟模子"文档上说得更远:"JSP手艺应当被视为尺度,而servlets在多半情形下可视为一种增补。"(Section1.9,1999/12/15听取定见版)。
本文的目标在于听取对该声名的公道性的评价--经由过程对照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(http://webmacro.org,fromSemiotek),他们的引擎是收费的。
开辟者应当了然,选定一个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的语法。别的ertemplateengines利用了别的的语法范例。
再看另一个例子,假定一个初级的"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代码,这将具有必定的代价,但条件是要有一个普遍晓得的,全功效的,能够收费失掉的,尺度化的标志库。今朝还没有呈现如许的标志库。
成绩#3:复杂事情仍旧很累人
即便是很复杂的事情,比方包括header和footer,在JSP中仍旧很很坚苦。假定有一个"header"和一个"footer"模板要包括到一切页面,而每个模板要在content中包括以后的页题目。
在JSP中最好举措是:
<%Stringtitle="ThePageTitle";%>
<%@includefile="/header.jsp"%>
...你的页面内容...
<%@includefile="/footer.jsp"%>
页面计划者要记着不克不及漏掉第一行的分号并要将title界说为一个字符串。别的,/header.jsp和/footer.jsp必需在根目次下而且必需是可存取的完全文件。
在WebMacro中包括headers和footers做起来对照复杂:
#set$title="ThePageTitle"
#parse"header.wm"
Yourcontenthere
#parse"footer.wm"
这里对计划者来讲没有要切记的分号或对title的界说,.wm文件能够放在可自界说的搜刮路径下。
成绩#4:很粗的轮回
在JSP中轮回很坚苦。这里是用JSP反复打印出每个ISP对象名字。
<%
Enumeratione=list.elements();
while(e.hasMoreElements()){
out.print("Thenextnameis");
out.println(((ISP)e.nextElement()).getName());
out.print("<br>");
}
%>
大概甚么时分会有效户自界说标志来做这些轮回。对"if"也是云云。JSP页大概看上往成了很乖僻的java代码。而同时,webmacro轮回很大度:
#foreach$ispin$isps{
Thenextnameis$isp.Name<br>
}
假如需要的话,#foreach指令可被自界说的#foreach-backwards指令很简单地代替。
用jsp的话极可能变如许:(这里是一个大概的<foreach>标志)
<foreachitem="isp"list="isps">
Thenextnameis<jsp:getPropertyname="isp"property="name"/><br>
</foreach>
计划者固然地回选择前者。
成绩#5:无用的堕落信息
JSP常有一些使人惊奇的堕落信息。这是由于页面起首被转换成为一个servlet然后才举行编译。好的JSP工具能够绝对增添找到堕落地位的大概性,但即便是最好的工具也没法使一切堕落信息都能简单地被读懂。因为转化的历程,一些毛病对工具来讲大概基本不成能被辨认。
比方,假定JSP页面必要创建一个对一切页通用的题目。以下代码并没有错:
<%staticStringtitle="Globaltitle";%>
但Tomcat会供应以下堕落信息:
work/%3A8080%2F/JC_0002ejspJC_jsp_1.java:70:Statementexpected.
staticintcount=0;
^
此信息以为以上剧本被放进_jspService()办法而静态变量不同意放进办法中。该语法应当是<%!%>。页面计划者很难读懂这些堕落信息。即便最好的平台在这方面也做得很不敷。即便一切Java代码都从页中移出也没法办理成绩。别的,以下表达式有甚么错?
<%count%>
tomcat给出:
work/8080/_0002ftest_0002ejsptest_jsp_0.java:56:Classcountnotfoundin
typedeclaration.
count
^
work/8080/_0002ftest_0002ejsptest_jsp_0.java:59:Invaliddeclaration.
out.write("
");
^
换句话说,只是丢失了一个标志罢了。应当是<%=count%>。
因为templateengine能够在template文件中间接发生而没有任何戏剧性的向代码转化,以是能够十分简单地给出得当的堕落呈报。顺次类推,当c言语的命令被打进Unixshell的命令行,你其实不但愿shell会天生一个C程序来运转这个命令,而只是必要shell复杂地注释命令并加以实行,若有毛病也间接给出。
成绩#6:必要一个编译器
JSP必要一个置放在webserver中的编译器。因为Sun回绝保持包括了他们的javac编译器的tools.jar库,这个中就变得有成绩了。Web服务器能够包括进一个第三方的编译器如ibm的jikes。但如许的编译器其实不能在一切平台上顺遂事情(用C++写成的)也倒霉于创建纯Java的web服务器。JSP有一个预编译选项能够起到必定感化,只管其实不完善。
成绩#7:空间的华侈
JSP损耗了分外的内存和硬盘空间。对服务器上每30K的JSP文件,必需要有响应的年夜于30K的类文件发生。实践上使得硬盘空间更加。思索到JSP文件随时能够很简单地经由过程<%@include>包括一个年夜的数据文件,如许的存眷有着很实际的意义。同时,每个JSP的类文件数据必需加载到服务器的内存中,这意味着服务器的内存必需永久地将全部JSP文档树保留下往。多数一些JVM有才能将类文件数据从内存中移往;可是,程序员一般没法把持如许的划定规矩来从头声名,并且对年夜的站点来讲从头声名大概不是很无效。对templateengines因为没有发生第二个文件,以是节俭了空间。Templateengines还为程序员供应对templates在内存中举行缓存的完整把持。
利用templateengine也有一些成绩:
Template的成绩#1:没有严厉界说
templateengine该怎样事情并没有严厉界说。但是,但绝对jsp来讲,实在这其实不很主要,和JSP分歧的是,templateengines对web服务器没有任何特别请求--任何撑持servlet的服务器都能够撑持templateengines(包含API2.0服务器如Apache/JServ,它们其实不能完整撑持JSP)!假如为最好的templateengine计划供应安康的合作本能够引发一场刺眼的刷新,出格是有开放源码的增进,(可让头脑互相推进和增进),那末明天的WebMacro就会象Perl一样,没有严厉界说但公然源码构造的推进就是它的尺度。
Template的成绩#2:没有取得公认
Templateengines并未被普遍晓得。JSP已占有了极年夜的贸易市场,而且不得人心。而利用gtemplateengines只能是一种未被懂得的替换手艺。
Template的成绩#3:还没有分配好
Templateengines还没有被高度地分配好。没有对templateengine和JSP二者举行功能测试和对照。实际上说一个分配无缺的templateengine完成应当和一个分配好的JSP相婚配;可是,思索到第三方为jsp已作出了这么深远的推进,了局只要jsp被很好地分配好了。
JSP的脚色
固然地,JSP在未来一定会有其位置。即便从称号上也能够看出JSP和ASP的类似性,它们只要一个字母的不同。以是假如要让利用asp的人们转向java,十分类似的jsp情况将对此起到很年夜的推进感化,和asp坚持这类对应干系所能起到的感化应当也是被推出jsp的计划者重点思索到的。
但是这里想要夸大的一点是:有益于转进新情况的事情者,和实践上是不是是利用该情况的最好体例,这二者是有很年夜分歧的。
JSP日趋显现出它正成为最主要的java手艺之一,它让人们分开ASP的天下--由此,Sun将撑持这一强无力的贸易case,Java相干手艺撑持者也将赐与更鼎力的撑持。
但是,这并不是java平台的最好办理计划。这将使java办理计划变得好象是没有java的办理计划了。
你对java乐观有点盲目。java的关键就是在服务器上表现优异,而且它提供了整个开发所需要的工具。应该是说,看哪天。net有没有机会赶上java。
作者:
变相怪杰
时间:
2015-1-21 12:28
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
作者:
小魔女
时间:
2015-1-25 17:46
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者:
若天明
时间:
2015-1-25 23:49
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者:
透明
时间:
2015-2-3 06:42
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
作者:
分手快乐
时间:
2015-2-3 21:32
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
作者:
admin
时间:
2015-2-9 05:29
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
作者:
若相依
时间:
2015-2-10 19:50
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
作者:
柔情似水
时间:
2015-2-25 19:52
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
作者:
爱飞
时间:
2015-3-4 22:27
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者:
乐观
时间:
2015-3-11 21:14
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者:
老尸
时间:
2015-3-16 08:54
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
作者:
深爱那片海
时间:
2015-3-22 21:43
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
作者:
莫相离
时间:
2015-3-27 14:11
是一种使用者不需花费很多时间学习的语言
作者:
兰色精灵
时间:
2015-4-1 16:08
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
作者:
小妖女
时间:
2015-4-12 10:51
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
作者:
愤怒的大鸟
时间:
2015-4-15 19:05
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
作者:
再现理想
时间:
2015-4-23 16:49
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者:
不帅
时间:
2015-5-4 08:30
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者:
再见西城
时间:
2015-5-8 01:03
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
作者:
山那边是海
时间:
2015-5-11 21:00
是一种突破用户端机器环境和CPU
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2