Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1015626
  • 博文数量: 243
  • 博客积分: 3053
  • 博客等级: 中校
  • 技术积分: 2975
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-02 21:11
文章分类

全部博文(243)

文章存档

2013年(2)

2012年(20)

2011年(5)

2010年(114)

2009年(102)

我的朋友

分类:

2009-05-29 17:34:33

用ANT构造Application
Ant简介


Ant是Apache提供给Java开发人员的构建工具,它可以在Windows OS和Unix OS下运行,它不仅开放源码并且还是一个非常好用的工具。我强烈建议在进行JavaBean、EJB等开发时安装,不建议安装make、makefile等建立在shell思想上的构建工具。

下载Ant

官方网址:

下载URL:

安装Ant

设置ANT_HOME系统变量和PATH系统变量

· Windows

假如ant安装目录为c:\ant,按下面方法设置

set ANT_HOME=c:\ant

set JAVA_HOME=c:\jdk1.3

set PATH=%PATH%;%ANT_HOME%\bin

· Unix

假如ant安装目录为/usr/local/ant,按下面方法设置


export ANT_HOME=/usr/local/ant
export JAVA_HOME=/usr/local/jdk1.3
export PATH=${PATH}:${ANT_HOME}/bin


运行Ant

前面说Ant"是一个非常好用的工具",就是因为运行它很简单,只要在命令行输入"ant",ant就运行了。我以构建序列发生器SequenceGenerator进行示例,

在控制台显示的构建信息:查看详细内容

控制台快照,见下图:
 
构建序列发生器的第一屏
 
 
构建序列发生器的第二屏
 
Ant的命令行参数


Ant也可以通过命令行参数 -buildfile 来指定其他目标文件,其中,是你要采用的目标文件名。Ant还有很多命令行可选参数,如下所示:

命令行可选参数摘要:


ant [options] [target [target2 [target3] ...]]
Options:
-help                  print this message
-projecthelp           print project help information
-version               print the version information and exit
-quiet                 be extra quiet
-verbose               be extra verbose
-debug                 print debugging information
-emacs                 produce logging information without adornments
-logfile file          use given file for log output
-logger classname      the class that is to perform logging
-listener classname    add an instance of class as a project listener
-buildfile file        use specified buildfile
-find file             search for buildfile towards the root of the filesystem and
use the first one found
-Dproperty=value       set property to value
 
编写build.xml


Ant的buildfile是用XML写的。每个buildfile含有一个project。

buildfile中每个任务元素可以有一个id属性,可以用这个id值引用指定的任务。这个值必须是唯一的。

下面是Ant中常用的元素和任务:

常用的元素有"project"、"target"、"path"、"property"等。

常用的任务有"ant"、"mkdir"、"delete"、"copy"、"javac"、"jar"、"javadoc"、"echo"等。

(注:它们的详细用法,我不再详述,请参阅下载ant时ant中自带的用户手册。)

我以下面的build_for_ejb_templet.xml为示例,讲解Ant中常用的元素和任务。

约定:

1. 每行代码的前部分为"数字"+".",数字表示在XML文件中的行号

2. "…"表示这里有很多代码,未列出

build_for_ejb_templet.xml任务的分为以下几大部分

i. 开始

ii. 初始化

iii. 定义classpath

iv. 为编译作准备

v. 编译EJB部分

vi. 编译WEB部分

vii. 编译J2EE Application

viii. 部署Application

ix. 创建组件的API

x. 确定build的目标

build_for_ejb_templet.xml的讲解

开始

1.
 
讲解:encoding="UTF-8"表示XML文件采用UTF-8编码格式,如果要使用GBK编码,
需定义为encodeing="GBK"。
3.  
讲解:此部分为文件内容的简介,包括文件名称、创建日期、最后修改日期、创建文件的作者、版权。
componentName 表示 文件名称
yyyy-m-dd 表示 创建日期、最后修改日期的格式,如2002-5-1
developerName 表示 创建文件的作者
CompanyName 表示 公司名称或URL
11.
254.
讲解:此部分定义了一个名称为componentName的项目元素,缺省的任务为"core"任务,
根目录为当前目录。componentName表示组件的名称,这里指EJB的名称。


初始化


