1、S2SH框架基于Annotation整合开发最新S2SH框架基于Annotation的整合开发(原作)作者:陈志国(冰风清源)UUGU TEAM http:/uugu.org 前言因为自己学习的时候,资料过旧,困难重重。所以再足以单独开发后,写出来让后来人学习能够轻松点。S2SH(Struts2+Spring+Hibernate)框架是当今最流行的Java企业级开发框架搭配方案之一。S2SH是SSH的升级版本,2代指的是Struts2,而SSH中用的是Struts1。众所周知,Struts1已经在逐渐退出舞台。而Struts2也就是Webwork的衍化版本,正在如火如荼的盛行着。其实网上这方面
2、资料也不算少,但是都知道现在技术发展的太快,旧的资料已经很难解决我们的当前问题,要问我写的这些有多新?我学习S2SH框架是在2011年8月分暑假期间,这篇文章写于2011年8月15日星期一。我所采用的是当前位置,各大官网发布的最新框架。Struts2.2.3,Spring2.5.6和Hibernate3.6.6Final。首先我们需要准备什么?1 MyEclipse for Spring 8.6或者更新2 Struts2.2.3包或者更新3 Spring2.5.6包或者更新4 Hibernate3.6.6包或者更新其中框架整合用到的jar文件,无论在这三个压缩包或者Google获得的jar文件
3、列表,如图1。图1: S2SH框架整合所需要的jar包前段时间的教程中提到了需要用到这两个包:hibernate-annotations.jar和hibernate-commons-annotations.jar经过我查看测试,我发现在最新的hibernate3.6.6里面已经包含了这两个包的内容,所以不要再添加这两个包了,如果包添加过多,里面有重复的类文件,在开发的过程中会报错或者出现各种诡异的错误,所以对于jar包的整合,宁少勿多!下面我们开始一个新项目的整合开发,打开MyEclipse,我当前刚升级到MyEclipse for Spring 9.1。1.建立Web项目,复制jar包新建一
4、个Web Project,这个我就不截图了。然后将我们整合好的jar文件们复制到WebRoot下面的WEB-INF下面的lib文件夹内,如图2。图2 存放jar包2.创建代码包创建代码包,便于在开发过程中对每一个java文件的管理和分类。其实分类方式根据自己的需要自己定制,但是行业中也有些约定俗成的规矩。例如:存放与Struts的action文件的包,命名com.chzker.action,当然com.chzker是我个人域名倒叙的写法,也是一种规矩,每个人或者企业都不相同的,自己随意就可以。哪怕你写成org.xxx.action,com.xxx.action,com.action或者直接写a
5、ction,包名并不受限制。存放与hibernate相关的DAO文件的包名,命名com.chzker.dao。存放与hibernate数据库实体类的包名,命名 com.chzker.model。存放与业务逻辑层的Java文件包名,命名com.chzker.service。如图3,4所示。图3 新建包图4 建成的源码包3.先嵌入Spring右键选择MyEclipseAdd Spring Capabilities,如图5图5 选择加入Spring因为我们已经在第一步加入了所有的jar包,当然已经包含了Spring,所以在这一步我们什么库都不用选,只需要选择Spring2.5然后下一步。如图6图6
6、不需要选择库这一步默认,启用AOP并选择New选项即可,点击完成(Finish)。如图7图7 完成Spring导入然后再web.xml中注册Spring,要不然的话,前面做的都是白费,因为程序是先读取web.xml去看看有什么组件去调用,如果没有将Spring信息写入到web.xml,那服务器是不会识别Spring的。注册如下:web-app version=3.0 xmlns= xmlns:xsi=http:/www.w3.org/2001/XMLSchema-instance xsi:schemaLocation= contextConfigLocation classpath*:/app
7、licationContext.xml org.springframework.web.context.ContextLoaderListener org.springframework.web.util.IntrospectorCleanupListener index.jsp 以上是注册Spring完成后的的整个web.xml内容。4.再嵌入Hibernate首先,创建DB连接。选择Windows-Open Perspective-Others,在弹出的窗体中选择Myeclipse Database Explorer,然后点击OK。然后再DB Browser右键选择New然后操作如下图7:
8、图7 添加数据库连接点击Finish即可。此时在DB Browser里面就会出现名字为com.mysql.jdbc.Driver的一个数据库连接。点击左上角Myeclipse图标,返回Myeclipse视图。在项目文件夹上右键选择Myeclipse-Add Hibernate Capabilities,如图8:图8 添加Hibernate图9图10图11图12图13点击Finish以后,我们实现配置的applicationContext.xml会自动被编辑,而添加上我们数据库连接新的信息。如下所示: org.hibernate.dialect.MySQLDialect 至此,Spring+Hi
9、bernate就已经整合完成了。下面在进行的是Struts2的整合。5.再整合Struts2同添加Hibernate类似,项目右键Myeclipse-Add Struts Capabilities添加Struts2,如图14图14 整合Struts2在弹出窗体中,选择Struts2.1,然后点击Next。如图15,16所示:图15图16 点击Finish此时无论是applicationContext.xml还是web.xml都已经自动配置完成了。启动服务器即可顺利启动,访问http:/localhost:8080/S2SH/ 返回首页信息,即表示成功框架搭配成功。6.正式开发(Hibernat
10、e实例应用)1生成Hibernate数据表对应类首先生成数据库表的对应实例,切换到数据库视图。双击打开连接的数据库,然后再数据库表上面右键选择 Hibernate Reverse Engineering如图17:图17下面为自动生成数据表对象的关键。如图18图18 注意选项图19接着下一步默认,然后点击Finish完成。此时会自动生成News.java和NewsDAO.java,建议将NewsDAO.java转存到dao包内,以便于分类管理。2建立Struts2 Action类首先建立Action基类 BaseAction.java,以便于以后的action类都集成此类方便管理和其他功能的实现
11、。BaseAction.java:package com.chzker.action;import org.springframework.stereotype.Controller;import com.opensymphony.xwork2.ActionSupport;Controller /Annotation标注public class BaseAction extends ActionSupport IndexAction.java:package com.chzker.action;import java.util.List;import javax.annotation.Reso
12、urce;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Component;import com.chzker.service.newsManager; Component(index)Scope(prototype) public class IndexAction extends BaseAction private List news; private newsManager newsManager; public List getNews() retur
13、n news; public void setNews(List news) this.news = news; public newsManager getNewsManager() return newsManager; Resource public void setNewsManager(newsManager newsManager) this.newsManager = newsManager; public String execute() throws Exception try news = this.newsManager.listAllNews(); return ind
14、ex; catch(Exception e) e.printStackTrace(); return error; Struts.xml配置: error.jsp index.jsp /admin/index.html 3建立Service类正规途径来讲,我们在service类中每一个类都要有其抽象类和它的实现类,以便于以后的再次开发和维护。在此,我们不做赘述从简单入手,直接写service实现类。newsManager.java:package com.chzker.service;import java.util.List;import javax.annotation.Resource;
15、import mons.logging.Log;import mons.logging.LogFactory;import org.springframework.stereotype.Component;import com.chzker.dao.NewsDAO;Component(newsManager) /Annotation注释public class newsManager private NewsDAO newsDao; private Log log = LogFactory.getLog(newsManager.class); /*Getter and Setter*/ pub
16、lic NewsDAO getNewsDao() return newsDao; Resource /利用Spring IOC容器将newsDao利用Annotation注释注入给newsManager public void setNewsDao(NewsDAO newsDao) this.newsDao = newsDao; /* * 获取所有news * */ public List listAllNews() try List news = newsDao.findAll(); return news; catch (Exception e) return null; 此时项目启动起来会出现空指针错误,原因是我们在applicationContext.xml中有以下重要的配置没有添加: org.hibernate.dialect.MySQLDialect com.chzker.model.News index.jsp: base href= My JSP index.jsp starting page !- -
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1