仓酷云

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

[学习教程] JAVA编程:Servlets和JSP开辟准绳

[复制链接]
再现理想 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:31:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。js|servletServlet和JSP手艺是用Java开辟服务器端使用的次要手艺,是开辟商务使用暗示真个尺度。Java开辟者喜好利用它有多种缘故原由,其一是关于已熟习Java言语的开辟者来讲这个手艺简单进修;其二是Java把“一次编写,各处运转”的理念带进到Web使用中,完成了“一次编写,各处完成”。并且更加主要的是,假如遵守一些优秀的计划准绳的话,就能够把暗示和内容相分别,制造出高质量的、能够复用的、易于保护和修正的使用程序。例如说,在HTML文档中假如嵌进过量的Java代码(scriptlet),就会招致开辟出来的使用十分庞大、难以浏览、不简单复用,并且对今后的保护和修正也会形成坚苦。现实上,在CSDN的JSP/Servlet论坛中,常常能够看到一些发问,代码很长,能够逻辑却不是很明晰,大批的HTML和Java代码混同在一同,让人看得一头雾水。这就是随便开辟的坏处。

  假如你已基础懂得JSP和Servlet的各项手艺(最好也开辟过一些Web使用),那末我们能够一同切磋一下怎样开辟“好”的使用的一些引导准绳。我们起首对Servlet和JSP手艺做一个扫瞄。

  Servlet和JSP概览

  初期的静态网页次要接纳CGI(CommonGatewayInterface,大众网关接口)手艺,你可使用分歧的言语编写CGI程序,如VB、C/C++或Delphi等。固然CGI手艺开展成熟且功效壮大,但因为编程坚苦、效力低下、修正庞大等弱点,以是有渐渐被代替的趋向。在一切的新手艺中,JSP/Servlet具有更高效、更简单编程、功效更强、更平安和具有优秀的可移植性,因此被很多人以为是将来最有开展出路的静态网站手艺。

  与CGI类似,Servlet撑持哀求/呼应模子。当一个客户向服务器递交一个哀求时,服务器把哀求送给Servlet,Servlet卖力处置哀求并天生呼应,然后送给服务器,再由服务器发送给客户。与CGI分歧的是,Servlet没有天生新的历程,而是与HTTPServer处于统一历程中。它经由过程利用线程手艺,减小了服务器的开支。Servlet处置哀求的历程是如许的:当收到来自客户真个哀求后,挪用service办法,该办法中Servlet先判别到来的哀求是甚么范例的(GET/POST/HEAD…),然后挪用响应的处置办法(doGet/doPost/doHead…)并天生呼应。

  别看这么庞大,实在复杂说来Servlet就是一个Java类。与一样平常类的分歧的地方是,这个类运转在一个Servlet容器内,能够供应session办理和对象性命周期办理。因此当你利用Servlet的时分,你能够失掉Java平台的一切优点,包含平安性办理、利用JDBC会见数据库和跨平台的才能。并且,Servlet利用线程,因此能够开辟出效力更高的Web使用。

  JavaServerPages(JSP)

  JSP手艺是J2EE的一个关头手艺,它在更高一级的条理上笼统Servlet。它可让惯例静态HTML与静态发生的内容相分离,看起来像一个HTML网页,却作为Servlet来运转。如今有很多贸易使用服务器撑持JSP手艺,好比BEAWebLogic、IBMWebSphere、JRun等等。利用JSP比用Servlet更复杂。假如你有一个撑持JSP的Web服务器,而且有一个JSP文件,你能够把它放倒任何静态HTML文件能够安排的地位,不必编译,不必打包,也不必举行ClassPath的设置,就能够像会见一般网页那样会见它,服务器会主动帮你做好其他的事情。

  JSP事情道理

  JSP文件看起来就像一个一般静态HTML文件,只不外内里包括了一些Java代码。它利用.jsp的后缀,用来告知服务器这个文件必要特别的处置。当我们会见一个JSP页面的时分,这个文件起首会被JSP引擎翻译为一个Java源文件,实在就是一个Servlet,并举行编译,然后像其他Servlet一样,由Servlet引擎来处置。Servlet引擎装载这个类,处置来自客户的哀求,并把了局前往给客户,以下图所示:






screen.width-333)this.width=screen.width-333;">
:挪用JSP页面的流程


  今后再有客户会见这个页面的时分,只需该文件没有产生过变动,JSP引擎就间接挪用已装载的Servlet。假如已做过修正的话,那就会再次实行以上历程,翻译、编译并装载。实在这就是所谓的“第一人处分”。由于初次会见的时分要实行一系列以上的历程,以是会泯灭一些工夫;今后的会见就不会如许了。
开辟准绳

  这一部分我们列出一些开辟准绳,重点是JSP页面。关于怎样分别体现和内容的MVC由于要触及到JSP和Servlet的整合,我们稍候再谈。

  不要在JSP页面中嵌进过量的Java代码:关于十分复杂或是测试性的代码,把一切的Java代码间接放进JSP页面内是没有成绩的。可是这类办法不该该被过分利用,不然就会发生一年夜堆HTML和Java夹杂起来的代码,让人难以浏览和了解。办理办法是写一个独自的类,用来实行相干的盘算。一旦这个类测试经由过程,就能够把它放在任何实行一样盘算的场所中。如许能够增进代码的复用。

  选择符合的包括(include)机制:假如一个使用中每一个页面有一样的仰面和底部,大概另有导航条,那末就应当把它们放到一个独自的文件中,然后在每个页面中利用包括机制把它们到场到这个页面中:

Include指令:<%@includefile="filename"%>或等效xml语法
<jsp:directive.includefile=”filename”/>

Include举措:<jsp:includepage="page.jsp"flush="true"/>

  Include指令是当JSP页面翻译为Servlet的时分包括别的一个文件,Include举措是当哀求时包括别的一个文件的输入。假如被包括的文件不是常常修改的时分,我倡议利用Include指令,如许速率更快。假如被包括的文件必要不时修改大概晓得哀求时才干决意必要包括的内容时,那末应当利用Include举措。

  假如你利用JSP尺度标志库(JavaServerpagesStandardTagLibrary即JSTL)的话,那末另有第三中包括机制<c:import>,能够用来包括当地大概远程的资本。比方:

<c:importurl="./copyright.html"/>
<c:importurl="http://www.somewhere.com/hello.xml"/>

  不要把营业逻辑和暗示夹杂在一同:庞大的使用触及大批的代码,因此把营业逻辑和前真个暗示相分别就显得分外主要,这类分别可让任何一方的变更不会影响到别的一方。以是,一切的JSP代码都应当限定在暗示层,但是假如如许的话,你怎样完成你的营业逻辑呢?这就是JavaBean所做的事变。JavaBean手艺是一个自力于平台的组件模子,它闪开发者编写、测试经由过程一个组件后,能够到处利用,进步了复用性。在JSP手艺中,JavaBean完成了营业逻辑部分,它把数据前往给JSP页面,由JSP页面卖力格局化数据并输入到客户真个扫瞄器。在JSP页面中利用JavaBean组件的优点是:

  发生了能够复用的组件:任何使用都可使用这些组件

  能够把营业逻辑和暗示相分别:你能够修正数据的显现体例而不必思索营业逻辑。如许做的了局也能够明白事情中开辟职员的合作,网页开辟职员能够把精神放到怎样显现数据上,Java开辟者则更加存眷营业逻辑的完成。

  关于JavaBean你不必供应源代码,如许你的代码就不会被扫瞄器网页的人容易取得,能够回护你的休息功效。

  假如你的使用中利用了EJB组件,那末营业逻辑就应当安排在EJB中,由于EJB模子供应了性命周期办理、事件办理和多客户会见域对象(EntityBeans)。你能够细心看一下EnterpriseBluePrints中的例子,它就是这么做的。

  利用定制的标志:下面我们已会商过,把一切Java代码嵌进到JSP页面内其实不符合,由于网页开辟职员其实不必定明白Java言语,更难以了解Java语法。JavaBean能够封装良多Java代码,不外在JSP页面内利用JavaBean仍旧请求页面开辟职员懂得一些Java语法。

  JSP手艺中包括了定制标志库的功效。Java开辟职员能够天生本人的标志库,如许网页计划职员就能够利用相似HTML的语法来利用这些标志。编写和利用本人定制的标志库能够在更年夜水平上增进营业逻辑和暗示的分别。利用定制标志库次要有以下优点:

  能够打消在JSP页面中利用scriptlet 标志利用的任何参数都能够经由过程属性传进,从而不必要利用Java代码就能够到达但愿的目标。

  能够简化利用 网页计划职员不必要学会利用Java语法,他们能够用相似HTML语法就能够利用标志。