17. 
63. 
讲解:此部分用于初始化所有的变量
18.     
讲解:导入项目根目录下build.properties中的全局变量,开发人员也可以在此文件中重新定义全局变量。
19.       
20.       
21.     
value="${jboss.home}/server/${jboss.configuration}/deploy" />  
27.       
41.       
42.       
43.     
讲解:定义和Jboss Application Server有关的变量,包括lib目录、client目录、
deploy目录和J2EE Application部署要用到的一些变量。
22.       
讲解:定义组件的名称
23.       
讲解:定义源代码目录路径
24.       
讲解:定义资源目录路径
25.       
讲解:定义库目录路径
26.      
讲解:定义build目录路径
28.    
讲解:定义源代码的主目录路径
29.      
讲解:定义存放EJB的源代码目录路径
30.    
讲解:定义存放JavaBean的源代码目录路径
31.    
讲解:定义存放Servlet的源代码目录路径
32.      
讲解:定义存放WEB部分文件(包括JSP程序、HTML文件、图片、CSS文件、JS脚本等)的目录路径
33.     
讲解:定义存放组件API的开发文件目录路径
34.       
讲解:定义存放EJB的编译代码目录路径
35.      
讲解:定义存放JavaBean的编译代码目录路径
36.    
讲解:定义WEB目录的类目录路径
37.       
讲解:定义WEB目录的库目录名称
38.       
讲解:定义压缩文档的名称
45.  
讲解:定义项目的组件目录路径
47.
讲解:这段为注释,说明以下是定义当前组件的变量
48.
讲解:定义当前组件的名称
49.
value="${ProjectName.components.home}/componentName"/>
讲解:定义当前组件的目录路径
50.
value="${ProjectName.componentName.home}/lib/ejb"/>
讲解:定义当前组件的EJB编译目录路径
51.
value="${ProjectName.componentName.home}/build/componentName-ejb.jar"/>
讲解:定义当前组件内的EJB包的路径
52.     
value="${ProjectName.componentName.home}/build/componentName-ejb-client.jar"/>
讲解:定义当前组件内的EJB客户端包的路径
54.
讲解:这段为注释,说明以下是定义引入其它组件的变量
55.
value="referencesComponentName"/>
讲解:定义指定组件的名称
56.
value="${ProjectName.components.home}/referencesComponentName"/>
讲解:定义指定组件的目录路径
57.
value="${ProjectName.referencesComponentName.home}/lib/ejb"/>
讲解:定义指定组件的EJB编译目录路径
58.
value="${ProjectName.referencesComponentName.home}
/build/referencesComponentName-ejb.jar"/>
讲解:定义指定组件内的EJB包的路径
59.
value="${ProjectName.referencesComponentName.home}
/build/referencesComponentName-ejb-client.jar"/>
讲解:定义指定组件内的EJB客户端包的路径
61.
value="${jboss.client}/jboss-j2ee.jar:${jboss.client}
/jnp-client.jar:${jboss.client}/jnp-client.jar:${jboss.client}
/jbossmq-client.jar:${jboss.client}/jbosssx-client.jar:${jboss.client}
/concurrent.jar:${jboss.client}/jaas.jar:${jboss.lib}
/jboss-jmx.jar:${jboss.home}/server/${jboss.configuration}
/lib/jbosssx.jar:${jboss.home}/server/${jboss.configuration}
/lib/mail.jar:${servlet-lib.path}:${ejb-classes.dest}:
${web-classes.dest}:${ProjectName.componentName.classbindir}:
${ProjectName.componentName.ejbjar.client}:
${ProjectName.referencesComponentName.classbindir}:
${ProjectName.referencesComponentName.ejbjar.client}" />
讲解:定义classpath,编译bean时要用到。这是定义classpath的一种方法,下面还有另一种方法。


定义classpath


 
 
  
    
       
       
       
       
     
       
       
     
location="${jboss.home}/server/${jboss.configuration}/lib/jbosssx.jar" /> 
     
location="${jboss.home}/server/${jboss.configuration}/lib/mail.jar" /> 
    
讲解:此段定义应用服务器中包文件,如支持ejb的jboss-j2ee.jar、
支持客户端程序的jnp-client.jar、jbossmq-client.jar、jbosssx-client.jar、
支持JavaMail的mail.jar等。
    
     
     
     
     
     
    
讲解:此段定义项目中要用到的包文件。
  
        
        
        
  
讲解:此段定义在编译servlet时的classpath,${ servlet-lib.path }是系统指定的Servlet引擎包。


为编译作准备工作


 
    
    
    
       
       
  
讲解:清除build、lib目录下的所有文件和目录。
    
    
    
    
       
       
       
       
       
       
       
       
       
     
       
    
讲解:创建build中要用到的所有目录,根据需要可以加入自定义的目录如:
      
 
编译EJB部分



 
    
    
    
     
             destdir="${ejb-classes.dest}" 
             includes="com/**" 
             classpathref="base.path" />
    
