您的当前位置:首页正文

Struts2+Spring+Hibernate整合环境搭建 myeclipse 8.6

来源:华佗健康网
基于Struts2+Spring3.0+Hibernate3.3的整合实验

(MyEclipse8.6版)实验步骤

准备数据库和DBdriver(同前面的实验)1)在SQLServer200x中创建数据库test和表users。CREATEDATABASEtest;USEtest;GOCREATETABLE[dbo].[users]([id][int]IDENTITY(1,1)primary

key,[username][varchar](20)NOTNULL,[password][varchar](20)NULL)go2)在MyEclipseDatabaseExplorerPerspective窗口下创建一个新的连接驱动(Createanewconnectiondriver)DN。图0项目工程结构总览图1一.创建工程,增加Struts2、Spring2.x和Hibernate3.2功能1.新建web工程SSHD

2.填加Struts功能(直接选struts2.1)

图1

这里要注意:在选URLPattern时要选择第三个,不要选“*.action”。

2图2

图3

3.填加Spring功能(勾选2个库Spring3.0CoreLibraries和Spring3.0WebLibraryis),注意选择将检测到的库内容拷贝到项目文件夹。

3图4填加Spring功能示意图

选择新建Springbeanconfigurationfile,文件名为applicationContext.xml4.添加Hibernate功能

(1)默选的两个包+SpringJDBC(其他会自动勾选)

图5

4图6

(2)选择Hibernate工具使用的配置文件类型为springconfiguration。

图7选择Hibernate工具使用的配置文件

(2)SpringDataConnectiondetail中的BeanId为dataSource。

5(3)在创建Hibernate会话工厂时,选择不要创建sessionFactory类。

图8不要创建会话工厂

二.创建ORM、交互值对象、DAO1.在com.domain中存放Hibernate产生的映射文件和持久类。

6图9

图10

7图11

2.在com.bean包中,编写值对象的类User.java

packagecom.bean;publicclassUser{privateStringname;privateStringpassword;publicUser(){}publicUser(Stringname,Stringpassword){this.name=name;this.password=password;}publicStringgetName(){}returnname;publicvoidsetName(Stringname){}this.name=name;publicStringgetPassword(){}returnpassword;publicvoidsetPassword(Stringpassword){this.password=password;8}}3.在com.dao包中,创建DAO接口,如图12.

图12UserDAOpackagecom.dao;importimportjava.util.List;com.domain.Users;public/**interfaceUserDAO{**根据id查找用户Users*/@paramid需要查找的用户id/**get(Integerid);**增加用户void*/@paramuser需要增加的用户save(Usersuser);/****修改用户*/@paramuser需要修改的用户voidupdate(Usersuser);/****删除用户void*/@paramid需要删除的用户iddelete(Integerid);/****删除用户void*/@paramuser需要删除的用户delete(Usersuser);/***查询全部用户9ListfindAll();/***@return获得全部用户*/*根据用户名,密码查找用户*@paramusername查询所需的用户名*@parampass查询所需的密码*@return对应的用户*/}UsersfindUserByNameAndPass(Stringusername,Stringpassword);4.在com.dao.impl中创建DAO实现类。如图13.

图13userDAO实现类自动产生的代码如下://因为它实现UserDAOpackagecom.dao.impl;importjava.util.List;importcom.dao.UserDAO;importcom.domain.Users;publicclassUserDAOImplimplementsUserDAO{publicvoiddelete(Integerid){//TODOAuto-generatedmethodstub}publicvoiddelete(Usersuser){//TODOAuto-generatedmethodstub}publicListfindAll(){//TODOAuto-generatedmethodstubreturnnull;}publicUsersfindUserByNameAndPass(Stringusername,Stringpassword){10//TODOAuto-generatedmethodstubreturnnull;}publicUsersget(Integerid){//TODOAuto-generatedmethodstubreturnnull;}publicvoidsave(Usersuser){//TODOAuto-generatedmethodstub}publicvoidupdate(Usersuser){//TODOAuto-generatedmethodstub}}填写逻辑后的代码如下:packagecom.dao.impl;importjava.util.List;importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;importcom.dao.UserDAO;importcom.domain.Users;publicclassUserDAOImplextendsUserDAO{/**HibernateDaoSupportimplements*根据id查找用户publicUsersget(Integerid){}return(Users)getHibernateTemplate().get(Users.class,id);*@paramid需要查找的用户id*//***增加用户*@paramuser需要增加的用户11publicvoidsave(Usersuser){}/**getHibernateTemplate().save(user);*/*修改用户publicvoidupdate(Usersuser){}/**getHibernateTemplate().saveOrUpdate(user);*@paramuser需要修改的用户*/*删除用户publicvoiddelete(Integerid){*@paramid需要删除的用户id*/getHibernateTemplate().delete(getHibernateTemplate().get(Users.class,id));}/***删除用户publicvoiddelete(Usersuser){}/**getHibernateTemplate().delete(user);*@paramuser需要删除的用户*/*查询全部用户publicListfindAll(){}returngetHibernateTemplate().find(\"fromUsers\");*@return获得全部用户*/12/***根据用户名,密码查找用户*@paramusername查询所需的用户名*@parampass查询所需的密码*@return对应的用户*/publicUsersfindUserByNameAndPass(Stringusername,Stringpass){String[]args={username,pass};au.username=?andau.password=?\",args);if(ul.size()==1){}}}Listul=getHibernateTemplate().find(\"fromUsersauwherereturn(Users)ul.get(0);returnnull;三.业务逻辑层设计与实现1.在com.service包中创建业务逻辑层接口,如图6.图6ActionManager接口//ActionManager源码如下packagecom.service;publicinterfaceActionManager{/***根据用户名,密码验证登录是否成功*@parampassword登录的密码*/*@paramusername登录所输入的用户名IntegervalidLogin(Stringusername,Stringpassword);}2.在com.service.impl包中创建业务逻辑层接口的实现类,如图14.