不懂Java的网页计划职员可使用标志库来完成独自利用HTML不克不及完成的义务。

  进步了复用性 标志库完整能够复用,这能够节俭开辟和测试的工夫。Scriptlet代码只能在“拷贝粘贴”级别长进行“复用”。

  复杂说来,你能够像用HTML构建暗示层一样利用标志库完成十分庞大的义务。上面是表页标志库的一些注重事项:

  1.坚持简便性:假如一个标志必要好几个属性的话,那末尽量把它分为几个标志。

  2.坚持复用性:同标志的利用职员(网页计划职员)多多交换,只管开辟出能够高度复用的标志库。

  3.不要统统都重新入手下手:如今已有一些能够无偿使用的标志库,好比JakartaTaglibs。假如你要用到一个标志,先看看是否是已有现成的可使用。

  不要“从头创造轮子”,不要统统重新入手下手:经由过程定制组件能够进步复用性,不外定制组件仍旧必要编写、测试和调试程序。成绩是这个事变他人大概已完成了,并且你的完成体例其实不必定比人家做得更好。这就是JSP尺度标志库(JavaServerPagesStandardTagLibrary,JSTL)要做的事变(JSTL请参考JSTL官方网站)。JSTL供应了轮回、读属性、遍历各类数据布局、前提表达式求值等各类标志。它也供应了一些庞大的标志,乃至像剖析XML文档的标志它都有。以是假如你要用到一个标志的话,最好先看看有无他人已完成的可使用,而不要次次重新入手下手,本人弄一套。

  利用JSTL表达使言语(JSTLExpressionLanguage):传送给JSP页面的数据一样平常经由过程JSP感化域属性大概哀求参数来举行。专门为网页开辟者计划的表达式言语(ExpressionLanguage,EL)把利用感化域属性传送信息作为从营业逻辑向JSP页面传送信息的尺度体例。这里要注重的是,EL只是JSP手艺中关头的一个方面,并非一种通用的程序计划言语。相反,它只是一种数据会见言语,它能够简化使用程序的数据的会见,不必Scriptlet和哀求时表达式求值就能够会见数据。
在JSP中,网页计划师要利用表达式语法<%=name%>或JavaBean组件来获得某些变量或属性的值,比方:

<tagLib:tagattribute="<%=

pageContext.getAttribute("name")%>">

  或

<%=aCustomerBean.getAddress().getCountry()%>

  表达使言语让网页计划师可使用简化的语法来会见信息。假如你只是要会见一个复杂的变量,你可使用如许的语法:

<tagLib:tagattribute="${name}">

  假如你要会见一个嵌套JavaBean的属性,你能够如许:

<tagLib:tagattribute="${

aCustomerBean.address.country}">

  表达式言语(EL)借用了JavaScript的语法,以是假如你对JavaScript很熟习的话,你就会以为巨爽。

  利用过滤器(filter):过滤器是一个对象,能够传输哀求或修正呼应。它能够在哀求抵达Servlet/JSP之前对其举行预处置,并且可以在呼应分开Servlet/JSP以后对其举行后处置。以是假如你有几个Servlet/JSP必要实行一样的数据转换或页面处置的话,你就能够写一个过滤器类,然后在部署形貌文件(web.xml)中把该过滤器与对应的Servlet/JSP接洽起来。

  创立过滤器实在很简单,你只须完成javax.servlet.Filter接口及它的三个办法:

publicvoidinit(FilterConfigconfig)

publicvoiddoFilter(ServletRequestreq,ServletResponserep,

FilterChainchain)

publicvoiddestroy()

  如许,你就能够完成你的过滤器。

  利用可移植的平安模子:年夜部分的使用服务器都供应了平安模子,不外一样平常它们都是针对某一个服务器或某一个厂商专有的。假如你的使用必要移植的话,那末你的使用最好利用能够移植的平安模子。假如你的使用有一些事后界说的流动用户的话,那末你可使用FROM考证和BASIC考证。但是假如你要静态天生客户的话(一样平常都是这类情形),你大概就必要利用服务器特定的API来创立和办理用户。如许当你的使用移植到别的一个服务器时,你大概就会碰着API不兼容的成绩。这类情形下,最好的办理办法是利用适配器(Adapter)形式(假如你对计划形式不熟习的话,请参看GoF的《计划形式》一书)。

  用数据库来保留耐久性数据:Servlet/JSP中可使用HttpSession对象也就是会话对象来保留用户的一时数据。不外假如你想保留耐久性数据的时分,你应当利用数据库,数据保留数据会更平安,并且对客户所用的扫瞄器没有甚么请求。如许即便你的使用服务器因为某种缘故原由溃散了,你的数据仍然优秀。

  高速缓存页面:使用程序中总有一些工具是绝对流动的,而别的一些工具是常常变更的。你应当利用静态的HTML文档来存储那些绝对流动的内容,如许客户端就能够举行高速缓存,客户每次会见你的使用时,只需会见已修改的部分。如许能够加速客户的会见速率。

  利用毗连池:假如你要本人写数据库会见代码的话,我以为利用你应当学会怎样利用数据库毗连池手艺。每个服务器都有针对数据库毗连池的设置文档,你要进修一下怎样利用。数据库毗连池能够减速你的使用的数据会见的速率,并且因为服务器替你办理了数据库毗连,这能够节俭你的良多事情。

  缓存数据库的会见了局:假如你的使用要对数据库举行频仍会见的话,你可使用一个对象来缓存你的数据,如许你就能够节俭大批会见数据库的开支。在《J2EE中心形式》和《有用J2EE计划形式编程指南》两本书中都有关于值对象形式(ValueObjectPattern)的具体切磋,你能够参考这两本书来取得响应的常识。

  利用数据会见对象形式:假如你的使用必要会见多个数据库体系大概大概会移植到别的的存储体系中,那末你针对特定厂商的优化代码便可能会生效。利用通用的代码存在实行效力的成绩,而利用优化代码又存在移植的成绩。以是就发生了数据会见对象形式(DataAccessObjectPattern,DAO),该形式既供应了各数据库厂商的顺应性,又能使用到他们供应的共同的优点。依照面向对象的分别义务的准绳,该形式将与企业信息体系(EnterpriseInformationSystem,EIS)通信必要的逻辑断绝到它本人的类中。如许,事物对象,如Servlet/JSP组件、JavaBean就能够使用数据会见对象(DAO)处置一切与EIS有关的事件。

  最好接纳JSP的XML语法:JSP手艺中常常存在着两种完成统一个义务的语法,一种是惯例的JSP语法,一种是对应的XML语法。固然两种语法感化不异,你最好仍是利用XML语法。存在两种语法的缘故原由是,JSP语法能够与之前的代码兼容,而J2EE利用XML作为其互换数据的中心,以是同时供应了XML语法。跟着J2EE的开展,XML的感化会愈来愈年夜,以是我倡议你利用XML语法。

  研讨Sun供应的J2EEBluePrints:Sun的EnterpriseBluePrints供应了大批引导准绳、计划形式和很好的例子(宠物店,PetStore)。你能够好好研讨一下这些内容,如许能够进步你的计划和开辟程度。