讲解:此小段用来完成编译ejb和其它help classes。根据需要可以加入一个非常有用的元素:
             encoding="${javac.encoding}"
    
     
            tofile="${lib.dir}/ejb/META-INF/ejb-jar.xml" /> 
     
            tofile="${lib.dir}/ejb/META-INF/jaws.xml" /> 
     
            tofile="${lib.dir}/ejb/META-INF/jboss.xml" /> 
     
            tofile="${lib.dir}/ejb/META-INF/jbosscmp-jdbc.xml" /> 
  
讲解:此小段用来拷贝EJB部署文件,
在JAS中EJB部署文件有jaws.xml、jboss.xml、jbosscmp-jdbc.xml。
    
     
           basedir="${lib.dir}/ejb" /> 
    
讲解:此小段用来把class和部署文件压缩成包文件,这个包文件就是一个EJB组件。
  
     
file="${ProjectName.referencesComponentName.home}/build/
${ProjectName.referencesComponentName.name}-ejb-client.jar" 
 tofile="${build.dir}/${ProjectName.referencesComponentName.name}
 -ejb-client.jar" /> 
     
           basedir="${lib.dir}/ejb"
           excludes="com/ProjectName/componentName/ejb/ComponentNameEJB.class" /> 
  
讲解:此小段用来把class和部署文件压缩成包文件,以支持客户端运行。
 
编译WEB部分



 
    
    
 
    
     
             destdir="${lib.dir}/web/WEB-INF/classes" 
             includes="com/**" 
             classpath="${build.classpath}" /> 
    
讲解:此小段用来完成编译servlet。
  
     
            tofile="${lib.dir}/web/WEB-INF/jboss-web.xml" /> 
     
            tofile="${lib.dir}/web/WEB-INF/web.xml" /> 
  
讲解:此小段用来拷贝WEB部署文件,在JAS中WEB部署文件有jboss-web.xml。
    
     
      
     
     
file="${build.dir}/${ProjectName.referencesComponentName.name}-ejb-client.jar" 
tofile="${lib.dir}/web/WEB-INF/lib/${ProjectName.referencesComponentName.name}
-ejb-client.jar" />   
    
           basedir="${lib.dir}/web" /> 
  
讲解:此小段用来把所有的JSP程序、Html、Css、图片和部署文件等压缩成WAR文件。
 
编译J2EE Application



 
    
    
    
     
            tofile="${lib.dir}/j2ee/META-INF/application.xml" /> 
    
讲解:此小段用来拷贝Application的部署文件。
    
     
            tofile="${lib.dir}/j2ee/${name}-ejb.jar" /> 
     
            tofile="${lib.dir}/j2ee/${name}-web.war" /> 
     
           basedir="${lib.dir}/j2ee" /> 
    
讲解:此小段用来把EJB组件、支持客户端运行的包和部署文件压缩成EAR文件,它就是一个J2EE
Application。这里要说明,在进行build时,根据需要可以不生成EAR文件。
 
部署Application



  
  
    
       
          
          
       
    
讲解:此小段用来部署Application,在JAS3.0中${jboss.deploy}是JAS的热部署目录。
 
创建组件的API



  
  
  
   
             destdir="${javadoc.dir}" 
             classpath="${build.classpath}"
             encoding="${javadoc.encoding}"
             author="${javadoc.author}" version="${javadoc.version}"
use="${javadoc.usage}" 
             windowtitle="${project.name} ${name} Component API"
             doctitle="${project.name} ${name} Component" 
             bottom="Copyright ${sign.copyright} ${project.date}
${company.signature}. All Rights Reserved."> 
         
     
     
       
     
   
  


讲解:此小段用来创建组件的API。这里强烈要求类设计人员和编码人员按照Javadoc定义的标签对源代码进行注释。
确定build的目标



      +---------------------------------------+
      +    Building ${name} Component         +
      +---------------------------------------+
  
  
      +---------------------------------------+
      +    Finished ${name} Component         +
      +---------------------------------------+
  
  
  
   ejbclientjar,war,ear,deploy-server" />
  
  
  
  


讲解:此小段用来确定build的目标。缺省目录为core,所以在build不加参数时,系统将只生成jar文件和war文件。如果build时加上参数,系统将根据需要来生成文件,例如:在命令行输入ant deploy,系统将生成jar文件、war文件、ear文件,同时将ear文件进行部署。
开发Java项目的Build规范