图14ActionManager实现接口13packagecom.service.impl;importcom.dao.UserDAO;importcom.domain.Users;importcom.service.ActionManager;publicclassActionManagerImplimplementsActionManager{privateUserDAOuserDAO;publicvoidsetUserDAO(UserDAOuserDAO){}this.userDAO=userDAO;publicIntegervalidLogin(Stringusername,Stringpassword){try{password);Usersuser=userDAO.findUserByNameAndPass(username,if(user!=null){}returnuser.getId();}{}catch(Exceptione)System.out.println(e.getMessage());}}returnnull;四.控制层设计与实现1.Action的创建(1)在com.action包中创建Action。如图15.图15登录Action//LoginAction源码如下:packagecom.action;14importcom.service.ActionManager;importcom.opensymphony.xwork2.ActionSupport;publicclassLoginActionextendsActionSupport{privatestaticfinallongserialVersionUID=1L;protectedActionManagermgr;privateStringusername;privateStringpassword;publicStringexecute()throwsException{if(username.equals(\"\")||username==null){}return\"input\";IntegeruserId=mgr.validLogin(username,password);if(userId!=null){}else{returnSUCCESS;}}addActionError(\"用户名/密码不匹配\");return\"input\";publicStringgetPassword(){}returnpassword;publicStringgetUsername(){}returnusername;publicvoidsetPassword(Stringpassword){}this.password=password;publicvoidsetUsername(Stringusername){}this.username=username;15publicvoidsetMgr(ActionManagermgr){}this.mgr=mgr;publicActionManagergetMgr(){returnmgr;}}2.Struts2控制文件和属性文件的配置(1)action的配置系统生成的Struts.xml模板为://struts.xml配置资源自后的Struts.xml为//struts.xml/next.jsp/index.jsp(2)struts.properties//struts.propertisestruts.locale=zh_CNstruts.i18n.encoding=UTF-816struts.objectFactory=springstruts.objectFactory.spring.autoWire=namestruts.multipart.parser=jakartastruts.action.extension=actionstruts.serve.static=truestruts.serve.static.browserCache=truestruts.enable.DynamicMethodInvocation=truestruts.enable.SlashesInActionNames=falsestruts.tag.altSyntax=truestruts.devMode=falsestruts.ui.theme=xhtmlstruts.i18n.reload=falsestruts.ui.templateDir=templatestruts.ui.templateSuffix=ftl#setsthedefaulttemplatetype.Eitherftl,vm,orjspstruts.configuration.xml.reload=falsevelocity.properties###Locationofvelocity.propertiesfile.defaultstostruts.velocity.configfile=velocity.propertiesStrutsVelocityContext###CommaseparatedlistofVelocityContextclassnamestochaintothestruts.velocity.contexts=###Locationofthevelocitytoolboxstruts.velocity.toolboxlocation=struts.url.http.port=80###usedtobuildURLs,suchastheUrlTagstruts.url.https.port=443###possiblevaluesare:none,getorallstruts.url.includeParams=getstruts.custom.i18n.resources=messageResourcestruts.dispatcher.parametersWorkaround=falsestruts.freemarker.wrapper.altMap=truestruts.xslt.nocache=false###SeetheStrutsBeanWrapperjavadocsformoreinformation###AlistofconfigurationfilesautomaticallyloadedbyStrutss.xmlstruts.configuration.files=struts-default.xml,struts-plugin.xml,strutstruts.mapper.alwaysSelectFullNamespace=false17(3)信息资源属性文件//messageResource_zh_CN.properties图16对应的ASCII码为:loginPage=\登\录\页\面errorPage=\错\误\页\面succPage=\成\功\页\面failTip=\对\不\起\,\您\不\能\登\录\!\\u7528\户\名\或\密\码\错\误\!user=\用\户\名sex=\性\别age=\年\龄pass=\密succTip=\欢\迎\,${0},\您\已\经\登\录\!birth=\生\日login=\登\录reset=\重\置\码user.required=\用\户\名\必\须\输\入\!pass.required=\密\码\必\须\输\入\!这里包含所有的国际资源编码,本实验是写了中文,大家也可以使用其他的语言。3.在Web.xml中配置Spring的IoC容器和Struts2的前台控制器系统自动生成的web.xml为:index.jspstruts2org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterstruts2/*其中url-pattern是在与struts2交互时确定的。配置之后的web.xml为://web.xmlindex.jspcontextConfigLocation>/WEB-INF/classes/applicationContext.xmlorg.springframework.web.context.ContextLoaderListener19选择一致。-->erceptor\">PROPAGATION_REQUIRED,readOnlyPROPAGATION_REQUIRED22oxyCreator\">mgrtransactionInterceptor五.表现层设计与实现本实验用的表现层有两个,用于登录的页面index.jsp和登录成功后的next.jsp。//index.jsp<%@pagelanguage=\"java\"pageEncoding=\"GB2312\"%><%@taglibprefix=\"s\"uri=\"/struts-tags\"%><%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+\"://\"23+request.getServerName()+\":\"+request.getServerPort()%>+path+\"/\";\">testSSH用户登录namespace=\"/jee\">