整合Servlet和JSP

  JSP手艺标准种给出了两种利用JSP开辟Web使用的体例,这两种体例能够归结为模子一和模子二,这两种模子的次要不同在于它们处置营业的流程分歧。模子一,以下图所示,称之为JSP+JavaBeans模子。在这一模子中,JSP页面单独呼应哀求并将处置了局前往给客户,一切的数据经由过程JavaBean来处置,JSP完成页面的体现。






screen.width-333)this.width=screen.width-333;">
:JSP模子一


  从上图能够看出,模子一也完成了页面体现和营业逻辑相分别。但是利用这类体例就要在JSP页面利用大批的Java代码,当必要处置的营业逻辑很庞大时,这类情形会变得十分糟。大批嵌进式代码使全部页面程序变得非常庞大。关于前端界面计划的网页开辟职员来讲,这几乎是一场恶梦。以是,模子一不克不及满意年夜型使用的必要,可是关于小型使用,由于该模子复杂,不必触及诸多要素,从而能够很好地满意小型使用的必要,以是在复杂使用中,能够思索模子一。

  模子二,以下图所示,称之为JSP+Servlet+JavaBeans模子。这一模子分离了JSP和Servlet手艺,充实使用了JSP和Servlet两种手艺原本的上风。这个模子利用JSP手艺来体现页面,利用Servlet手艺完成大批的事件处置,利用Bean来存储数据。Servlet用来处置哀求的事件,充任一个把持者的脚色,并卖力向客户发送哀求。它创立JSP必要的Bean和对象,然后依据用户哀求的举动,决意将哪一个JSP页面发送给客户。






screen.width-333)this.width=screen.width-333;">
:JSP模子二


  从开辟的概念看,模子二具有更明晰的页面体现,分明的开辟脚色的分别,能够充实使用开辟团队中的网页计划职员和Java开辟职员。这些上风在年夜型项目中体现得尤其凸起,网页计划职员能够充实发扬本人的美术和计划才干来充实体现页面,程序编写职员能够充实发扬本人的营业逻辑处置头脑,完成项目中的营业处置。

  别的,从计划布局来看,这类模子充实表现了模子视图把持器(MVC)的计划架构。现实上,现存的良多开辟框架都是基于这类模子的,充实完成了MVC,比方ApacheStruts框架和JavaServerFaces框架


再举这样一个例子:如果你想对一个数字取绝对值,你会怎么做呢?java的做法是intc=Math.abs(-166);而ruby的做法是:c=-166.abs。呵呵,这就看出了java与ruby的区别。
兰色精灵 该用户已被删除
沙发
发表于 2015-1-21 09:33:34 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
小女巫 该用户已被删除
板凳
发表于 2015-1-28 06:14:52 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
变相怪杰 该用户已被删除
地板
发表于 2015-1-30 05:17:47 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
活着的死人 该用户已被删除
5#
发表于 2015-2-6 07:33:05 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
若相依 该用户已被删除
6#
发表于 2015-2-6 09:13:09 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
小妖女 该用户已被删除
7#
发表于 2015-2-7 19:04:23 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
8#
发表于 2015-2-8 20:10:10 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
爱飞 该用户已被删除
9#
发表于 2015-2-25 02:27:45 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
小魔女 该用户已被删除
10#
发表于 2015-3-1 20:52:55 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
飘飘悠悠 该用户已被删除
11#
发表于 2015-3-7 08:49:35 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
再见西城 该用户已被删除
12#
发表于 2015-3-7 18:52:06 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
金色的骷髅 该用户已被删除
13#
发表于 2015-3-11 05:44:48 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
莫相离 该用户已被删除
14#
发表于 2015-3-11 11:04:39 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
飘灵儿 该用户已被删除
15#
发表于 2015-3-14 01:22:28 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
谁可相欹 该用户已被删除
16#
发表于 2015-3-20 23:18:26 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
第二个灵魂 该用户已被删除
17#
发表于 2015-4-4 00:26:14 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
精灵巫婆 该用户已被删除
18#
发表于 2015-4-6 01:11:57 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
分手快乐 该用户已被删除
19#
发表于 2015-4-10 03:25:17 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
老尸 该用户已被删除
20#
发表于 2015-4-11 01:25:17 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 20:30

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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