在项目的根目录下定义文件build.properties,文件中定义了项目的共用变量,提供给所有开发人员使用。

在开发一个Java项目时,所有的项目build.properties必须以下面的build.properties为模板。

build.properties

·开发JavaBean的build.xml规范

在开发JavaBean时,所有的JavaBean必须以下面的build.xml为模板。

JavaBean build.xml模板

·开发EJB的build.xml规范

在开发EJB时,所有的EJB必须以下面的build.xml为模板。

开发EJB的build.xml模板

· 开发Components的build.xml规范

在开发Components时,所有的Components必须以下面的build.xml为模板。

Components的build.xml模板

· 开发Application的build.xml规范

a) 在Application的根目录下定义文件build.properties,文件中定义了Application的共用变量,提供给所有开发人员使用。

在开发一个Application时,Application下的build.properties必须以下面的build.properties为模板。

Application下的build.properties模板

b)在开发Application时,所有的Application必须以下面的build.xml为模板。

Application下的build.xml模板
在JBoss中布署EJB

在JBoss中,EJB部署文件除了ejb-jar.xml,还有jboss.xml、jaws.xml、jbosscmp-jdbc.xml。下面将一一介绍它们的编写。

1.ejb-jar.xml

ejb-jar.xml如何编写?这里只对以下几点进行重点讲解:

·cmp-version元素

指出当前EJB参照的规范版本,如1.x、2.x,建议使用EJB2.0规范写EJB。

·abstract-schema-name元素

指出在EJB QL查询中和实体Bean对应的数据表名,示例:


在ABookEJB组件的ejb-jar.xml中
        ABook
               
               
                      findByCode 
                       
              java.lang.String 
               
               
       select object(a) from ABook a where a.code = ?1  
               
             


源代码:立即下载

jboss.xml

jboss.xml是用来定义EJB的JNDI名字的部署文件。在JAS3.0中

·缺省的JNDI名字为ejb-jar.xml中在ejb-name元素定义的名字。示例:

在SequenceGeneratorEJB的ejb-jar.xml中,SequenceGeneratorEJB的缺省JNDI名字为"com.cwap.oa.sequencegenerator.ejb.SequenceGeneratorEJB"。下面给出在ejb-jar.xml中的部分代码:


 
 SequenceGeneratorEJB 
 com.cwap.oa.sequencegenerator.ejb.SequenceGeneratorEJB 
 com.cwap.oa.sequencegenerator.ejb.SequenceGeneratorHome 
 com.cwap.oa.sequencegenerator.ejb.SequenceGenerator 
com.cwap.oa.sequencegenerator.ejb.SequenceGeneratorEJB 


我们直接将只包括ejb-jar.xml的SequenceGenerator部署在JBoss中,看下图SequenceGenerator已部署成功了。
 
图 SequenceGenerator成功部署在JBoss中


通过JBoss的8082端口,我们可以看到缺省的JNDI名字:
 
图 SequenceGeneratorEJB的缺省JNDI名字


· 自定义JNDI名字

通过jboss.xml可以重新定义缺省的JNDI名字。示例:在SequenceGeneratorEJB的jboss.xml中,SequenceGeneratorEJB的自定义JNDI名字为"ejb/SequenceGeneratorEJB"。下面给出在jboss.xml中的部分代码:


 
    
       
        com.cwap.oa.sequencegenerator.ejb.SequenceGeneratorEJB
         
         ejb/SequenceGenerator 
       
    


源代码:立即下载

通过JBoss的8082端口,我们可以查看自定义的JNDI名字:
 
图 SequenceGeneratorEJB的自定义JNDI名字


jaws.xml

jaws.xml用来设定EJB实体属性与数据库字段对应信息(CMP中使用)和定义finder方法等。

· JAWS是JBoss管理CMP型实体EJB的O/R映射管理器。在JAS3.0中JAWS是在standardjaws.xml中进行配置,standardjaws.xml文件被放在conf/config-name目录下。缺省的config-name为default。

· standardjaws.xml配置整个jboss中的JAWS,你可以在每个应用程序中通过jaws.xml扩展这个配置。

· standardjaws.xml / jaws.xml可以帮助你来做以下几件事情:

i. 指定数据源及其映射类型

ii. 设置一串关于jaws方法的选项

iii. 指定JAWS如何创建和使用数据表

iv. 定义finder方法存取实体EJB

v. 定义各种数据库的映射类型

· 下面以SequenceGeneratorEJB的jaws.xml为示例,具体讲解:


 
   DefaultDS
