Recruitment项目搭建与开发指南_V2_.docx

上传人:小飞机 文档编号:1701654 上传时间:2022-12-15 格式:DOCX 页数:19 大小:564.41KB
返回 下载 相关 举报
Recruitment项目搭建与开发指南_V2_.docx_第1页
第1页 / 共19页
Recruitment项目搭建与开发指南_V2_.docx_第2页
第2页 / 共19页
Recruitment项目搭建与开发指南_V2_.docx_第3页
第3页 / 共19页
Recruitment项目搭建与开发指南_V2_.docx_第4页
第4页 / 共19页
Recruitment项目搭建与开发指南_V2_.docx_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《Recruitment项目搭建与开发指南_V2_.docx》由会员分享,可在线阅读,更多相关《Recruitment项目搭建与开发指南_V2_.docx(19页珍藏版)》请在三一办公上搜索。

1、Recruitment项目搭建与开发指南Document Revision HistoryVer. No.Ver. DatePrepared ByAffected Section & Summary of Change1.02011-07-08EricLiu(tao.liu3)Draft of new document structure & content.2.02011-08-30Eric/Amy/RitaRevise/add 4th chapter contentNote: Template revision history is available below as hidden te

2、xt. Template Revision HistoryhVer. No.Ver. DatePrepared ByReviewed ByApproved ByAffected Section & Summary of Change Table of Contents1总述41.1介绍41.2结构41.3参考文档41.4软件包42搭建开发环境52.1Recruitment项目52.2Windows环境下工具安装52.2.1开发工具52.2.2数据库工具52.2.3部署工具63开发调试63.1.1导入Eclipse项目63.1.2Tomcat调试设置73.1.3项目部署74初探SpringSid

3、e Framework74.1Architect Convention74.2CRUD74.3API doc84.4核心类图84.5数据库分页开发124.6Struts convention插件实践134.7单元测试实践174.8Checkstyle查检代码184.9Sonar平台使用191 总述 这个Project完全基于开源软体springside3.3.4()的环境搭建。开发涉及到的技术有Spring 3 + Hibernate 3 + Struts 2.1 + JSP 2.0 + JQuery + JAX-WS2 (by Apache CXF) + JAX-RS(by Jersey)+

4、 SpringSecurity 3.0。“SpringSide是以Spring Framework为核心,用主流的技术选型、Pragmatic的编程实践来开发JavaEE企业级应用的总结与演示。”摘自springside首页。Recruitment系统是一个Maven2风格的Project。1.1 介绍本文档为Recruitment(暂定)系统开发人员搭建开发环境与开发参考所用。1.2 结构本文档章节结构如下。2th chapter 开发环境搭建3th chapter开发调试4th chapter Framework介绍1.3 参考文档SpringSide官方网站:在Eclipse中调试Mav

5、en项目:Mave2简介: SpringSide3技术参考手册:使用SpringSide3 开发Web项目的全过程:1.4 软件包第三方软件地址Eclipse3.5+(junit4.0)无Eclipse svn plugin无Ant1.8.1$recuritmenttoolsantapache-ant-1.8.1Maven3.0.3$recuritmenttoolsmavenapache-maven-3.0.3Mysqljdbc:mysql:/ 16.173.244.228/interview_system?useUnicode=true&characterEncoding=utf-8项目Re

6、cruitment SVNsvn:/16.173.244.228/svndata/interview_system/03.CodeSonar(代码质量管理平台)http:/16.173.244.228:9000单元测试报告http:/16.173.244.228:8080/recruitment/report/html/index.htmlRedmine(项目管理工具*论坛*)http:/16.173.244.228:3000/projects/recruitmentNexus(管理maven仓库的server)http:/16.173.244.228:8080/nexusPsp/tsp无Re

7、curitment系统(Our project)http:/16.173.244.228:8080/recruitment2 搭建开发环境2.1 Recruitment项目项目的SVN地址:svn:/16.173.244.228/svndata/interview_system/03.CodeRun recruitment_start.bat脚本:脚本会通过maven从nexus server 上http:/16.173.244.228:8080/nexus/content/groups/public下载第三方依赖到本机,目录在C:Users用户名.m22.2 Windows环境下工具安装2.

