jsp由浅入深
<TABLE cellSpacing=8 cellPadding=0 width=582 background=10602.files/bg6.gif border=0><TR>
<TD vAlign=top>
<TABLE cellSpacing=8 cellPadding=0 width="100%" background=10602.files/point.gif border=0>
<TR>
<TD colSpan=3 height=4></TD></TR>
<TR>
<TD colSpan=3 height=22>
<DIV class=title align=center>JSP由浅入深(1)—— 熟悉JSP服务器</DIV></TD></TR>
<TR vAlign=bottom>
<TD width=90 height=18>
<DIV class=gray align=right> </DIV>
<DIV class=gray></DIV></TD>
<TD height=18>
<DIV align=center><FONT color=#666666>编译:ZSC/太平洋网络学院</FONT></DIV></TD>
<TD width=90>
<DIV class=gray align=right></DIV></TD></TR>
<TR vAlign=bottom>
<TD colSpan=3 height=0></TD></TR></TABLE>
<P><B>熟悉JSP服务器</B></P>
<P>本“JSP由浅入深” 系列教程是面向中级和高级用户的,它需要HTML和Java的基础。你应该会将HTML网页连接到一起,并且会利用Java来进行编程。如果你还没有这个基础,建议你还是先打好基础为好。这个系列教程将通过编制简单的例子到复杂的例子来教会你JSP。本系列教程是采用循序渐进的方法来进行阐述的,即由浅入深。为了使你能够获得最大的进步,建议你再学习的过程中将所有的例子自己进行调试。开始的例子可能会很简单,所以开始的时候你要特别耐心,不要认为太简单而跳过。如果你仔细地调试例子,那么你就会很快地熟悉JSP的本质方法。</P>
<P>好吧,开始我们的第一个教程:熟悉JSP服务器。</P>
<P>如果你没有一个JSP网络服务器,那么你在开始教程之前还是先下载它吧。以下的几个服务器可以免费下载或者进行开发:</P>
<P>Blazix (1.5 Megabytes, JSP, Servlets and EJBs)
来自www.blazix.com/blazix.html</P>
<P>ServletExec (3.8 Megabytes, JSP and Servlets)
来自www.unifyeware.com/servletExec/</P>
<P>JRun (11 Megabytes, JSP, Servlets and EJBs)
来自www.jrun.com/</P>
<P>WebLogic(44 Megabytes, JSP, Servlets and EJBs)
来自www.beasys.com/</P>
<P>WebSphere (105 Megabytes, JSP, Servlets and EJBs)
来自www-4.ibm.com/sofeware/webservers/</P>
<P>如果你还没有服务器,那我建议你下载Blazix,因为它包含了标签库(可以用于以后关于标签库的教程)。Blazix同样也是很小的并且它可以很容易地下载,而且可以运行于所有的操作系统,包括处于主流的Windows98。还有一个优点,就是它的安装的速度更块。</P>
<P>为了真正学习JSP,最重要的是,你要在一个真实的服务器来调试教程的例子。最好的方法是通过自己的实践来学习JSP的技巧。如果你现在还没有服务器,那就先下载一个安装它就行了。</P>
<P>装上网络服务器以后,你应该学会以下关于网络服务器的的一些知识:应该在哪里放置文件?怎样访问来自浏览器的文件(是以http:开头的,而不是file:开头)?</P>
<P>你首先要创建以下的简单文件,比如:</P>
<P><HTML></P>
<P><BODY></P>
<P>Hello, world</P>
<P></BODY></P>
<P></HTML></P>
<P>怎样放置文件并在浏览器(以http://)中浏览它,这个步骤对应不同的网络服务器是不同的,所以你需要参看网络服务器的文档并找出答案。</P>
<P align=center><a href="mk:@MSITStore:E:\JAVA\Java和Jsp电子书\jsp由浅入深.chm::/JSP.Article/10604.htm" target="_blank" >[下一页]</A></P></TD></TR>
<TR bgColor=#ffffff>
<TD height=1></TD></TR>
<TR>
<TD></TD></TR></TABLE> <TABLE cellSpacing=8 cellPadding=0 width=582 background=10604.files/bg6.gif border=0><TR><TD vAlign=top><TABLE cellSpacing=8 cellPadding=0 width="100%" background=10604.files/point.gif border=0><TR><TD colSpan=3 height=4></TD></TR><TR><TD colSpan=3 height=22><DIV class=title align=center>JSP由浅入深(2)—— 第一个JSP</DIV></TD></TR><TR vAlign=bottom><TD width=90 height=18><DIV class=gray align=right> </DIV><DIV class=gray></DIV></TD><TD height=18><DIV align=center><FONT color=#666666>编译:ZSC/太平洋网络学院</FONT></DIV></TD><TD width=90><DIV class=gray align=right></DIV></TD></TR><TR vAlign=bottom><TD colSpan=3 height=0></TD></TR></TABLE><P><B>第一个JSP</B></P><P>实际上,JSP只是简单地将Java放到HTML网页中去而已。你可以将现有的HTML网页将它们的扩展名由“.html”改为“.jsp”,这是一个创建第一个JSP最好的方法。</P><P>我们可以将上一个练习中的文件将它的扩展名由“.html”改为“.jsp”。然后在浏览器中装载新的文件,即以“.jsp”为扩展名的文件。</P><P>此时,你可以看到的输出,但是它需要更长的时间。这个现象也只发生在你第一次装载它的时候。如果你重新装载它,速度就正常了。</P><P>到底出现的什么事情了?原来是你的JSP被转变成Java文件,并且被编译以及装载。而编译只进行一次,所以第一次装载的时候时间会长一点,原来是花在了编译上了。而在第二次装载的时候它不再需要编译,所以器装载速度就回复正常了。这里要提醒的是,当将HTML格式的文件转变成JSP格式的文件,都需要重新编译。</P><P>当然,只是编写HTML网页再将其转变成.jsp扩展名的文件是没有用的,在后面的教程中你将学到什么才能使JSP变得有用。</P><P align=center> </P></TD></TR><TR bgColor=#ffffff><TD height=1></TD></TR><TR><TD></TD></TR></TABLE> <TABLE cellSpacing=8 cellPadding=0 width=582 background=10605.files/bg6.gif border=0><TR><TD vAlign=top><TABLE cellSpacing=8 cellPadding=0 width="100%" background=10605.files/point.gif border=0><TR><TD colSpan=3 height=4></TD></TR><TR><TD colSpan=3 height=22><DIV class=title align=center>JSP由浅入深(3)—— 通过表达式增加动态内容</DIV></TD></TR><TR vAlign=bottom><TD width=90 height=18><DIV class=gray align=right> </DIV><DIV class=gray></DIV></TD><TD height=18><DIV align=center><FONT color=#666666>编译:ZSC/太平洋网络学院</FONT></DIV></TD><TD width=90><DIV class=gray align=right></DIV></TD></TR><TR vAlign=bottom><TD colSpan=3 height=0></TD></TR></TABLE><P> 在我们前面的章节中,任何的HTML文件都可以转变成JSP文件,做法是通过改变它的扩展名为.jsp。当然,我们要知道是什么使得JSP有用呢?答案是嵌入Java的能力。将下列文本放置在一个以.jsp为扩展名的文件中,比如说这个文件为myjsp.jsp,然后将这个文件放置到你的JSP目录下并且在浏览器上看它。以下是具体的代码:</P><P><HTML></P><P><BODY></P><P>Hello! The time is now <%= new java.util.Date() %></P><P></BODY></P><P></HTML></P><P>这里要注意,每次你在浏览器中重载网页的时候,它就出现当前时间。字符系列<%= and %>的作用是圈起Java表达式,这个表达式将在运行的时候被计算。</P><P>正因为这样,使用JSP产生动态HTML网页来响应用户的动作才变为可能。</P><P>好吧,教程结束之后你最好作个练习:为不同的系统属性编写一个JSP用来输出由System.getProperty返回的数值,比如java.version、java.home、os.name、user.home以及user.dir等等。</P><P align=center> </P></TD></TR><TR bgColor=#ffffff><TD height=1></TD></TR><TR><TD></TD></TR></TABLE> <TABLE cellSpacing=8 cellPadding=0 width=582 background=10606.files/bg6.gif border=0><TR><TD vAlign=top><TABLE cellSpacing=8 cellPadding=0 width="100%" background=10606.files/point.gif border=0><TR><TD colSpan=3 height=4></TD></TR><TR><TD colSpan=3 height=22><DIV class=title align=center>JSP由浅入深(4)—— Scriptlets</DIV></TD></TR><TR vAlign=bottom><TD colSpan=3 height=18><DIV class=gray align=right> </DIV><DIV class=gray></DIV><DIV align=center><FONT color=#666666>编译:ZSC/太平洋网络学院</FONT></DIV></TD></TR><TR vAlign=bottom><TD colSpan=3 height=0></TD></TR></TABLE><P>上面的教程我们已经学会了如何在JSP网页中通过在<%= and %>字符系列之间嵌入Java表达式。但是通过将Java表达式放置到HTML进行大量的编程工作是很困难的。</P><P>JSP另外允许你编写Java代码块嵌入到JSP中。具体做法是:将Java代码段放置于<% and %>字符之间。其实跟表达式是一样的,只不过在开始的地方没有等号而已。</P><P>代码块就是我们熟知的“scriptlet”。如果单单是scriptlet,对于HTML起不了任何作用。而每次scriptlet包含了被执行的Java代码的时候,JSP就被调用。</P><P>下面的代码是对上一节JSP教程进行修改后的代码,我们增加了一个scriptlet:</P><P><HTML></P><P><BODY></P><P><%</P><P>// This is a scriptlet. Notice that the "date"</P><P>// variable we declare here is available in the</P><P>// embedded expression later on.</P><P>System.out.println( "Evaluating date now" );</P><P>java.util.Date date = new java.util.Date();</P><P>%></P><P>Hello! The time is now <%= date %></P><P></BODY></P><P></HTML></P><P>如果你运行上面的例子,你将会注意到“System.out.println”输出在服务器日志中。这是一个方便的方法来作一些简单的调试。有些服务器在IDE中有调试JSP的功能,你可以参见服务器文档来查看是否有这种功能。</P><P align=center> </P></TD></TR><TR bgColor=#ffffff><TD height=1></TD></TR><TR><TD></TD></TR></TABLE> <TABLE cellSpacing=8 cellPadding=0 width=582 background=10607.files/bg6.gif border=0><TR><TD vAlign=top><TABLE cellSpacing=8 cellPadding=0 width="100%" background=10607.files/point.gif border=0><TR><TD colSpan=3 height=4></TD></TR><TR><TD colSpan=3 height=22><DIV class=title align=center>JSP由浅入深(5)—— Scriptlets和HTML的混合</DIV></TD></TR><TR vAlign=bottom><TD colSpan=3 height=18><DIV class=gray align=right> </DIV><DIV class=gray></DIV><DIV align=center><FONT color=#666666>编译:ZSC/太平洋网络学院</FONT></DIV></TD></TR><TR vAlign=bottom><TD colSpan=3 height=0></TD></TR></TABLE><P>在前面的教程中我们已经在一个scriptlet中使用了“out”变量来产生HTML输出。对于更复杂的HTML,如果我们还是使用“out”变量那就会失去JSP编程的许多优势。其实我们可以很简单地就实现Scriptlets 和 HTML的混合。</P><P>假如你要在HTML产生一个表格。产生表格是一个普通的操作,在实践中你可能想从一个SQL表格或者从文件的行产生一个表格。为了是所举的例子尽量的简单,我们产生一个表格,使这个表格包含从1到N的数字。虽然以下的例子不是很有用,但是你从中可以学到一些技巧的。以下就是JSP的程序片段:</P><P><TABLE BORDER=2></P><P><%</P><P>for ( int i = 0; i < n; i++ ) {</P><P>%></P><P><TR></P><P><TD>Number</TD></P><P><TD><%= i+1 %></TD></P><P></TR></P><P><%</P><P>}</P><P>%></P><P></TABLE></P><P>在编制代码之前,你应该首先定义一个整型(int)变量“n”,利用这个变量我们要输出“n”行的表格。从上面的代码中我们可以注意到%> 和 <%字符出现在“for”循环中,原来这是为了使你退到HTML然后又回到scriptlet,其实这正是Scriptlets 和 HTML的混合的技巧。</P><P>上面的代码其实很简单:可以退出scriptlet的时候,就编写HTML;然后又回到scriptlet中去。任何的循环控制表达式,比如“while”或者“for”循环以及“if”语句都可以控制HTML。如果HTML处在一个循环中它就会在每一次的循环中执行一次。</P><P align=center> </P></TD></TR><TR bgColor=#ffffff><TD height=1></TD></TR><TR><TD></TD></TR></TABLE> <TABLE cellSpacing=8 cellPadding=0 width=582 background=10608.files/bg6.gif border=0><TR><TD vAlign=top><TABLE cellSpacing=8 cellPadding=0 width="100%" background=10608.files/point.gif border=0><TR><TD colSpan=3 height=4></TD></TR><TR><TD colSpan=3 height=22><DIV class=title align=center>JSP由浅入深(6)—— JSP声明</DIV></TD></TR><TR vAlign=bottom><TD colSpan=3 height=18><DIV class=gray align=right> </DIV><DIV class=gray></DIV><DIV align=center><FONT color=#666666>编译:ZSC/太平洋网络学院</FONT></DIV></TD></TR><TR vAlign=bottom><TD colSpan=3 height=0></TD></TR></TABLE><P></P><P>现在你所编写的JSP要变成一个类的定义。所有你编写的scriptlets要放置到这个类的一个方法中。同样,你可以增加变量和方法声明到这个类中。当然你也可以从scriptlets和表达式中使用这些变量和方法。</P><P>为了增加一个声明,你必须使用<%! and %>来圈起你的声明,比如:</P><P><%@ page import="java.util.*" %></P><P><HTML></P><P><BODY></P><P><%!</P><P>Date theDate = new Date();</P><P>Date getDate()</P><P>{</P><P>System.out.println( "In getDate() method" );</P><P>return theDate;</P><P>}</P><P>%></P><P>Hello! The time is now <%= getDate() %></P><P></BODY></P><P></HTML></P><P>上面的例子已经声明了变量和方法:一个Date变量theDate以及一个方法getDate。这两个从现在开始在scriptlets和表达式中都是有效的了,因为它们已经定义了。</P><P>但是不幸的是,上面的这个例子并不能正常工作:不管你怎么重载网页,日期都是相同的。其中的原因是这些声明,它们只在网页被装载的时候才被计算一次。这一点就象我们在Visual C++中创建一个类并定义变量的初始化值。</P><P>本节教程的练习为:修改上面的例子,增加另外一个函数computeDate来重新初始化theDate。并且增加一个scriptlet来每次调用computeDate。</P><P align=center> </P></TD></TR><TR bgColor=#ffffff><TD height=1></TD></TR><TR><TD></TD></TR></TABLE> <TABLE cellSpacing=8 cellPadding=0 width=582 background=10609.files/bg6.gif border=0><TR><TD vAlign=top><TABLE cellSpacing=8 cellPadding=0 width="100%" background=10609.files/point.gif border=0><TR><TD colSpan=3 height=4></TD></TR><TR><TD colSpan=3 height=22><DIV class=title align=center>JSP由浅入深(7)—— JSP Directives</DIV></TD></TR><TR vAlign=bottom><TD colSpan=3 height=18><DIV class=gray align=right> </DIV><DIV class=gray></DIV><DIV align=center><FONT color=#666666>编译:ZSC/太平洋网络学院</FONT></DIV></TD></TR><TR vAlign=bottom><TD colSpan=3 height=0></TD></TR></TABLE><P></P><P>在前面的教程中,我们已经使用了java.util.Date。可以有人就会问:为什么不只使用import java.util.*呢?其实,在JSPs中也可以使用import语句,但是它的语法跟普通的Java是有些差别的。下面给出一个例子:</P><P><%@ page import="java.util.*" %></P><P><HTML></P><P><BODY></P><P><%</P><P>System.out.println( "Evaluating date now" );</P><P>Date date = new Date();</P><P>%></P><P>Hello! The time is now <%= date %></P><P></BODY></P><P></HTML></P><P>上面的代码中第一行我们调用了一个“directive”。这个JSP“directive”是以<%@字符为开头的。这是一个"page directive"。这个"page directive"可以包含所有的引入的项目。假如你为了引入多于一个的项目,你就可以利用逗号(,)来分隔项目,比如 :</P><P><%@ page import="java.util.*,java.text.*" %></P><P>在"page directive"中可以有多个JSP directives。除了"page directive"以外,其它有用的directives有include 和 taglib。在后面的教程中我们再对taglib进行详细的讨论。这里只讨论include directive。</P><P align=center> </P></TD></TR><TR bgColor=#ffffff><TD height=1></TD></TR><TR><TD></TD></TR></TABLE> <TABLE cellSpacing=8 cellPadding=0 width=582 background=10611.files/bg6.gif border=0><TR><TD vAlign=top><TABLE cellSpacing=8 cellPadding=0 width="100%" background=10611.files/point.gif border=0><TR><TD colSpan=3 height=4></TD></TR><TR><TD colSpan=3 height=22><DIV class=title align=center>JSP由浅入深(8)—— JSP Tags</DIV></TD></TR><TR vAlign=bottom><TD colSpan=3 height=18><DIV class=gray align=right> </DIV><DIV class=gray></DIV><DIV align=center><FONT color=#666666>编译:ZSC/太平洋网络学院</FONT></DIV></TD></TR><TR vAlign=bottom><TD colSpan=3 height=0></TD></TR></TABLE><P>JSP另外一个重要的语法是Tags(标记)。JSP Tags不是使用<%,而只是使用<字符。JSP Tag有点象HTML Tag 。JSP tags可以有一个“start tag”、一个“tag body”以及一个“end tag”。开始和结束的标志都可以使用标志的名字,都被圈在<和>字符里面。结束的标志是在字符<后面加一个反斜杆(/)字符。这个标志名字有一个嵌入的冒号(:)字符在里面,其中冒号前面的部分描述了标志的类型。举个例子吧:</P><P><some:tag></P><P>body</P><P></some:tag></P><P>如果标志不需要一个主体,那么开始和结束标志可以合成在一起,比如 :</P><P><some:tag/></P><P>这里我们利用一个/>替代了>字符,这样我们就可以快速地结束标志而不需要一个实体。这条语法跟XML的是一样的。</P><P>标志可以分成两种类型:一种是从外部标志库中转载的,另外一种是预先定义的标志。预先定义的标志是以jsp:字符开始的。举个例子吧,jsp:include是一个预先定义的标志,它用于包括其它的网页。</P><P>在前面的教程我们已经学习了“include directive”。其实它跟jsp:include是很相似的。它们都不是在原始文件中装载被包含的文件的文本,而是在运行的时候调用被包括的标志。下面是一个jsp:include 使用的例子:</P><P><HTML></P><P><BODY></P><P>Going to include hello.jsp...<BR></P><P><jsp:include page="hello.jsp"/></P><P></BODY></P><P></HTML></P><P>现在将上面代码中的“jsp:include”改为“jsp:forward”看看它们有什么区别。其实这两个预先定义的标志是很有用的。</P><P>再给出本节的练习吧,编写一个JSP,使之根据一个布尔型(boolean)变量来对一个包含的文件。这里还是提示一下吧,要用到HTML和scriptlets的混合编程来处理JSP标志。</P><P align=center> </P></TD></TR><TR bgColor=#ffffff><TD height=1></TD></TR><TR><TD></TD></TR></TABLE> <TABLE cellSpacing=8 cellPadding=0 width=582 background=10612.files/bg6.gif border=0><TR><TD vAlign=top><TABLE cellSpacing=8 cellPadding=0 width="100%" background=10612.files/point.gif border=0><TR><TD colSpan=3 height=4></TD></TR><TR><TD colSpan=3 height=22><DIV class=title align=center>JSP由浅入深(9)—— JSP Sessions</DIV></TD></TR><TR vAlign=bottom><TD colSpan=3 height=18><DIV class=gray align=right> </DIV><DIV class=gray></DIV><DIV align=center><FONT color=#666666>编译:ZSC/太平洋网络学院</FONT></DIV></TD></TR><TR vAlign=bottom><TD colSpan=3 height=0></TD></TR></TABLE><P>在经典的网站上,访问者可以浏览几个网页并执行一些交互的行为。如果你在编写这样的网站,利用每一个用户的一些数据是非常有用的。为了这个目的,我们可以使用JSP中的"sessions"。</P><P>Session是一个跟用户相关的对象。当用户访问网站的时候,一些数据就被存放于session中,并在需要的时候从中取出数据。Session为不同的用户保存了不同了数据。</P><P>以下的网页将用户的名字放置于session中,并可以在其它地方来显示它。首先我们要制作一个表单,然后将它命名为GetName.html </P><P><HTML></P><P><BODY></P><P><FORM METHOD=POST ACTION="SaveName.jsp"></P><P>What's your name? <INPUT TYPE=TEXT NAME=username SIZE=20></P><P><P><INPUT TYPE=SUBMIT></P><P></FORM></P><P></BODY></P><P></HTML></P><P>这个表单的目标是“SaveName.jsp”,它在session保存了用户的名字。 </P><P><%</P><P>String name = request.getParameter( "username" );</P><P>session.setAttribute( "theName", name );</P><P>%></P><P><HTML></P><P><BODY></P><P><A HREF="NextPage.jsp">Continue</A></P><P></BODY></P><P></HTML></P><P>SaveName.jsp在session保存了用户了名字,并连接到另外一个网页NextPage.jsp。NextPage.jsp 显示了怎样取出被保存的名字: </P><P><HTML></P><P><BODY></P><P>Hello, <%= session.getAttribute( "theName" ) %></P><P></BODY></P><P></HTML></P><P>如果你打开两种不同的浏览器,或者从两台不同的机器上运行两个浏览器,你可以在一个浏览器中放置一个名字,而在另外一个浏览器中放置另外的名字,但是两个名字都将被跟踪。Session保持跟踪直到超时,这时它就会假设用户没有访问网站了,所以就取消了session。</P><P>最后再布置一下本教程的联系:利用session,在上面的例子中增加一个用户的“age”属性。</P><P align=center> </P></TD></TR><TR bgColor=#ffffff><TD height=1></TD></TR><TR><TD></TD></TR></TABLE> <TABLE cellSpacing=8 cellPadding=0 width=582 background=10614.files/bg6.gif border=0><TR><TD vAlign=top><TABLE cellSpacing=8 cellPadding=0 width="100%" background=10614.files/point.gif border=0><TR><TD colSpan=3 height=4></TD></TR><TR><TD colSpan=3 height=22><DIV class=title align=center>JSP由浅入深(10)—— Beans and Forms处理</DIV></TD></TR><TR vAlign=bottom><TD colSpan=3 height=18><DIV class=gray align=right> </DIV><DIV class=gray></DIV><DIV align=center><FONT color=#666666>编译:ZSC/太平洋网络学院</FONT></DIV></TD></TR><TR vAlign=bottom><TD colSpan=3 height=0></TD></TR></TABLE><P>表单(Forms)是在网站交互的一个很普通的方法。JSP使表单处理更加简单。在JSP中处理表单的标准方法是定义一个“bean”。这个“bean”不是一个完全的Java bean。你只需在定义一个类使它有个区域,这个区域跟表单中的每一个区域相对应。这个类区域必须有“setters”来匹配表单区域的名字。举个例子,让我们修改一下前面教程的GetName.html并且收集Email地址和用户的年龄。具体代码修改如下:</P><P><HTML></P><P><BODY></P><P><FORM METHOD=POST ACTION="SaveName.jsp"></P><P>What's your name? <INPUT TYPE=TEXT NAME=username SIZE=20><BR></P><P>What's your e-mail address? <INPUT TYPE=TEXT NAME=email SIZE=20><BR></P><P>What's your age? <INPUT TYPE=TEXT NAME=age SIZE=4></P><P><P><INPUT TYPE=SUBMIT></P><P></FORM></P><P></BODY></P><P></HTML></P><P>为了收集数据,我们要定义一个Java类,使它有“username”、“email”、“age”的区域,并且我们要提供“setter”方法“setUsername”、“setEmail”和“setAge”。这个“setter”方法只是一个以“set”开始其后是区域名的一种方法。区域名字的第一个字母要用大写的。所以如果区域为“email”,它的“setter”方法就为“setEmail”。同样的,“Getter”方法也类似定义,它只不过是用“get”来代替“set”而已。并且要使得setters和getters必须为公共的(public)。例如:</P><P>public class UserData {</P><P>String username;</P><P>String email;</P><P>int age;</P><P>public void setUsername( String value )</P><P>{</P><P>username = value;</P><P>}</P><P>public void setEmail( String value )</P><P>{</P><P>email = value;</P><P>}</P><P>public void setAge( int value )</P><P>{</P><P>age = value;</P><P>}</P><P>public String getUsername() { return username; }</P><P>public String getEmail() { return email; }</P><P>public int getAge() { return age; }</P><P>}</P><P align=center> </P></TD></TR><TR bgColor=#ffffff><TD height=1></TD></TR><TR><TD></TD></TR></TABLE>
页:
[1]
2