讲解:指定数据源DefaultDS 
    
       
 com.cwap.oa.sequencegenerator.ejb.SequenceGeneratorEJB 
讲解:指定EJB为SequenceGeneratorEJB
    
name 
讲解:实体EJB的属性名称
name 
讲解:映射到数据库中字段的名字
VARCHAR 
讲解:实体EJB的属性的JDBC类型
VARCHAR(255) BINARY 
讲解:映射到数据库中字段的类型
        
          
            count 
            count 
BIGINT
BIGINT
         
         sequencegenerator 
讲解:实体EJB映射到数据库中的数据表名
         true 
讲解:部署EJB时,是否创建数据表,为true,表示部署EJB时创建数据表。
在JAS3.0中,如果创建数据表时数据表已经存在,系统将不会执行创建命令,同时给出信息"Table
'sequencegenerator' already exists"
     false 
讲解:JBoss卸载EJB时,是否删除数据表,为true,表示卸载EJB时删除数据表。
          
讲解:在JBoss装载EJB时,是否对数据表进行封锁,为true,表示装载EJB时封锁对数据表的任何存取操作。
       
    


源代码:立即下载

jbosscmp-jdbc.xml

· standardjbosscmp-jdbc.xml是JAS3.0提供的JBossCMP-JDBC配置文件,提供类似standardjaws.xml的配置。standardjbosscmp-jdbc.xml 文件被放在conf/config-name目录下。

· standardjbosscmp-jdbc.xml配置整个jboss中的JBossCMP-JDBC,你可以在每个应用程序中通过jbosscmp-jdbc.xml扩展这个配置。

· standardjbosscmp-jdbc.xml / jbosscmp-jdbc.xml用来完成以下设置:

i. 设置一些关于实体Bean和关联的缺省值

ii. 指定查寻数据源的JNDI名字及其映射类型

iii. 设置实体EJB的配置

iv. 配置实体EJB之间的关联

v. 设置已知的依赖类

vi. 定义各种数据库的映射类型

· 下面以SequenceGeneratorEJB的jbosscmp-jdbc.xml为示例,具体讲解:


    
       
        com.cwap.oa.sequencegenerator.ejb.SequenceGeneratorEJB
          true 
         false
         sequencegenerator_test 
          
            name 
            name
                
            VARCHAR 
            VARCHAR(255) BINARY 
          
          
            count 
            count 
                        
            BIGINT 
            BIGINT 
          
       
    
 
 


源代码:立即下载

掌握了以上三个文件的编写之后,将EJB部署在JAS中将是非常容易的事。
使用MVC模型

Model-View-Controller (MVC) 开发模式可以分离数据访问和数据表现,让开发人员可以开发一个可伸缩性的强、便于扩展的控制器,来维护整个流程。MVC模式可以被映射到多层企业级的J2EE应用上。整个模式的结构图如下:
 
MVC模型结构图
 
什么是MVC模式(Model-View-Controller)?


模式(Model)这是数据与业务逻辑元件,封装的是数据源和所有基于对这些数据的操作。

视图(View)这是表示元件,也称为用户接口元件,封装的是对数据源Model的一种显示,一个模式可以用于多个视图。

控制器(Controller)这是响应用户输入的元件,封装的是外界作用于模型的操作。控制器将用户接口转化为模式的变化,并定义用户接口对这些事件的响应方法。用户接口可包括处理多种协议的操作,如HTTP、WAP等。
MVC模式的解决方案有哪些?


使用Struts,Struts是Jakarta项目的一部分,可访问以下官方网址来获取信息:。它是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework,重点在JSP和Servlet。

使用Cocoon,Cocoon 是一个开放源码项目,它是作为 Apache XML 工作的一部分开发的。Cocoon 是一种 Java 服务器框架,它允许使用 XSLT转换动态发布 XML 内容。通过依靠 XML 描述内容,使用 XSLT 将内容转换成多种格式,Cocoon 提供了用于构建内容、逻辑和表示在很大程度上彼此分离的应用程序的平台。

本项目基于MVC设计,但没有采用Struts和Cocoon技术实现MVC,而是自行开发了一套基于Servlet技术的MVC规范(取名叫NoTag-Struts),思想取自Struts技术。

· 没有采用Struts技术实现MVC的主要原因是在Struts技术中大量使用了JSP标签,使得美工和网页设计人员在制作项目Demo后,必须把Demo中的HTML标签转成JSP标签。这样做其实没有什么问题,但是如果遇到要修改Demo时,麻烦就大了,页面在美工或网页设计人员的可视化网页工具中将显示的是一大堆代码,美工将无法编辑。