8、2.1 开发工具 JDK1.6(设置JAVA_HOME) Eclipse3.5及以上版本,需要安装SVN插件。 Recruitment项目tools目录自带了Ant以及Maven(2.2/3.0)o Ant(设置Path)一些bat档利用Ant做些Task:初始化数据库、项目部署tomcat7.0o Maven(设置Path)利用此工具做library管理、项目生命周期管理。2.2.2 数据库工具 开发环境及正式环境均选用mysql数据库。jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql:/localhost/interview_syst

9、em?useUnicode=true&characterEncoding=utf-8jdbc.username=rootjdbc.password=roothibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect Mysql脚本位置:2.2.3 部署工具 recuritment开发环境选用的部署工具是tomcat7或tomcat6。3 开发调试3.1.1 导入Eclipse项目 从SVN server checkout 代码到eclipse 的workspace: 1) 设置classpath variables 为了保证recru

10、itment项目编译成功,需要设置classpath variables:Set M2_REPO Classpath var,它的值是Maven默认仓库目录(vista系统 C:Users用户名.m2repository)。2) Mysql驱动设置将C:Userstaliu.m2repositorymysqlmysql-connector-java5.1.15 mysql-connector-java-5.1.15放到tomcat的lib目录下。3.1.2 Tomcat调试设置 请参考http:/m2eclipse.sonatype.org/3.1.3 项目部署正式环境部署:请参照build.

11、xml与linux.deploy.readme.txt 文件。4 初探SpringSide Framework4.1 Architect Convention请参考4.2 CRUD请参考4.3 API doc 官网未提供,可以参考源码。1) 在springside-3.3.4modulescoresrc 下2) maven仓库有打包好的如下图 springside3-core-3.3.4-sources.jar 透过javadoc.exe生成了SpringSide3.3.4_API_DOC.zip 文档,可以参考。4.4 核心类图1.public class SimpleHibernateDa

12、oextends java.lang.Object封装Hibernate原生API的DAO泛型基类. 可在Service层直接使用, 也可以扩展泛型DAO子类使用, 见两个构造函数的注释. 参考Spring2.5自带的Petlinc例子, 取消了HibernateTemplate, 直接使用Hibernate原生API. Author: calvin Constructor SummarySimpleHibernateDao() 用于Dao层子类使用的构造函数.SimpleHibernateDao(org.hibernate.SessionFactorysessionFactory, java

13、.lang.ClassentityClass) 用于用于省略Dao层, 在Service层直接使用通用SimpleHibernateDao的构造函数.Method SummaryintbatchExecute(java.lang.Stringhql, java.util.Mapvalues) 执行HQL进行批量修改/删除操作.intbatchExecute(java.lang.Stringhql, java.lang.Object.values) 执行HQL进行批量修改/删除操作.org.hibernate.CriteriacreateCriteria(org.hibernate.criter

14、ion.Criterion.criterions) 根据Criterion条件创建Criteria.org.hibernate.QuerycreateQuery(java.lang.StringqueryString, java.util.Mapvalues) 根据查询HQL与参数列表创建Query对象.org.hibernate.QuerycreateQuery(java.lang.StringqueryString, java.lang.Object.values) 根据查询HQL与参数列表创建Query对象.voiddelete(PKid) 按id删除对象.voiddelete(Tent

15、ity) 删除对象.org.hibernate.Criteriadistinct(org.hibernate.Criteriacriteria) 为Criteria添加distinct transformer.org.hibernate.Querydistinct(org.hibernate.Queryquery) 为Query添加distinct transformer.java.util.Listfind(org.hibernate.criterion.Criterion.criterions) 按Criteria查询对象列表. java.util.Listfind(java.lang.S

16、tringhql, java.util.Mapvalues) 按HQL查询对象列表. java.util.Listfind(java.lang.Stringhql, java.lang.Object.values) 按HQL查询对象列表.java.util.ListfindBy(java.lang.StringpropertyName, java.lang.Objectvalue) 按属性查找对象列表, 匹配方式为相等.TfindUnique(org.hibernate.criterion.Criterion.criterions) 按Criteria查询唯一对象. XfindUnique(j

17、ava.lang.Stringhql, java.util.Mapvalues) 按HQL查询唯一对象. XfindUnique(java.lang.Stringhql, java.lang.Object.values) 按HQL查询唯一对象.TfindUniqueBy(java.lang.StringpropertyName, java.lang.Objectvalue) 按属性查找唯一对象, 匹配方式为相等.voidflush() Flush当前Session.java.util.Listget(java.util.Collectionids) 按id列表获取对象列表.Tget(PKid)

