收藏 分销(赏)

114020_java-SSH2-Struts2.1、Spring3.0、Hibernate3.3大框架整合详细图解.docx

上传人:二*** 文档编号:4710743 上传时间:2024-10-10 格式:DOCX 页数:36 大小:1.39MB 下载积分:5 金币
下载 相关 举报
114020_java-SSH2-Struts2.1、Spring3.0、Hibernate3.3大框架整合详细图解.docx_第1页
第1页 / 共36页
本文档共36页,全文阅读请下载到手机保存,查看更方便
资源描述
1.创建项目 打开Myeclipse8.6,新建web工程,命名为ssh,点击完成。 获得目录结构如下: 2为项目添加Struts能力 a)右键点击项目,选择MyEclipse->Add Struts Capabilities,或者点击菜单栏中MyEclipse->Project Capabilities->Add Struts Capabilities。 b)选择struts2.1版本 c)点击下一步,选择Struts Core(核心库)和Struts 2 Spring(包含集成Spring插件)的两个最基本库,其他根据需要可以添加。 d)点击完成,添加后的项目多了一个Struts.xml(用于配置action),web.xml中添加了核心过滤器的配置。 <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 3.为项目添加Spring能力 a)右键点击项目,选择MyEclipse->Add Spring Capabilities,或者点击菜单栏中MyEclipse->Project Capabilities->Add Spring Capabilities。 b)选择Spring3.0版本,类库选择 Spring 3.0 AOP、Spring 3.0 Core、Spring 3.0 Persistence Core、Spring 3.0 Persistence JDBC、Spring 3.0 Web 5个库,并勾选复制到本地WEB-INF/lib目录。 c)点击下一步,默认配置不需修改。 d)点击完成,查看添加Spring后的项目,增加了applicationContex.xml文件 4.为项目添加Hibernate能力 a)右键点击项目,选择MyEclipse->Add Hibernate Capabilities,或者点击菜单栏中MyEclipse->Project Capabilities->Add Hibernate Capabilities。 b)选择Hibernate3.3版本,如果要使用注记可选中启用annotation,但是会对后续自动生成实体类造成麻烦,不选就是用xml文件形式进行实体类映射,默认勾选Hibernate 3.3 Annotation & Entity Manager、Hibernate 3.3 Core Libraries两个类库,复制jar文件到本地WEB-INF/lib文件夹下。 c)点击下一步,选择使用Spring的配置文件applicationContext.xml,这样就不会生成hibernate.cfg.xml,生成与否看个人习惯。 d)点击下一步,选择已经存在的applicationContext.xml文件的位置以及创建sessionFactory的名字 e)下一步,选择已经建立好的数据库连接mydb f)点击下一步,取消勾选,不生成HibernateSessionFactory类 g)点击完成,查看工程,applicationContext.xml文件中增加了数据库连接的配置,包括datasource和sessionFactory 7.搭建项目结构(分包) a)创建包结构:model(实体类)、dao(数据库访问类)、service(业务逻辑类)、web(控制类) 8.搭建项目结构(model、dao生成) 利用Myeclipse生成model和dao(最好自己构建可以减少冗余代码) 转到MyEclipse数据库浏览视图下,双击mydb进行连接 右键点击users表,选择Hibernate反向工程 选择生成目录为app.model,勾选创建POJO即创建表对应的Javabean,同时创建映射文件hbm.xml,勾选更新hibernate配置,勾选创建spring dao。 下一步,选择id生成策略为native,因为users主键自增,或者在下一步中选择也可以 点击完成,回到代码视图查看工程变化,model包下面增加了Users.java、UsersDAO.java、Users.hbm.xml三个文件 将UsersDAO移动到dao包中,并抽出接口IUsersDAO 因为位置移动需要修改applicationContex.xml中的配置 <beanid="UsersDAO"class="app.dao.UsersDAO"> <propertyname="sessionFactory"> <refbean="sessionFactory"></ref> </property> </bean> 9.搭建项目结构(service、web编写) a)编写service层代码,创建IUsersService接口和UsersService实现类,编写CRUD的方法。 packageapp.service; importjava.util.List; importapp.model.Users; public interface IUsersService { public List<Users>findAll(); public List<Users>findByName(String uname); public Users findByUid(Integer uid); public void addUsers(Users u) throws Exception ; public void updateUsers(Users u) throws Exception ; public void delUsers(Integer uid) throws Exception ; public Users login(String uname,Stringupass); } packageapp.service; importjava.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; importapp.dao.IUsersDAO; importapp.dao.UsersDAO; importapp.model.Users; public class UsersService implements IUsersService { private static final Logger log = LoggerFactory.getLogger(UsersService.class); privateIUsersDAOusersDAO=null; public void setUsersDAO(IUsersDAOusersDAO) { this.usersDAO = usersDAO; } public void addUsers(Users u) throws Exception { usersDAO.save(u); } public void delUsers (Integer uid) throws Exception { usersDAO.delete(findByUid(uid)); } public List<Users>findAll() { returnusersDAO.findAll(); } public List<Users>findByName(String uname) { returnusersDAO.findByUname(uname); } public Users findByUid(Integer uid) { returnusersDAO.findById(uid); } public Users login(String uname, String upass) { List list = usersDAO.findByUname(uname); if(null==list||list.size()==0) return null; Users u=(Users) usersDAO.findByUname(uname).get(0); if(null==u) return null; if(uname.equals(u.getUname())&&upass.equals(u.getUpass())) return u; else return null; } public void updateUsers (Users u) throws Exception { usersDAO.attachDirty(u); } } b)编写web层UsersAction代码,用于对用户增删改查进行处理 packageapp.web; importjava.util.ArrayList; importjava.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; importorg.springframework.context.ApplicationContext; importapp.model.Users; importapp.service.IUsersService; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class UsersAction extends ActionSupport{ private static final Logger log = LoggerFactory.getLogger(UsersAction.class); private Integer uid=new Integer(0);//用于修改删除时传参数 private Users u=new Users();//用于增改 private List<Users>userList=new ArrayList<Users>();//用于查询 privateIUsersServiceusersService=null; public String addUser() throws Exception{ try { usersService.addUsers(u); } catch (Exception e) { log.error("保存用户错误",e); return ERROR; } return SUCCESS; } public String listUser() throws Exception{ userList=usersService.findAll(); return SUCCESS; } public String editUser() throws Exception{ try { u=usersService.findByUid(uid); } catch (Exception e) { log.error("修改用户错误",e); return ERROR; } return SUCCESS; } public String updateUser() throws Exception{ try { usersService.updateUsers(u); } catch (Exception e) { log.error("更新用户错误",e); return ERROR; } return SUCCESS; } public String delUser() throws Exception{ try { usersService.delUsers(uid); } catch (Exception e) { log.error("删除用户错误",e); return ERROR; } return SUCCESS; } public String login() throws Exception{ try { Users loginUser=usersService.login(u.getUname(), u.getUpass()); if(null!=loginUser){ ActionContext context=ActionContext.getContext(); context.getSession().put("LOGINUSER",loginUser); return SUCCESS; } } catch (Exception e) { log.error("登录查询错误",e); return ERROR; } return INPUT; } public void setUsersService(IUsersServiceusersService) { this.usersService = usersService; } public Users getU() { return u; } public void setU(Users u) { this.u = u; } public List<Users>getUserList() { returnuserList; } public void setUserList(List<Users>userList) { this.userList = userList; } public Integer getUid() { returnuid; } public void setUid(Integer uid) { this.uid = uid; } } 10.搭建项目结构(配置文件编写) a)补充applicationContext.xml配置文件,装配注入关系和事务处理 增加spring配置文件节点的命名空间,否则事务处理节点不识别: <?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 增加装配关系 <beanid="UsersDAO"class="app.dao.UsersDAO"> <propertyname="sessionFactory"> <refbean="sessionFactory"></ref> </property> </bean> <beanid="UsersService"class="app.service.UsersService"> <propertyname="usersDAO"ref="UsersDAO"/> </bean> <beanid="UsersAction"class="app.web.UsersAction"> <propertyname="usersService"ref="UsersService"/> </bean> 增加事务处理机制 <!--配置事务管理器--> <beanid="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <propertyname="sessionFactory"> <refbean="sessionFactory"/> </property> </bean> <!--配置事务的传播特性--> <tx:adviceid="txAdvice"transaction-manager="transactionManager"> <tx:attributes> <tx:methodname="save*"propagation="REQUIRED"/> <tx:methodname="update*"propagation="REQUIRED"/> <tx:methodname="delete*"propagation="REQUIRED"/> <tx:methodname="add*"propagation="REQUIRED"/> <tx:methodname="del*"propagation="REQUIRED"/> <tx:methodname="*"read-only="true"/> </tx:attributes> </tx:advice> <!—哪些类的哪些方法参与事务--> <aop:config> <aop:pointcutid="allServiceMethod"expression="execution(* app.service.*.*(..))"/> <aop:advisorpointcut-ref="allServiceMethod"advice-ref="txAdvice"/> </aop:config> b)配置Struts.xml <?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEstrutsPUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <constantname="struts.objectFactory"value="spring"></constant> <packagename="usermanage"extends="struts-default"> <actionname="addUser"class="UsersAction"method="addUser"> <resultname="success"type="redirect">listUser.action</result> <resultname="error">/error.jsp</result> </action> <actionname="editUser"class="UsersAction"method="editUser"> <resultname="success">/user/user_edit.jsp</result> </action> <actionname="updateUser"class="UsersAction"method="updateUser"> <resultname="success"type="redirect">listUser.action</result> <resultname="error">/error.jsp</result> </action> <actionname="delUser"class="UsersAction"method="delUser"> <resultname="success"type="redirect">listUser.action</result> <resultname="error">/error.jsp</result> </action> <actionname="listUser"class="UsersAction"method="listUser"> <resultname="success">/user/user_list.jsp</result> </action> <actionname="login"class="UsersAction"method="login"> <resultname="success">/index.jsp</result> <resultname="input">/login.jsp</result> <resultname="error">/error.jsp</result> </action> </package> </struts> c)配置web.xml,设定applicationContex.xml的加载位置,如果放在WEB-INF下则不需要设定,配置监听。 <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:applicationContext.xml </param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> 11.搭建项目结构(页面代码) a)页面关键代码 User_add.jsp <s:formaction="addUser"> <tableborder="1"> <tr><s:textfieldlabel="用户名"name="u.uname"></s:textfield></tr> <tr><s:textfieldlabel="密码"name="u.upass"></s:textfield></tr> <tr><tdcolspan="2"><s:submitvalue="保存"></s:submit></td></tr> </table> </s:form> User_edit.jsp <s:formaction="updateUser"> <tableborder="1"> <s:hiddenname="u.uid"></s:hidden> <tr><s:textfieldlabel="用户名"name="u.uname"></s:textfield></tr> <tr><s:textfieldlabel="密码"name="u.upass"></s:textfield></tr> <tr><tdcolspan="2"><s:submitvalue="保存"></s:submit></td></tr> </table> </s:form> User_list.jsp <tableborder="1"> <tr><td>编号</td><td>用户名</td><td>密码</td><td>操作</td></tr> <s:iteratorvalue="userList"> <tr> <td>${uid}</td> <td>${uname }</td> <td>${upass }</td> <td><ahref='<s:urlaction="editUser"><s:paramname="uid"value="uid"/></s:url>'>修改</a>&nbsp; <aonclick="return confirm('确定要删除吗?');"href='<s:urlaction="delUser"><s:paramname="uid"value="uid"/></s:url>'>删除</a></td> </tr> </s:iterator> </table> Login.jsp <s:formaction="login"> <tableborder="1"> <tr><s:textfieldlabel="用户名"name="u.uname"></s:textfield></tr> <tr><s:textfieldlabel="密码"name="u.upass"></s:textfield></tr> <tr><tdcolspan="2"><s:submitvalue="登录"></s:submit></td></tr> </table> </s:form> 12.测试运行 http://localhost:8080/ssh/login.jsp 1.异常排除 执行hql查询时发现异常java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I 原因是由于strut2类库中包含antlr-2.7.2.jar而hibernate使用antlr-2.7.6.jar,版本冲突导致的,查看tomcat发布目录lib文件夹下发现同时存在这两个文件,删除antlr-2.7.2.jar即可 HTTP Status 500 - typeException report message descriptionThe server encountered an internal error () that prevented it from fulfilling this request. exception java.lang.reflect.InvocationTargetException sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441) com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243) com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252) org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89) com.opensymphon
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服