//next.jsp<%@pagelanguage=\"java\"pageEncoding=\"GB2312\"%><%@taglibprefix=\"s\"uri=\"/struts-tags\"%><%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+\"://\"+request.getServerName()+\":\"+request.getServerPort()+path+\"/\";%>\">nextpage24

欢迎,


登录成功!!!


返回六.测试与总结1.部署工程,使用正确和错误的用户名进行测试。输入正确用户名和密码后,提交如出现下图所示的错误图18找到运行测试路径(一般就是MyEclipse启动时跳出的框中路径)

25图19***启动程序时提示的工作路径请记好

在这个路径下搜索名字为antlr-2.7.2.jar的文件,因与antlr-2.7.6.jar重复,故冲突,请把版本低的antlr-2.7.2.jar删除,

图20重启tomcat,再重新调试。

图2126可能的问题及解决方案

1.如果出现原文件中的字符与设定的字符集不匹配(在保存时弹出如下问题窗口),图22修改默认的字符集。有多条进入修改对话框的入口,效果最好的是:(1)从“Windows->Preference”进入如下页:图23选择ContentType页,修改“JavaClassFile”的encoding为UTF-8。2.如果8080端口已经被其它应用占用,改用其它端口,如8090,修改方式如下:windows->preferences27图243.在myeclipse8.6中,因为Struts自带的antlr-2.7.2.jar,比Hibernate3.3自带的antlr-2.7.6.jar的版本要低,故要删除前一个低版本。否则执行hibernate的HQL查询时报错:

java.lang.NoSuchMethodError:antlr.collections.AST.getLine()I需要删除struts1.3和2.1中的antlr-2.7.2.jar。

由于myeclipse添加struts功能时,包不是放在工程lib下的,而是myeclipse自带的,所以删除比较麻烦。可以这样删除:

(1)在

X:\\MyEclipse8.6\\MyEclipse-8.6\\configuration\\org.eclipse.osgi\\bundles下搜索antlr-2.7.2.jar,找出的都删除,(有些是1.3的,有些是2.1的);

(2)然后在X:\\MyEclipse8.6\\Common\\plugins下搜索*struts*.jar,会找

出三个:

图25

选中一个文件,打开方式选择压缩包,

com.genuitec.eclipse.cross.easystruts.eclipse_8.6.0.me201007231647.jar,在lib下和data\\1.3下删除antlr-2.7.2.jar(这是删除1.3里面的),再打开com.genuitec.eclipse.struts2_8.6.0.me201007292038.jar删除data\\2.1\\core中的antlr-2.7.2.jar(这个是2.1里面的)。

好了,这样就从struts1.3和2.1中移除了antlr-2.7.2.ja,因为这两个jar

28是common目录下的,所以删除了后,再运行myeclipse后,myeclipse就不能再从这两个包中找antlr-2.7.2.jar并加载了。

29

因篇幅问题不能全部显示,请点此查看更多更全内容