18、 按id获取对象.java.util.ListgetAll() 获取全部对象.java.util.ListgetAll(java.lang.StringorderByProperty, booleanisAsc) 获取全部对象, 支持按属性行序.java.lang.StringgetIdName() 取得对象的主键名.org.hibernate.SessiongetSession() 取得当前Session.org.hibernate.SessionFactorygetSessionFactory() 取得sessionFactory.voidinitProxyObject(java.lang

19、.Objectproxy) 初始化对象.booleanisPropertyUnique(java.lang.StringpropertyName, java.lang.ObjectnewValue, java.lang.ObjectoldValue) 判断对象的属性值在数据库内是否唯一.voidsave(Tentity) 保存新增或修改的对象.voidsetSessionFactory(org.hibernate.SessionFactorysessionFactory) 采用Autowired按类型注入SessionFactory, 当有多个SesionFactory的时候在子类重载本函数.

20、2.public class HibernateDaoextends SimpleHibernateDao封装SpringSide扩展功能的Hibernat DAO泛型基类. 扩展功能包括分页查询,按属性过滤条件列表查询. 可在Service层直接使用,也可以扩展泛型DAO子类使用,见两个构造函数的注释. Author: calvin Constructor SummaryHibernateDao() 用于Dao层子类的构造函数.HibernateDao(org.hibernate.SessionFactorysessionFactory, java.lang.ClassentityClass

21、) 用于省略Dao层, Service层直接使用通用HibernateDao的构造函数.Method Summaryjava.util.Listfind(java.util.Listfilters) 按属性过滤条件列表查找对象列表.java.util.ListfindBy(java.lang.StringpropertyName, java.lang.Objectvalue, PropertyFilter.MatchTypematchType) 按属性查找对象列表,支持多种匹配方式.PagefindPage(Pagepage, org.hibernate.criterion.Criterion

22、.criterions) 按Criteria分页查询.PagefindPage(Pagepage, java.util.Listfilters) 按属性过滤条件列表分页查找对象.PagefindPage(Pagepage, java.lang.Stringhql, java.util.Mapvalues) 按HQL分页查询.PagefindPage(Pagepage, java.lang.Stringhql, java.lang.Object.values) 按HQL分页查询.PagegetAll(Pagepage) 分页获取全部对象.4.5 数据库分页开发举例:cvList的分页1) 创建公

23、共的Page类,文件位置如下:2) 创建公共有js文件,文件位置如下:3) 点击CV List,访问是src/main/java里com.hp.interview.web.action.CvAction.java,代码如下:page=new Page();page.setCapacity(10);/每页要显示的条数是10条page.setPageNo(1); /访问的是第1页page = candidateService.getAllCv(page);4) 最终访问的是src/main/java里com.hp.interview.web.dao.CandidateDao.java.代码如下:p

24、ublic Page getAllCv(Page page)throws ExceptionList list=null;Query query=null;query =getSession().createSQLQuery(ALLCV_STRING).addEntity(Candidate.class);page.setTotalRows(query.list().size();int firstResult=page.getOffset(); /从第几条开始访问int maxResults=page.getCapacity();/访问多少条list=query.setFirstResult

25、(firstResult).setMaxResults(maxResults).list();page.setValue(list);/返回的集合做为page对象返回return page;5) 首次返回页面interview/cv.jsp,页面的代码如下:/*showPageStrNum(总页数,当前是第几页,可以显示的数字数量,请求地址,请求参数)*/showPageStrNum($page.totalPages, 1, 5, ajax/cv.action,);6) 当点击分页后,访问src/main/java里com.hp.interview.ajax.web.action.CvActi

26、on.java,代码如下:public String list() throws Exception page=new Page();page.setCapacity(10);page.setPageNo(pageNo);page = candidateService.getAllCv(page);if(page.getValue().size()=0)pageNo=pageNo-1;if(pageNo=0) pageNo=1;page.setPageNo(pageNo);page = candidateService.getAllCv(page);return SUCCESS;7) 返回到的

27、页面是ajax/cv.jsp,页面代码如下:showPageStrNum($page.totalPages, $page.pageNo, 5, ajax/cv.action,);4.6 Struts convention插件实践举例:convention-plugin的约定:1. 默认所有的结果页面都存储在web-inf/content下,你可以通过设置struts.convention.result.path这个属性的值来改变到其他路径。如: 则将路径配置到了web-inf/page 下。 默认包路径包含action,actions,struts,struts2的所有包都会被struts作为

