快速开发手册.docx
《快速开发手册.docx》由会员分享,可在线阅读,更多相关《快速开发手册.docx(26页珍藏版)》请在冰豆网上搜索。
快速开发手册
appfuse快速开发手册
1、开发环境搭建
1.安装JDK5+
1)在官网(相关地址将在备注列出)找到jdk5或以上版本的下载链接,将其下载到本地。
本手册使用的jdk版本为jdk1.5.0_21。
2)将下载的jdk安装到C:
\ProgramFiles\Java目录下(默认安装)。
3)进入我的电脑->属性->高级->环境变量
新建系统变量:
变量名(JAVA_HOME),变量值(C:
\ProgramFiles\Java\jdk1.5.0_21)
4)在系统环境变量Path中添加:
%JAVA_HOME%\bin;
5)新建系统变量:
变量名(CLASSPATH),变量值(.;%JAVA_HOME%\lib;)
2.安装MySQL5.x
1)在官网找到MySQL5.x相关版本下载链接,将其下载到本地。
本手册使用的安装包为mysql-5.0.18-win32.zip。
2)双击安装。
3.安装maven
1)下载maven,最新版本为2.2.1,本手册使用的版本为2.0.9
2)将下载的压缩包解压到E盘,并将文件夹命名为maven-2.0.9(不是必须的,便于说明)。
3)新建系统变量:
变量名(MAVEN_HOME)
变量值(E:
\maven-2.0.9)
4)在系统变量Path中添加:
%MAVEN_HOME%\bin;
5)在系统变量CLASSPATH中添加:
%MAVEN_HOME%\lib;
4.安装校验
4.1jdk校验
在dos窗口下输入命令java-version如果出现类似下面的截图则说明安装配置成功
4.2MySQL校验
进入MySQL控制台,或者直接输入命令mysql-uroot-p按操作提示输入密码进入。
若此命令无效,则是因为环境变量没有添加上去,把mysql的bin目录添加到path中去。
4.3maven校验
在dos窗口下输入命令mvn--version看maven是否配置成功。
2、快速建立项目
本手册以建立Archetype为Struts2Basic的librarySystem项目为例,简单描述appfuse快速建立项目过程以及一些注意事项。
1.mvn命令简介
mvn为maven的缩写,通过mvn命令,可以快速构建项目。
下面对常用mvn命令进行介绍。
Ømvnarchetype:
create:
创建Maven项目
Ømvnappfuse:
gen-model根据数据库的表生成java类
Ømvnappfuse:
gen-Dentity=XXX建立所有的配置文档
Ømvnappfuse:
full-source把运行所需要的org.appfuse中的依赖类转换成你的包名称
Ømvneclipse:
eclipse生成eclipse的项目的配置文件,用户可以直接把项目导入到eclipse中
Ømvnjetty:
run-war打包并且发布你的应用程序到Jetty
Ømvnappfuse:
install把生成的源代码及配置文件写入到src中
Ømvnappfuse:
remove删除appfuse:
gen.生成的代码
Ømvnclean:
清除目标目录中的生成结果
Ømvnpackage:
项目打包
Ø...
2.mvn命令建立项目
在F盘建立目录myproject,在dos下进入该目录,输入以下指令:
mvnarchetype:
create-DarchetypeGroupId=org.appfuse.archetypes-DarchetypeArtifactId=appfuse-basic-struts-DremoteRepositories=http:
//static.appfuse.org/releases-DarchetypeVersion=2.0.2-DgroupId=com.librarysystem-DartifactId=librarysystem
当出现buildsuccessful表明创建成功
在dos下进入生成的librarysystem目录,运行以下命令:
mvnappfuse:
full-source
指令运行成功效果如下图:
修改默认数据库MySQL配置
org.dbunit.dataset.datatype.DefaultDataTypeFactory
CLEAN_INSERT
org.hibernate.dialect.MySQL5InnoDBDialect
mysql
mysql-connector-java
5.0.5
com.mysql.jdbc.Driver
[CDATA[jdbc:
mysql:
//localhost/librarysystem?
createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8]]>
root
wan
输入下面指令,启动内置服务器jetty
mvnjetty:
run
正常启动,dos控制台显示如下:
打开浏览器,输入地址:
http:
//localhost:
8080,效果如下:
3.项目导入eclipse以及用tomcat启动配置
在dos控制台输入下面指令,可以将生成的项目导入到eclipse中,如果IDE为idea,则使用命令mvnidea:
idea
mvneclipse:
eclipse
生成成功,显示效果如下:
Buildsuccessful后,就可以正式将该项目导入到eclipse中了,此时,在eclipse中用mvnjetty:
run-war指令运行一次,如果不出意外项目可以在jetty服务器上正常启动。
但使用tomcat服务器启动会出现问题。
需要进行下面几个地方的修改:
Ø拷贝target/librarysystem-1.0-SNAPSHOT/WEB-INF下的lib目录,将其放到src/main/webapp/WEB-INF/
Ø将target/librarysystem-1.0-SNAPSHOT/WEB-INF/classes下的所有资源文件拷贝并覆盖到src/main/resources下
Ø在项目属性中,javabuildpath----->Source去掉webapp目录。
如果有必要,更改其他源文件发布的默认输出文件夹。
如下面更改了默认的src/test/java输出目录
把User.java与Role.java中的
@Id@GeneratedValue(strategy=GenerationType.AUTO)
publicLonggetId(){
returnid;
}
变为:
@Id@GeneratedValue(strategy=IDENTITY)
publicLonggetId(){
returnid;
}
因为:
mqsql的ID是自增的,
JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.
TABLE:
使用一个特定的数据库表格来保存主键。
SEQUENCE:
根据底层数据库的序列来生成主键,条件是数据库支持序列。
IDENTITY:
主键由数据库自动生成(主要是自动增长型)
AUTO:
主键由程序控制。
否则的话无法插入信息。
Ø用命令或直接清空target文件夹,重新发布到tomcat,运行,不出意外,就可以见到下面的效果了:
注意:
如果不将target/librarysystem-1.0-SNAPSHOT/WEB-INF/classes资源文件覆盖到src/main/resources下,而只是更改resources下的jdbc配置,项目可以运行,但可能出现乱码。
即使删除其他国际化配置,重新发布,有时任不能解决问题。
在实际操作中还经常遇到下面的异常:
严重:
Exceptionsendingcontextinitializedeventtolistenerinstanceofclassorg.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanDefinitionStoreException:
Invalidbeandefinitionwithname'dataSource'definedinclasspathresource[applicationContext-resources.xml]:
Circularplaceholderreference'jdbc.driverClassName'inpropertydefinitions
造成此异常原因尚不清楚,一般可以通过下面方法解决此问题:
在项目中运行mvnpackage命令,将生成war包下的jdbc配置文件覆盖src/main/resources下的jdbc配置文件,重新启动tomcat可以即可。
4.appfuse目录结构简介
src:
源代码目录,需要修改的嗲吗一般都位于src下。
src/main/java:
java源代码目录,包括POJO,action等。
src/main/resources:
资源目录,各种资源文件配置。
src/main/webapp:
web应用源代码目录。
src/test:
测试源代码目录。
target:
目标文件目录。
target/classes:
源代码编译输出目录。
target/test-classes:
自动测试编译输出目录。
5.模块curd实现
以添加图书信息模块为例,介绍appfuse如何创建模块及实现curd的
在mysql的librarysystem数据库中新增表book_info,代码如下:
DROPTABLEIFEXISTS`book_info`;
CREATETABLE`book_info`(
`Id`int(11)NOTNULLauto_increment,
`book_no`int(10)NOTNULLdefault'0'COMMENT'书本编号',
`book_name`varchar(50)defaultNULLCOMMENT'图书名称',
`book_price`float(5,1)defaultNULLCOMMENT'图书价格',
`book_isbn`varchar(20)defaultNULLCOMMENT'图书的isbn编码',
`author`varchar(50)defaultNULLCOMMENT'作者',
`publish`varchar(50)defaultNULLCOMMENT'出版社',
`publish_time`datedefaultNULLCOMMENT'出版日期',
`status`smallint(4)default'0'COMMENT'书籍状态(2:
借出,1:
丢失,0:
在库)',
`in_date`datedefaultNULLCOMMENT'入库时间',
`remark`varchar(500)defaultNULLCOMMENT'备注',
PRIMARYKEY(`Id`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8COMMENT='图书信息表';
建表成功后,在\src\test\resources\”下添加一个“hibernate.reveng.xml”文件内容如下:
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEhibernate-reverse-engineering
SYSTEM">
--jdbc-typeisnamefomjava.sql.Types-->
--length,scaleandprecisioncanbeusedtospecifythemappingprecisly-->
--thetype-mappingsareordered.Thismappingwillbeconsultedlast,
thusoverridenbythepreviousoneifprecision=1forthecolumn-->
--ExcludeAppFusetablesfromallcatalogs/schemas-->
注意:
表名为小写,与数据库一致。
Exclud为true时,就是说过虑这张表,为false时,就是说对这张表建立model。
运行命令mvnappfuse:
gen-model
[INFO]Copyinggenerated'BookInfo.java'toproject...
[INFO]------------------------------------------------------------------------
[INFO]BUILDSUCCESSFUL
[INFO]------------------------------------------------------------------------
[INFO]Totaltime:
10seconds
[INFO]Finishedat:
MonDec0622:
00:
29CST2010
[INFO]FinalMemory:
18M/42M
成功后,生成BookInfo.java中会有错误,把
@Id@GeneratedValue(strategy=IDENTITY)@GeneratedValue(strategy=GenerationType.AUTO)
publicLonggetId(){
returnthis.id;
}
改为:
@Id@GeneratedValue(strategy=IDENTITY)
publicLonggetId(){
returnthis.id;
}
生成model成功后,运行以下命令,生成对应的配置文件及对应的jsp页面
mvnappfuse:
gen-Dentity=BookInfo
指令运行成功后,在浏览器中便可以见到初始效果。
国际化:
修改ApplicationResources.properties配置文件,替换BookInfo相关对应中文含义
bookInfo.id=Id
bookInfo.author=作者
bookInfo.bookIsbn=Isbn
bookInfo.bookName=图书名
bookInfo.bookNo=图书编号
bookInfo.bookPrice=价格
bookInfo.inDate=入馆日期
bookInfo.publish=出版社
bookInfo.publishTime=出版时间
bookInfo.remark=备注
bookInfo.status=图书状态
bookInfo.added=图书信息添加成功
bookInfo.updated=图书信息更新成功
bookInfo.deleted=图书信息删除成功
..............
改完后,重新启动项目,显示效果如下
校验:
针对form表单的校验,可以在页面通过javaScript验证,也可以通过struts提供的验证框架实现。
现在要实现在添加图书信息时,要求图书名称为必填,使用struts框架校验,只需在BookInfoAction-validation.xml配置文件中加入以下语句。
输入图书信息后点保存,如果图书名称没录,便会有错误提示。
关于struts对其他字段如浮点型等可以查看官方参考文档。
3、插件配置
appfuse默认集成了很多标签库、插件等。
这些标签库的引入,大大提高了web项目的用户体验。
在taglibs.jsp页面中,可以看到他们是如何被引进项目的。
taglibs.jsp内容如下:
<%@pagelanguage="java"errorPage="/error.jsp"pageEncoding="UTF-8"contentType="text/html;charset=utf-8"%>
<%@tagliburi="http:
//www.springframework.org/security/tags"prefix="security"%>
<%@tagliburi=""prefix="display"%>
<%@tagliburi="http:
//struts-prefix="menu"%>
<%@tagliburi="prefix="c"%>
<%@tagliburi="prefix="fmt"%>
<%@tagliburi="prefix="fn"%>
<%@tagliburi="prefix="sql"%>
<%@tagliburi="prefix="cache"%>
<%@tagliburi="prefix="decorator"%>
<%@tagliburi="prefix="page"%>
<%@tagliburi="/struts-tags"prefix="s"%>
<%@tagliburi="http:
//www.appfuse.org/tags/struts"prefix="appfuse"%>
如果我们想在项目中使用其他一些框架,比如说extJS、dwr、jamon等等,我们需要在项目中配置他们。
1.ExtJS
ExtJs简介:
ExtJS可以用来开发RIA也即富客户端的AJAX应用,是一个用javascript写的,主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架。
因此,可以把ExtJS用在.Net、Java、Php等各种开发语言开发的应用中。
从官方下载ExtJS压缩包,目前最高版本为3.2.1,将下载的压缩包解压到项目的src/main/webapp/scripts。
在default.jsp文件中,加入下面代码段:
这样项目中每个jsp页面都可以使用ExtJS控件了。
在新增加的bookInfoForm.jsp增加下面代码段:
Form.focusFirstElement($("bookInfoForm"));
Ext.onReady(function(){
varbookInfo_publishTime_DateField=newExt.form.DateField({
id