JAVA教程之JSP举措
先谈谈我对java的一些认识。我选择java,是因为他语法简单,功能强大,从web,到桌面,到嵌入式,无所不能。但当我进一步了解了java后,感叹,java原来也有许多缺点。jsJSP举措使用XML语法格局的标志来把持Servlet引擎的举动。使用JSP举措能够静态地拔出文件、重用JavaBean组件、把用户重定向到别的的页面、为Java插件天生HTML代码。JSP举措包含:
jsp:include:在页面被哀求的时分引进一个文件。
jsp:useBean:寻觅大概实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输入某个JavaBean的属性。
jsp:forward:把哀求转到一个新的页面。
jsp:plugin:依据扫瞄器范例为Java插件天生OBJECT或EMBED标志。
13.1jsp:include举措
该举措把指定文件拔出正在天生的页面。其语法以下:
<jsp:includepage="relativeURL"flush="true"/>
后面已先容过include指令,它是在JSP文件被转换成Servlet的时分引进文件,而这里的jsp:include举措分歧,拔出文件的工夫是在页面被哀求的时分。jsp:include举措的文件引进工夫决意了它的效力要略微差一点,并且被援用文件不克不及包括某些JSP代码(比方不克不及设置HTTP头),但它的天真性却要好很多。
比方,上面的JSP页面把4则旧事择要拔出一个“WhatsNew?”页面。改动旧事择要时只需改动这四个文件,而主JSP页面却能够不作修正:
WhatsNew.jsp
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<TITLE>WhatsNew</TITLE>
</HEAD>
<BODYBGCOLOR="#FDF5E6"TEXT="#000000"LINK="#0000EE"
VLINK="#551A8B"ALINK="#FF0000">
<CENTER>
<TABLEBORDER=5BGCOLOR="#EF8429">
<TR><THCLASS="TITLE">
WhatsNewatJspNews.com</TABLE>
</CENTER>
<P>
Hereisasummaryofourfourmostrecentnewsstories:
<OL>
<LI><jsp:includepage="news/Item1.html"flush="true"/>
<LI><jsp:includepage="news/Item2.html"flush="true"/>
<LI><jsp:includepage="news/Item3.html"flush="true"/>
<LI><jsp:includepage="news/Item4.html"flush="true"/>
</OL>
</BODY>
</HTML>
13.2jsp:useBean举措
jsp:useBean举措用来装载一个将在JSP页面中利用的JavaBean。这个功效十分有效,由于它使得我们既能够发扬Java组件重用的上风,同时也制止了丧失JSP区分于Servlet的便利性。jsp:useBean举措最复杂的语法为:
<jsp:useBeanid="name"class="package.class"/>
这行代码的寄义是:“创立一个由class属性指定的类的实例,然后把它绑定到其名字由id属性给出的变量上”。不外,就象我们接上去会看到的,界说一个scope属性可让Bean联系关系到更多的页面。此时,jsp:useBean举措只要在不存在一样id和scope的Bean时才创立新的对象实例,同时,取得现有Bean的援用就变得很有需要。
取得Bean实例以后,要修正Bean的属性既能够经由过程jsp:setProperty举措举行,也能够在Scriptlet中使用id属性所定名的对象变量,经由过程挪用该对象的办法显式地修正其属性。这使我们想起,当我们说“某个Bean有一个范例为X的属性foo”时,就意味着“这个类有一个前往值范例为X的getFoo办法,另有一个setFoo办法以X范例的值为参数”。
有关jsp:setProperty举措的具体情形在前面会商。但如今必需懂得的是,我们既能够经由过程jsp:setProperty举措的value属性间接供应一个值,也能够经由过程param属性声明Bean的属性值来自指定的哀求参数,还能够列出Bean属性标明它的值应当来自哀求参数中的同名变量。
在JSP表达式或Scriptlet中读取Bean属性经由过程挪用响应的getXXX办法完成,大概更一样平常地,利用jsp:getProperty举措。
注重包括Bean的类文件应当放到服务器正式寄存Java类的目次下,而不是保存给修正后可以主动装载的类的目次。比方,关于JavaWebServer来讲,Bean和一切Bean用到的类都应当放进classes目次,大概封装进jar文件后放进lib目次,但不该该放到servlets下。
上面是一个很复杂的例子,它的功效是装载一个Bean,然后设置/读取它的message属性。
BeanTest.jsp
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<TITLE>ReusingJavaBeansinJSP</TITLE>
</HEAD>
<BODY>
<CENTER>
<TABLEBORDER=5>
<TR><THCLASS="TITLE">
ReusingJavaBeansinJSP</TABLE>
</CENTER>
<P>
<jsp:useBeanid="test"class="hall.SimpleBean"/>
<jsp:setPropertyname="test"
property="message"
value="HelloWWW"/>
<H1>Message:<I>
<jsp:getPropertyname="test"property="message"/>
</I></H1>
</BODY>
</HTML>
SimpleBean.java
BeanTest页面用到了一个SimpleBean。SimpleBean的代码以下:
packagehall;
publicclassSimpleBean{
privateStringmessage="Nomessagespecified";
publicStringgetMessage(){
return(message);
}
publicvoidsetMessage(Stringmessage){
this.message=message;
}
}
13.3关于jsp:useBean的进一步申明
利用Bean最复杂的办法是先用上面的代码装载Bean:
<jsp:useBeanid="name"class="package.class"/>
然后经由过程jsp:setProperty和jsp:getProperty修正和提取Bean的属性。不外有两点必需注重。第一,我们还能够用上面这类格局实例化Bean:
<jsp:useBean...>
Body
</jsp:useBean>
它的意义是,只要当第一次实例化Bean时才实行Body部分,假如是使用现有的Bean实例则不实行Body部分。正以下面将要先容的,jsp:useBean并不是老是意味着创立一个新的Bean实例。
第二,除id和class外,jsp:useBean另有其他三个属性,即:scope,type,beanName。下表扼要申明这些属性的用法。属性用法
id定名援用该Bean的变量。假如可以找到id和scope不异的Bean实例,jsp:useBean举措将利用已有的Bean实例而不是创立新的实例。
class指定Bean的完全包名。
scope指定Bean在哪一种高低文内可用,能够取上面的四个值之一:page,request,session和application。
默许值是page,暗示该Bean只在以后页面内可用(保留在以后页面的PageContext内)。
request暗示该Bean在以后的客户哀求内无效(保留在ServletRequest对象内)。
session暗示该Bean对以后HttpSession内的一切页面都无效。
最初,假如取值application,则暗示该Bean对一切具有不异ServletContext的页面都无效。
scope之以是很主要,是由于jsp:useBean只要在不存在具有不异id和scope的对象时才会实例化新的对象;假如已有id和scope都不异的对象则间接利用已有的对象,此时jsp:useBean入手下手标志和停止标志之间的任何内容都将被疏忽。
type指定援用该对象的变量的范例,它必需是Bean类的名字、超类名字、该类所完成的接口名字之一。请记着变量的名字是由id属性指定的。
beanName指定Bean的名字。假如供应了type属性和beanName属性,同意省略class属性。
13.4jsp:setProperty举措
jsp:setProperty用来设置已实例化的Bean对象的属性,有两种用法。起首,你能够在jsp:useBean元素的表面(前面)利用jsp:setProperty,以下所示:
<jsp:useBeanid="myName".../>
...
<jsp:setPropertyname="myName"
property="someProperty".../>
此时,不论jsp:useBean是找到了一个现有的Bean,仍是新创立了一个Bean实例,jsp:setProperty城市实行。第二种用法是把jsp:setProperty放进jsp:useBean元素的外部,以下所示:
<jsp:useBeanid="myName"...>
...
<jsp:setPropertyname="myName"
property="someProperty".../>
</jsp:useBean>
此时,jsp:setProperty只要在新建Bean实例时才会实行,假如是利用现有实例则不实行jsp:setProperty。
jsp:setProperty举措有上面四个属性:属性申明
namename属性是必须的。它暗示要设置属性的是哪一个Bean。
propertyproperty属性是必须的。它暗示要设置哪一个属性。有一个特别用法:假如property的值是“*”,暗示一切名字和Bean属性名字婚配的哀求参数都将被传送给响应的属性set办法。
valuevalue属性是可选的。该属性用来指定Bean属性的值。字符串数据会在方针类中经由过程尺度的valueOf办法主动转换成数字、boolean、Boolean、byte、Byte、char、Character。比方,boolean和Boolean范例的属性值(好比“true”)经由过程Boolean.valueOf转换,int和Integer范例的属性值(好比“42”)经由过程Integer.valueOf转换。
value和param不克不及同时利用,但可使用个中恣意一个。
paramparam是可选的。它指定用哪一个哀求参数作为Bean属性的值。假如以后哀求没有参数,则甚么事变也不做,体系不会把null传送给Bean属性的set办法。因而,你可让Bean本人供应默许属性值,只要当哀求参数明白指定了新值时才修正默许属性值。
比方,上面的代码片段暗示:假如存在numItems哀求参数的话,把numberOfItems属性的值设置为哀求参数numItems的值;不然甚么也不做。
<jsp:setPropertyname="orderBean"
property="numberOfItems"
param="numItems"/>
假如同时省略value和param,其效果相称于供应一个param且其值即是property的值。进一步使用这类借助哀求参数和属性名字不异举行主动赋值的头脑,你还能够在property(Bean属性的名字)中指定“*”,然后省略value和param。此时,服务器会检察一切的Bean属性和哀求参数,假如二者名字不异则主动赋值。
上面是一个使用JavaBean盘算素数的例子。假如哀求中有一个numDigits参数,则该值被传送给Bean的numDigits属性;numPrimes也相似。
JspPrimes.jsp
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<TITLE>在JSP中利用JavaBean</TITLE>
</HEAD>
<BODY>
<CENTER>
<TABLEBORDER=5>
<TR><THCLASS="TITLE">
在JSP中利用JavaBean</TABLE>
</CENTER>
<P>
<jsp:useBeanid="primeTable"class="hall.NumberedPrimes"/>
<jsp:setPropertyname="primeTable"property="numDigits"/>
<jsp:setPropertyname="primeTable"property="numPrimes"/>
Some<jsp:getPropertyname="primeTable"property="numDigits"/>
digitprimes:
<jsp:getPropertyname="primeTable"property="numberedList"/>
</BODY>
</HTML>
注:NumberedPrimes的代码略。
13.5jsp:getProperty举措
jsp:getProperty举措提取指定Bean属性的值,转换成字符串,然后输入。jsp:getProperty有两个必须的属性,即:name,暗示Bean的名字;property,暗示要提取哪一个属性的值。上面是一个例子,更多的例子能够在前文找到。
<jsp:useBeanid="itemBean".../>
...
<UL>
<LI>Numberofitems:
<jsp:getPropertyname="itemBean"property="numItems"/>
<LI>Costofeach:
<jsp:getPropertyname="itemBean"property="unitCost"/>
</UL>
13.6jsp:forward举措
jsp:forward举措把哀求转到别的的页面。jsp:forward标志只要一个属性page。page属性包括的是一个绝对URL。page的值既能够间接给出,也能够在哀求的时分静态盘算,以下面的例子所示:
<jsp:forwardpage="/utils/errorReporter.jsp"/>
<jsp:forwardpage="<%=someJavaExpression%>"/>
13.7jsp:plugin举措
jsp:plugin举措用来依据扫瞄器的范例,拔出经由过程Java插件运转JavaApplet所必须的OBJECT或EMBED元素。
附录:JSP正文和字符援用商定
上面是一些特别的标志或字符,你能够使用它们拔出正文或大概被视为具有特别寄义的字符。语法用处
<%--comment--%>JSP正文,也称为“埋没正文”。JSP引擎将疏忽它。标志内的一切JSP剧本元素、指令和举措都将不起感化。
<!--comment-->HTML正文,也称为“输入的正文”,间接呈现在了局HTML文档中。标志内的一切JSP剧本元素、指令和举措一般实行。
<\%在模板文本(静态HTML)中实践上但愿呈现“<%”的中央利用。
%\>在剧本元素内实践上但愿呈现“%>”的中央利用。
\利用单引号的属性内的单引号。不外,你既可使用单引号也能够利用双引号,而别的一种引号将具有一般寄义。
\"利用双引号的属性内的双引号。拜见“\”的申明。
其实产生见解的过程就是训练自己发现问题,分析问题的能力。根据以上的认识我想谈下传统的学习与通过视频独立学习的优缺点: 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 是一种为 Internet发展的计算机语言 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。
页:
[1]