仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 594|回复: 12
打印 上一主题 下一主题

[学习教程] JAVA网页设计我以为JSP有成绩

[复制链接]
不帅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:28:03 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。Oracle收购Sun后Java前途未卜。js|成绩(编者:这篇文章的原文初次在外洋呈现时,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代码:

  Homepage

  你能够试图制止Java代码,而利用标志,但这将给你以下难以浏览的字符串:

  /index.html">HomePage

  利用templateengine则没有Java代码和丢脸的语法。这里是一样请求下在WebMacro中的写法:

  Homepage

  在WebMacro中,ContextPath作为$Request变量的一个属性,利用相似Perl的语法。别的templateengines利用了别的的语法范例。

  再看另外一个例子,假定一个初级的"view"必要设定一个cookie来纪录用户缺省的色彩设置--这类义务看起来也许只能由view而不是servlet把持器来完成。在JSP中要有如许的Java代码:

  

  在WebMacro中则没有Java代码:

  #set$Cookie.colorscheme="blue"

  作为最初一个例子,假设又要从头找回本来的cookie中的色彩设置。关于JSP,我们能够以为也有一个响应的工具类来供应匡助,由于用getCookies()间接做如许低层的会变得好笑并且坚苦。在JSP中:

  

  在WebMacro中没有对工具类的必要,一般是:

  $Cookie.colorscheme.Value

  关于必需往写jsp的图形界面计划师,哪种语法更简单进修呢?

  JSP1.1引进了自界说标志(customtags)同意恣意的和HTML类似的标志在JSP页面中在背景实行Java代码,这将具有必定的代价,但条件是要有一个普遍晓得的,全功效的,能够收费失掉的,尺度化的标志库。今朝还没有呈现如许的标志库。
成绩#3:复杂事情仍旧很累人

  即便是很复杂的事情,比方包括header和footer,在JSP中仍旧很坚苦。假定有一个"header"和一个"footer"模板要包括到一切页面,而每个模板要在content中包括以后的页题目。

  在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对象名字。

  

  大概甚么时分会有效户自界说标志来做这些轮回。对"if"也是云云。JSP页大概看上往成了很乖僻的java代码。而同时,webmacro轮回很大度:

  #foreach$ispin$isps{

  Thenextnameis$isp.Name


  }

  假如需要的话,#foreach指令可被自界说的#foreach-backwards指令很简单地代替。

  用jsp的话极可能变如许:(这里是一个大概的标志)

  

  Thenextnameis


  

  计划者固然地会选择前者。

  成绩#5:无用的堕落信息

  JSP常有一些使人惊奇的堕落信息。这是由于页面起首被转换成为一个servlet然后才举行编译。好的JSP工具能够绝对增添找到堕落地位的大概性,但即便是最好的工具也没法使一切堕落信息都能简单地被读懂。因为转化的历程,一些毛病对工具来讲大概基本不成能被辨认。

  比方,假定JSP页面必要创建一个对一切页通用的题目。以下代码并没有错:

  

  但Tomcat会供应以下堕落信息:

  work/%3A8080%2F/JC_0002ejspJC_jsp_1.java:70:Statementexpected.

  staticintcount=0;

  ^

  此信息以为以上剧本被放进_jspService()办法而静态变量不同意放进办法中。该语法应当是。页面计划者很难读懂这些堕落信息。即便最好的平台在这方面也做得很不敷。即便一切Java代码都从页中移出也没法办理成绩。别的,以下表达式有甚么错?

  

  tomcat给出:

  work/8080/_0002ftest_0002ejsptest_jsp_0.java:56:Classcountnotfoundin

  typedeclaration.

  count

  ^

  work/8080/_0002ftest_0002ejsptest_jsp_0.java:59:Invaliddeclaration.

  out.write("
");

  ^

  换句话说,实在只不外是丢失了一个标志罢了。应当是。

  因为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技术类的学习,我觉得大课堂反而会影响自身独立思考的过程,因为上课的时候,老师讲课的速度很快为了不遗漏要点,通常会仔细的听,
爱飞 该用户已被删除
13#
发表于 2015-3-21 10:41:03 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
蒙在股里 该用户已被删除
12#
发表于 2015-3-14 15:08:10 | 只看该作者
是一种突破用户端机器环境和CPU
再现理想 该用户已被删除
11#
发表于 2015-3-7 08:12:34 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
小女巫 该用户已被删除
10#
发表于 2015-3-4 03:31:42 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
因胸联盟 该用户已被删除
9#
发表于 2015-2-19 03:41:35 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
飘灵儿 该用户已被删除
8#
发表于 2015-2-8 13:58:41 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
admin 该用户已被删除
7#
发表于 2015-2-7 19:50:30 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
小妖女 该用户已被删除
6#
发表于 2015-2-7 18:50:55 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
柔情似水 该用户已被删除
5#
发表于 2015-2-7 14:36:41 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
第二个灵魂 该用户已被删除
地板
发表于 2015-2-6 10:31:57 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
愤怒的大鸟 该用户已被删除
板凳
发表于 2015-1-30 11:11:51 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
小魔女 该用户已被删除
沙发
发表于 2015-1-21 07:40:19 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 15:19

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表