· NoTag-Struts技术定义了Form、Action和Contoller等类,但没有定义JSP标签,JSP中依然采用大量的HTML标签。
JSP及JSP页面的翻页

在以列表的形式显示数据时需要对页面进行翻页控制,基本在项目的各模块中都会用到。为了最大限度地实现翻页的可重用和易移植,利用组件的形式对翻页逻辑进行封装。

翻页控制器的分析

描述:

翻页控制器用来实现对WEB页面的翻页内容的显示和翻页的各种操作的控制。通过JSP调用,将分页内容显示到WEB页面。它支持多种方式和风格的显示。

翻页控制器的设计

下面分别创建翻页控制器的一个PageConfig类、一个Page类、一个PageView类。

· PageConfig.java

PageConfig
声明
public class
描述
这个类用来保存页面属性的值,如每页显示几行等。
超类
 
执行
 


属性描述
属性
属性描述
定义
[PageConfig]
 
 
|--PAGE_SIZE
页大小
public static final int
|--PAGE_SIZE_SMALL
小型页面的大小
public static final int
|--PAGE_SIZE_NORMAL
正常页面的大小
public static final int
|--PAGE_SIZE_BIG
大型页面的大小
public static final int
|--PAGE_SIZE_BIGGER
较大页面的大小
public static final int
|--PAGE_SIZE_BIGGEST
最大页面的大小
public static final int


· Page.java

Page
声明
public class
描述
这个类用来保存页面属性的值,如每页显示几行等。
超类
 
执行
java.lang.Serializable


属性描述
属性
名称
属性描述
数据类型
|--EMPTY_PAGE
空白页面
描述一个空白页面,即不含内容的页面。
Page对象
|--objects
结果集列表
结果集列表
java.util.List或java.util.Vector
|--start
开始记录号
开始记录号,从0开始
正整数和0
|--end
结束记录号
结束记录号
正整数和0
|--viewStart
显示在页面开始记录号
显示在页面开始记录号,从1开始
正整数
|--viewEnd
显示在页面结束记录号
显示在页面结束记录号
正整数
|--hasPrevious
是否有上一页的开关
是否有上一页的开关
布尔值
|--previousPageNumber
上一页的页码
上一页的页码
正整数和0
|--hasNext
是否有下一页的开关
是否有下一页的开关
布尔值
|--nextPageNumber
下一页的页码
下一页的页码
正整数和0
|--total
总行数
一共有多少行记录
正整数和0
|--totalPage
总页数
一共有多少页
 
|--currentPageNumber
当前页
描述当前是第几页
正整数和0
|--pageSize
页大小
描述每页有多少行
正整数和0


构造器
构造器
构造器描述
参数
[Page]
 
 
|--Page(List l, int s, boolean hasNext)
创建页面
l 结果集s 开始记录号,从0开始hasNext 是否有下一页的开关
|--Page(List l, int s, boolean hasNext, int total)
创建页面
l 结果集s 开始记录号,从0开始hasNext 是否有下一页的开关total 一共有多少行记录
|--Page(List l, int s, int size, boolean hasNext, int total)
创建页面
l 结果集s 开始记录号,从0开始size 每页有多少行hasNext 是否有下一页的开关total 一共有多少行记录
|-- Page(List l, int num, int size, int total)
创建页面
l 结果集num 当前是第几页size 每页有多少行total 一共有多少行记录
|-- Page(List l)
创建页面,不进行分页
l 结果集


方法
方法
方法描述
返回值
[Page]
 
 
|--autoCalculate ()
自动计算,根据当前页、页大小、总行数计算出其它属性的值
private void
|--getList()
获得结果集
public List
|--getViewStart()
获得显示在页面的开始记录号,从1开始
public int
|--getViewEnd()
获得显示在页面的结束记录号
public int
|--hasNextPage()
是否有下一页
public boolean
|--hasPreviousPage ()
是否有上一页
public boolean
|--getPreviousPageNumber ()
获得上一页的页码
public int
|--getNextPageNumber ()
获得下一页的页码
public int
|--getTotal ()
获得结果集中记录总行数
public int
|--getTotalPage ()
获得总页数
public int
|--getCurrentPageNumber ()
获得当前页码
public int
|--getPageSize ()
获得每页多少行记录
public int
|--getStartOfNextPage ()
获得下一页在结果集中开始的记录号,从0开始
public int
|--getStartOfPreviousPage ()
获得上一页在结果集中开始的记录号,从0开始
public int
|--getSize()
获得当前页包括的记录行数
public int
|--isEmpty()
判断当前页面是否是空白页面,如果当前页面是空白页面,返回true,否则,返回false
public boolean