28、含有action类的路径来搜索。你可以通过设置struts.convention.package.locators属性来修改这个配置。如: 则定义了在项目中,包路径包含web和action的将被视为action存在的路径来进行搜索。com.ustb.web.*/com.ustb.action.*都将被视为含有action的包路径而被搜索。 接着,convention从前一步找到的package以及其子package中寻找 com.opensymphony.xwork2.action 的实现以及以action结尾的类:.example.actions.products.display(imple

29、mentscom.opensymphony.xwork2.action)3.pany.details.showcompanydetailsaction 命名空间。从定义的.package.locators标示开始到包结束的部分,就是命名空间。举个例子:com.ustb.web.user.useraction的命名空间是:”/user”。com.ustb.web.user.detail.useraction的命名空间是:”/user/detail”convention通过如下规则确定url的具体资源部分:去掉类名的action部分。然后将将每个分部的首字母转为小写,用-分割,你可以设置strut

30、s.convention.action.name.separator 如:还是举个例子:useraction-user userdetailaction -user-detail。结合上面的。对于com.ustb.web.user.detail.userdetailaction,映射的 url就是/web-inf/content/user/detail/user-detail.jspstruts支持.jsp .html .htm .vm格式的文件。下面是action和结果模版的映射关系:url result file that could match result type /hellosuc

31、cess/web-inf/content/hello.jspdispatcher/hellosuccess/web-inf/content/hello-success.htm dispatcher/hellosuccess/web-inf/content/hello.ftl freemarker/hello-worldinput/web-inf/content/hello-world-input.vmvelocity/test1/test2/helloerror/web-inf/content/test/test2/hello-error.htmldispatcher以上的内容来自struts

32、2的文档http:/struts.apache.org/2.1.6/docs/convention-plugin.html 当然,简单的通过默认的方式来进行配置不能完全满足实际项目的需要。所幸,convention的零配置是非常灵活的。通过action注释 对如下例子:1.packagecom.example.web;3.importcom.opensymphony.xwork2.action;4.importcom.opensymphony.xwork2.actionsupport;6.publicclasshelloactionextendsactionsupport7.action(ac

33、tion1)8.publicstringmethod1()9.returnsuccess;10.12.action(/user/action2)13.publicstringmethod2()14.returnsuccess;15.16.通过action注释后 方法名 action注释后调用路径 action注释 后映射路径 method1 /action1!method1.action. /web-inf/content/action1.jsp method1 /user/action2!method2.action /web-inf/content/user/action2.jsp 通过a

34、ctions注释 1.packagecom.example.web;3.importcom.opensymphony.xwork2.actionsupport;4.importorg.apache.struts2.convention.annotation.action;5.importorg.apache.struts2.convention.annotation.actions;7.publicclasshelloactionextendsactionsupport8.actions(9.action(/different/url),10.action(/another/url)11.)1

35、2.publicstringmethod1()13.return“error”;14. 我们可以通过:/different/url!method1.action 或 /another/url!method1.action 来调用method1 方法。对应的映射路径分别是/web-inf/content/different/url-error.jsp; /web-inf/content/another/url-error.jsp 可能误导了大家,一个方法被action注释后,只是多了一种调用方式,而不是说覆盖了原来的调用方式。比如对于如下例子:packagecom.example.web;3.i

36、mportcom.opensymphony.xwork2.actionsupport;4.importorg.apache.struts2.convention.annotation.action;5.importorg.apache.struts2.convention.annotation.actions;7.publicclasshelloactionextendsactionsupport8.action(/another/url)9.publicstringmethod1()10.return“error”;11. 1.我们调用method1方法可以通过两种方式:/hello!met

37、hod1.action 映射 url:/web-inf/content/hello-error.jsp /another/url!method1.action 映射 url:/web-inf/content/another/url-error.jsp 可见,两种方式均可对method1方法进行调用,唯一的区别就是,两种调用的映射是不一样的,所以,想跳转到不同的界面,这是一个非常好的选择。通过namespace 注释1.packagecom.example.web;3.importcom.opensymphony.xwork2.actionsupport;4.importorg.apache.struts2.convention.annotation.action;5.importorg.apache.struts2.convention.annotation.actions;6.namespace(/other)7.publicclasshelloworldextendsactionsupport9.publicstringmethod1()10.return“error”;11.12.action(url)13.publicstringmethod2()14.return“error”;15.16.17.action(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号