最详细的ssh框架整合讲解.docx
《最详细的ssh框架整合讲解.docx》由会员分享,可在线阅读,更多相关《最详细的ssh框架整合讲解.docx(34页珍藏版)》请在冰豆网上搜索。
最详细的ssh框架整合讲解
基于Myeclipse6.5的SSH框架整合
Mx25184
2012-08-14
1、文章目的
最近整合SSH框架,期间遇到很多问题,中途几次熬夜查找,精神几度崩溃,心想如此好的框架为啥搭建整合的时候确实如此费劲,在网上找了很多解决方案,均不能解决问题。
为了以后让想学SSH的人少走点弯路,故此次将整个完整搭建步骤写出来,供大家分享,希望对大家有所帮助。
2、运行环境
1、jdk-6u1-windows-i586-p
2、MyEclipse_6.5.0GA_E3.3.2_Installer_A
3、apache-tomcat-6.0.13.exe
4、mysql-essential-5.1.53-win32
5、数据库脚本程序
createdatabaseSSH;
createtableuser(
idint(11)notnullauto_increment,
usernamevarchar(50)defaultnull,
passwordvarchar(50)defaultnull,
primarykey(id)
);
insertintouservalues('1','admin','admin');
具体环境搭建根本上就是下载安装,继续流程就不在详细说明了,一般网上都可以查到。
3、创建项目工程
再打开的Myeclipse中,新建Webproject,项目名字我们起名Myssh,J2EESqecificationLevel选择JavaEE5.0,然后点击Finish即可。
4、添加Struts1.2框架支持
接下来我们将添加Struts框架支持,在项目Myssh上面右键,选择Myeclipse>>AddStrutsCapabilities…
在弹出的AddStrutsCapabilities对话框中修改Basepackagefornewclasses中的路径为com.Myss.struts,其他不变,点击finish即可
完成添加后的项目路径结构为:
5、添加spring2.5框架支持
和添加struts框架一样,在项目Myssh上面右键,选择Myeclipse>>AddSpringCapabilities…
在弹出的AddSpringCapabilities对话框中选择Springversion:
Spring2.5
由于Spring采用的最小化发布方式,使得Spring的库文件是别离的,所以我们要选择自己需要添加的库:
选择好点击next,然后修改folder路径为:
WebRoot/WEB-INF点击finish即可
此时项目结构为:
6、配置数据源
在Myeclipse右上角打开MyeclipseDatabaseExplorer数据库管理视图。
在左侧的DBBrowser中右击New打开新建对话框
在DatabaseDriver中,配置容如下:
选择DriverTemplate为MySQL,然后根据事情情况写URL,这里我们是本机操作,所以写为localhost下的ssh,Username和password根据数据库实际填写。
然后添加数据库驱动程序AddJARs,为了方便我这里选择了保存密码Savepassword。
然后点击finish即可。
7、Spring和hibernate的整合
配置完数据源就可以添加hibernate支持了,切换视图到Myeclipsejavaenterprise下,在Myssh工程上右击,选择Myeclipse>>AddHibernateCapabilities..
这一步我们选择默认即可点击Next
对话框中选择Springconfigurationfile,表示我们希望将Hibernate托管给Spring进展管理,然后点击Next;
在出现的对话框中询问我们是否新建一个Spring配置文件,我们选择:
ExistingSpringconfigurationfile。
因为我们已经添加了Spring的配置文件了,所以我们选择已存在的配置文件即可,Myeclipse自动回查找,然后输入MysessionFactory,点击Next
在对话框中输入Beanid数据源在Spring中的BeanID的名字:
datasource。
然后选择DBDriver里面我们之前配置的Myssh后,Myeclipse会自动完成其他的填写。
点击Next
在对话框中取消创新新的hibernatesessionfactory,点击Finish即可。
Myeclipse自动默认打开Spring配置文件:
applicationContext.xml
此时项目结构:
切换到MyeclipseDatabaseExplorer视图,双击打开数据库连接,找到表user,然后右击表格,选择HibernateReversEngineering..
在对话框中修改Javasrcfolder路径为我们建立的/Myssh/src,然后填写javapackage名称:
.Myssh.user
选择CreatePOJO,选择javaDataObject,选择JavaDataAccessObject点击Next
在出现的对话框中选择IdGenerator为native,然后点击Finish
此时项目结构为下列图所示,其中User.java是myeclipse生成的使用面向对象的java语言对数据库表格进展的抽象,User.hbm.xml是将数据库表格中的字段和POJO类的属性进展映射的定义,UserDAO.java封装了一些Myeclipse自动生成的对数据库的操作。
这是我们修改一下文件目录,新建一个dao包,将DAO类与POJO类分开,然后我们在Struts包下面建立action和form包。
为了将实现与接口进展解耦,我们在dao包下面添加接口,然后创建dao.impl包,将实际的DAO类放在这里,DAO类是直接与数据库打交道的类。
为了对业务逻辑进展封装,我们将业务逻辑全部写在Service类里面,和dao一样,我们建立service包,里面添加业务接口,具体实现放在service.impl里面。
将UserDAO.java移动到dao的Impl包下面,并在dao包下面建立接口IUserDAO:
package.Myssh.dao;
importjava.util.List;
importjavax.xml.registry.infomodel.User;
publicinterfaceIUserDAO{
publicUserfindById(Integerid);
publicListfindByUsername(Objectusername);
publicvoidsave(Useruser);
}
UserDAO是自动生成的,我们可以简单的修改一下。
让UserDAO实现接口IuserDAO,不然在启动Spring的时候会报错。
publicclassUserDAOextendsHibernateDaoSupportimplementsIUserDAO{
privatestaticfinalLoglog=LogFactory.getLog(UserDAO.class);
//propertyconstants
publicstaticfinalStringUSERNAME="username";
publicstaticfinalStringPASSWORD="password";
protectedvoidinitDao(){
//donothing
}
publicvoidsave(Useruser){
log.debug("savingUserinstance");
try{
getHibernateTemplate().save(user);
log.debug("savesuccessful");
}catch(RuntimeExceptionre){
log.error("savefailed",re);
throwre;
}
}
publicvoiddelete(UserpersistentInstance){
log.debug("deletingUserinstance");
try{
getHibernateTemplate().delete(persistentInstance);
log.debug("deletesuccessful");
}catch(RuntimeExceptionre){
log.error("deletefailed",re);
throwre;
}
}
publicUserfindById(java.lang.Integerid){
log.debug("gettingUserinstancewithid:
"+id);
try{
Userinstance=(User)getHibernateTemplate().get(
".Myssh.user.User",id);
returninstance;
}catch(RuntimeExceptionre){
log.error("getfailed",re);
throwre;
}
}
publicListfindByExample(Userinstance){
log.debug("findingUserinstancebyexample");
try{
Listresults=getHibernateTemplate().findByExample(instance);
log.debug("findbyexamplesuccessful,resultsize:
"
+results.size());
returnresults;
}catch(RuntimeExceptionre){
log.error("findbyexamplefailed",re);
throwre;
}
}
publicListfindByProperty(StringpropertyName,Objectvalue){
log.debug("findingUserinstancewithproperty:
"+propertyName
+",value:
"+value);
try{
StringqueryString="fromUserasmodelwheremodel."
+propertyName+"=?
";
returngetHibernateTemplate().find(queryString,value);
}catch(RuntimeExceptionre){
log.error("findbypropertynamefailed",re);
throwre;
}
}
publicListfindByUsername(Objectusername){
returnfindByProperty(USERNAME,username);
}
publicListfindByPassword(Objectpassword){
returnfindByProperty(PASSWORD,password);
}
publicListfindAll(){
log.debug("findingallUserinstances");
try{
StringqueryString="fromUser";
returngetHibernateTemplate().find(queryString);
}catch(RuntimeExceptionre){
log.error("findallfailed",re);
throwre;
}
}
publicUsermerge(UserdetachedInstance){
log.debug("mergingUserinstance");
try{
Userresult=(User)getHibernateTemplate().merge(detachedInstance);
log.debug("mergesuccessful");
returnresult;
}catch(RuntimeExceptionre){
log.error("mergefailed",re);
throwre;
}
}
publicvoidattachDirty(Userinstance){
log.debug("attachingdirtyUserinstance");
try{
getHibernateTemplate().saveOrUpdate(instance);
log.debug("attachsuccessful");
}catch(RuntimeExceptionre){
log.error("attachfailed",re);
throwre;
}
}
publicvoidattachClean(Userinstance){
log.debug("attachingcleanUserinstance");
try{
getHibernateTemplate().lock(instance,LockMode.NONE);
log.debug("attachsuccessful");
}catch(RuntimeExceptionre){
log.error("attachfailed",re);
throwre;
}
}
publicstaticUserDAOgetFromApplicationContext(ApplicationContextctx){
return(UserDAO)ctx.getBean("UserDAO");
}
}
在service中建立接口IuserService.java,在service的Impl中建立UserService.java
package.Myssh.service;
importjavax.xml.registry.infomodel.User;
publicinterfaceIUserService{
publicUsergetuserById(Integerid);
publicUsergetUserByUsername(Stringusername);
publicvoidaddUser(Useruser);
}
UserService.java
package.Myssh.service.impl;
importjava.util.List;
import.Myssh.dao.IUserDAO;
import.Myssh.dao.impl.UserDAO;
import.Myssh.service.IUserService;
import.Myssh.user.User;
publicclassUserServiceimplementsIUserService{
privateIUserDAOuserDAO;
publicvoidaddUser(Useruser){
//TODOAuto-generatedmethodstub
userDAO.save(user);
}
publicUsergetUserByUsername(Stringusername){
//TODOAuto-generatedmethodstub
Listlist=userDAO.findByUsername(username);
if(list.size()==0){
returnnull;
}else{
return(User)list.get(0);
}
}
publicUsergetuserById(Integerid){
//TODOAuto-generatedmethodstub
returnuserDAO.findById(id);
}
publicIUserDAOgetUserDAO(){
returnuserDAO;
}
publicvoidsetUserDAO(IUserDAOuserDAO){
this.userDAO=userDAO;
}
}
此时的工程目录结构为:
这时,Spring配置文件applicationContext.xml容会自动添加如下信息:
然后参加bean的初始化配置。
8、整合Spring和Struts
为了能够让Spring托管Struts的类,在网上找了一个方式,只需让Struts从Spring获得需要的类就可以了,为了达到这个目标,我们创建一个类BaseAction
package.Myssh.struts.action;
importorg.springframework.web.context.WebApplicationContext;
importorg.springframework.web.context.support.WebApplicationContextUtils;
importorg.springframework.web.struts.ActionSupport;
publicclassBesaActionextendsActionSupport{
protectedObjectgetBean(Stringid){
WebApplicationContextctxApplicationContext=WebApplicationContextUtils
.getWebApplicationContext(this.servlet.getServletContext());
returnctxApplicationContext.getBean(id);
}
}
然后让容器初始化Spring,我们修改WEB.xml文件。
添加如下代码:
9、实例测试
至此配置已经差不多了,我们可以测试一下效果。
首先创建一个基于Struts的jsp页面,打开WEB-INF下面的struts-config.xml,单击右键,选择New>>Form,Actionandjsp.
在弹出的对话框中添加Usercase,然后点击Add生成Properties代码。
这会由Myeclipse自动生成相应的Form代码,输入完成后选择JSP选项卡,选上CreateJSPform,修改路径点击Next。
然后我们点击Struts-config.xml左下角的Source进入XML编辑页面,添加转发选项。
然后我们去index.jsp一个目录下新建两个jsp页面,一个是succ.jsp,一个是fail.jsp。
他们的容分别是简单的一句话登录成功和登录失败。
到这里我们就去修改LoginAction类容如下:
Login.jsp容如下:
Succ.jsp这个添加登录失败汉字是需要修改字符集:
GB2312
剩下的那个succ.jsp界面我就不截图了,和上面这个一样。
只是容为:
登录成功
到此为止,我们的配置极其逻辑代码都已经写完了,项目文件结构如下列图:
启动tomcat查看。
10、考前须知
1、由于Myeclipse中的Spring和hibernate框架带有的jar可能重复引用,所以理论上我们建立SSH框架是就应该删除重复jar包,我直接的从Myeclipse下面:
D:
\Users\administrator\AppData\Roaming\MyEclipse6.5\myeclipse\eclipse\plugins\.genuitec.eclipse.springframework_6.5.0.zmyeclipse650200806\data\2.0\lib\asm\下面的asm-2.2.3.jar删除了。
相应的文件删除根据自己安装目录的路径为主。
2、别忘记UserDAO去实现IUserDAO接口。
否那么一经启动不起来。