PageView.java

PageView
声明
public class
描述
通过JSP调用,将分页内容显示到WEB页面。不支持图片、按钮等,只支持文字。用法:在JSP页面按如下形式定义:<% PageView view = new PageView(request,out,page); %>按缺省形式显示<% view.setVisible(true); %>按指定形式显示<% view.setVisible(true,0,1); %>
超类
 
执行
 


属性描述
属性
名称
属性描述
数据类型
[PageView]
 
 
 
|--currentUrl
当前页面的URL
当前页面的URL
字符串
|--style
风格
风格
字符串
|--useSquareBrackets
是否加[]的开关
在"上一页"两边是否加上"["和"]"
布尔值
|--page
WEB页面
WEB页面
Page对象


构造器
构造器
构造器描述
参数
[PageView]
 
 
|-- PageView (HttpServletRequest request,JspWriter out,Page page))
创建一个分页内容
request 客户端请求out 页面输出对象page WEB页面


方法
方法
方法描述
返回值
[PageView]
 
 
|--setVisible(boolean visible)
按缺省形式显示分页内容,如果visible为true,则显示分页内容,否则,不显示分页内容
public void
|--setVisible(boolean visible,int style,int order)
按指定形式显示分页内容,如果visible为true,则显示分页内容,否则,不显示分页内容
public void
|--setVisible(boolean visible,boolean useSquareBrackets,int style,int order)
按指定形式显示分页内容,如果visible为true,则显示分页内容,否则,不显示分页内容
public void
|--viewPage(boolean useSquareBrackets,int style,int order)
按指定形式显示分页内容,order为0,表示完整形式,按如下顺序显示:共计:18 分页:2 当前页:1 每页:10 首页 前页 后页 尾页 转到□□□□order为1,表示简洁形式,按如下顺序显示:前页 后页 尾页 1/2order为2,表示完整形式2,按如下顺序显示:共计:18 每页:10 转到□□□□ 首页 前页 后页 尾页 1/2
public void


翻页控制器的编码

只需按翻页控制器的设计进行编码,这里不用再讲了。

翻页控制器组件的源代码

a)PageConfig.java

b)Page.java

c)PageView.java

源代码:立即下载

翻页控制器的调用

翻页控制器的调用实在太简单了,调用方法:

· 导入翻页控制器包


<%@ page import="java.util.List,com.cwap.oa.controller.web.page.Page,
com.cwap.oa.controller.web.page.PageView"%>


· 创建一个Page对象,Page.EMPTY_PAGE为空白页面


Page page = Page.EMPTY_PAGE;


· 创建一个PageView对象


<% PageView view = new PageView(request,out,page); %>


· 显示分页的内容:

按缺省形式显示


<% view.setVisible(true); %>


按指定形式显示


<% view.setVisible(true,0,1); %>


· 调用翻页控制器的例子

下面是在论坛板块中的一个JSP中调用的示例,用来显示所有的论坛板块列表,下面只列出部分代码:


<%@ page language="java"%>
<%@ page contentType="text/html; charset=GBK"%>
<%@ page import="java.util.List,
com.cwap.oa.controller.web.page.PageView,com.cwap.oa.controller.web.page.Page"%>
class="com.club8090.forum.forumboard.client.ForumBoardClientHelper"/>
<%
String tmp=request.getParameter("pageNumber");
int pageNumber = 0;
if(tmp==null || tmp.equals("")){
        pageNumber = 1;
}else{
        try {
         pageNumber = Integer.parseInt(tmp);
        }catch(java.lang.NullPointerException npe){
         pageNumber = 1;
        }catch(java.lang.NumberFormatException nfe){
         pageNumber = 1;
        }
}
Page page = Page.EMPTY_PAGE;//page初始化为Page.EMPTY_PAGE空白页面
page = forumBoardHelper.getAllForumBoards(pageNumber);
%>
       
              
              
              
<%
List items = page.getList();
if( items.isEmpty() ) {
        out.println("
没有记录存在");
}else{
 int no;//页面中显示的行数
 for (int i = 0; i < items.size(); i++) {
    ForumBoardModel forumBoardModel = (ForumBoardModel)items.get(i);
     no = page.getViewStart() + i;
%>
//显示记录列表
       
              
              
              
<%
 }
 PageView view = new PageView(request,out,page);
 view.setVisible(true,0,1);
}
%>
NO. 名称 描述摘要
<%= no %> <%= forumBoardModel.getName() %> <%= forumBoardModel.getSummary() %>
 
附件:
A.开发机器配置
1.硬件列表:
操作系统:Miscosoft Windows 2000 Professional
内存:132M
硬盘:20G(C盘10G、D盘10G)
操作系统目录:d:\winnt
2.系统变量
SET ANT_HOME=c:\j2ee\jakarta-ant-1.4.1
SET CATALINA_HOME=C:\jboss-3.0.0_tomcat-4.0.3\catalina
SET J2EE_HOME=c:\j2ee\j2eesdk
SET JAVA_HOME=c:\j2ee\jdk1.3
SET JDBC_CLASSPATH=c:\J2EE\jdbc\mm.mysql-2.0.13\mm.mysql-2.0.13-bin.jar;c:\J2EE\jdbc\oracle8\classes12.jar
SET CLASSPATH=%J2EE_HOME%\lib\j2ee.jar;%J2EE_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib;%JDBC_CLASSPATH%;%ANT_HOME%\lib\ant.jar;%ANT_HOME%\lib\crimson.jar;%ANT_HOME%\lib\jaxp.jar
SET PATH=C:\oracle\ora81\bin;D:\Program Files\Oracle\jre\1.1.7\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%JAVA_HOME%\bin;%ANT_HOME%\bin;
3.软件列表
J2SE:1.3 , 目录:C:\J2EE\JDK1.3
J2EE:1.3 , 目录:C:\J2EE\j2eesdk
Ant:1.4.1 , 目录:C:\J2EE\jakarta-ant-1.4.1
JDBC:mm.mysql-2.0.13-bin.jar、oracle-classes12.jar, 目录:C:\J2EE\jdbc
应用服务器:JAS3.0 ,目录:C:\ jboss-3.0.0_tomcat-4.0.3
编辑器:Editplus v2.10c
B.应用服务器配置
1.硬件列表:
操作系统:RedHat Linux 7.3
内存:2G
硬盘:20G
2.系统变量
ANT_HOME=/home/ant
export ANT_HOME
CATALINA_HOME=/home/tomcat4
export CATALINA_HOME
CLASSPATH=/home/j2ee/lib/j2ee.jar:/home/j2ee/lib/tools.jar:/home/jdk1.3/jre/lib:/home/jdk1.3/lib/mail.jar:/home/jdk1.3/lib/activation.jar:/home/ant/ant.jar:/home/ant/lib/crimson.jar:/home/ant/lib/jaxp.jar:.
export CLASSPATH
JAVA_HOME=/home/jdk1.3
export JAVA_HOME
J2EE_HOME=/home/j2ee
export J2EE_HOME
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/bin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/home/wudi/bin:/home/jdk1.3:/home/jdk1.3/bin:/home/jdk1.3/jre/bin:/home/jdk1.3/jre/lib/sparc
export PATH
3.软件列表
J2SE:1.3 , 目录:/home/jdk1.3
J2EE:1.3 , 目录:/home/j2ee
Ant:1.4.1 , 目录:/home/ant
JDBC:mm.mysql-2.0.13-bin.jar、oracle-classes12.jar, 目录:/home/jdbc
应用服务器:JAS3.0 ,目录:/home/jboss
Web服务器:Tomcat4.0 ,目录:/home/tomcat4
C.数据库服务器配置
1.     硬件列表:
操作系统:RedHat Linux 7.3
内存:1G
硬盘:40G
2.系统变量
CATALINA_HOME=/home/tomcat4
export CATALINA_HOME
CLASSPATH=/home/jdk1.3/lib/:/home/jdk1.3/lib/tools.jar:/home/jdk1.3/jre/lib:/home/jdk1.3/lib/mail.jar:/home/jdk1.3/lib/activation.jar:.
export CLASSPATH
JAVA_HOME=/home/jdk1.3
export JAVA_HOME
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/bin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/home/wudi/bin:/home/jdk1.3:/home/jdk1.3/bin:/home/jdk1.3/jre/bin:/home/jdk1.3/jre/lib/sparc
export PATH
3.     软件列表
J2SE:1.3 , 目录:/home/jdk1.3
数据库:Mysql3.23.31 ,目录:/usr/local/mysql
                Oracle8i ,目录:/home/local/oracle
数据库工具:phpadmin ,目录:/home/webroot/html/phpadmin
Web服务器:Apache HTTP Server ,目录:/usr/local/apache
阅读(1681) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~