struts2+spring2.5+hibernate3集成的简单实例
2010-05-24 22:28
441 查看
本文通过一个向数据库添加和删除的实例来演示3个框架的集成过程。
1.首先编写view层文件index.jsp:
2.在web.xml中配置index.jsp以及配置struts2以响应.do提交和spring的监听类:
3.配置applicationContext.xml来实际定位到一个action类:
4.编写action类来测试我们进行的配置是否正确:
此时struts2和spring已经完成集成了。
5.进入Hibernate配置阶段,编写要与数据库表映射的Bean类:
6.编写Hibernate的映射xml文件,对Bean和数据库表进行映射(UserInfo.hbm.xml):
7.编写DAO类来操作数据Bean:
此时Hibernate部分进完成了。
8.编写业务逻辑类来操作DAO:
9.在Spring的applicationContext.xml中注入Hibernate的DAO类,业务逻辑类以及启动Hibernate需要的SessionFactory,TransactionManager以及TransactionProxy Bean:
10:编写数据源属性文件(jdbc.properties):
11:修正action类,在该类中通过设定一个业务逻辑类来完成添加或删除操作:
此时Spring和Hibernate就完成的集成。3个框架也完成了集成。启动tomcat进行测试吧。好的开始!
编写过程中遇到的几个问题:
(1)struts.xml配置package节点时,没有指定extends="struts-default",启动服务时报错,无法进行form提交去访问资源;
(2)要想响应.do,还必须在struts.xml中追加<constant name="struts.action.extension" value="do" />节点,默认是.action;
(3)在进行DAO类中删除记录的编写时,没有导入antlr-2.7.6.jar包,导致java.lang.reflect.InvocationTargetException;
(4)在进行DAO类中删除记录的编写时,使用的表名是数据库中的名字,而Hibernate是根据类名进行查询的,所以会not map 错误。
1.首先编写view层文件index.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Welcome</title> <script type="text/javascript"><!-- function btnSubmit(obj) { if (obj != null) { var url = ""; if (obj.name == "add") { url = "login.do"; } else if (obj.name == "delete") { url = "logout.do"; } var frm = document.getElementById("userInfoForm"); if (frm != null) { try { frm.action = url; frm.submit(); } catch(ex) { } } } } // --></script> </head> <body> This is my JSP page. <br> <form id="userInfoForm" name="userInfoForm" method="post" onsubmit="return false;"> 用户名: <input name="username" type="text" /> 密码: <input name="password" type="password"> <input name="add" type="button" onclick="btnSubmit(this);" value="增加" /> <input name="res" type="reset" value="重置" /> <input name="delete" type="button" onclick="btnSubmit(this);" value="删除" /> </form> </body> </html>
2.在web.xml中配置index.jsp以及配置struts2以响应.do提交和spring的监听类:
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>SSH</display-name> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <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>*.do</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
3.配置applicationContext.xml来实际定位到一个action类:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="LoginAction" class="com.app.web.action.LoginAction " singleton="false"> </bean> <bean id="LogoutAction" class="com.app.web.action.LogoutAction " singleton="false"> </bean> </beans>
4.编写action类来测试我们进行的配置是否正确:
package com.app.web.action; public class LoginAction { private String username = ""; private String password = ""; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String execute() { System.out.println("loginaction"); return "success"; } }
package com.app.web.action; import com.app.web.bean.UserInfo; public class LogoutAction { private String username = ""; private String password = ""; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String execute() { System.out.println("logout"); return "success"; } }
此时struts2和spring已经完成集成了。
5.进入Hibernate配置阶段,编写要与数据库表映射的Bean类:
package com.app.web.bean; import java.io.Serializable; public class UserInfo implements Serializable{ /** * */ private static final long serialVersionUID = 2394904699860474046L; private Integer id; private String username; private String password; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
6.编写Hibernate的映射xml文件,对Bean和数据库表进行映射(UserInfo.hbm.xml):
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.app.web.bean.UserInfo" table="userinfo"> <id name="id" column="id" type="integer"> <generator class="increment"/> </id> <property name="username" type="string"/> <property name="password" type="string"/> </class> </hibernate-mapping>
7.编写DAO类来操作数据Bean:
package com.app.DAO; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.app.web.bean.UserInfo; public class UserInfoDAO extends HibernateDaoSupport { public void save(UserInfo um) { Session ss = getSessionFactory().openSession(); Transaction tx = ss.beginTransaction(); ss.save(um); tx.commit(); ss = null; } public void delete(UserInfo um) { System.out.println("start"); Session ss = getSessionFactory().openSession(); Transaction tx = ss.beginTransaction(); String sql = "delete from UserInfo where username = '" + um.getUsername() + "'" + "and password='" + um.getPassword() + "'"; System.out.println(sql); Query query = ss.createQuery(sql); int result = query.executeUpdate(); tx.commit(); ss = null; System.out.println("end" + result); } }
此时Hibernate部分进完成了。
8.编写业务逻辑类来操作DAO:
package com.app.service; import com.app.DAO.UserInfoDAO; import com.app.web.bean.UserInfo; public class LoginService { private UserInfoDAO userinfoDAO; public UserInfoDAO getUserinfoDAO() { return userinfoDAO; } public void setUserinfoDAO(UserInfoDAO userinfoDAO) { this.userinfoDAO = userinfoDAO; } public void saveinfo(UserInfo userinfo) { userinfoDAO.save(userinfo); } }
package com.app.service; import com.app.DAO.UserInfoDAO; import com.app.web.bean.UserInfo; public class LogoutService { private UserInfoDAO userinfoDAO; public UserInfoDAO getUserinfoDAO() { return userinfoDAO; } public void setUserinfoDAO(UserInfoDAO userinfoDAO) { this.userinfoDAO = userinfoDAO; } public void deleteInfo(UserInfo userInfo) { userinfoDAO.delete(userInfo); } }
9.在Spring的applicationContext.xml中注入Hibernate的DAO类,业务逻辑类以及启动Hibernate需要的SessionFactory,TransactionManager以及TransactionProxy Bean:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <!-- Config DataSource start --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> </bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="initialSize" value="2" /> <property name="maxActive" value="20" /> </bean> <!-- Config DataSource end --> <!-- Set hibernate Configure instance and start sessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.generate_statistics">true</prop> <prop key="hibernate.connection.release_mode">auto</prop> <prop key="hibernate.autoReconnect">true</prop> </props> </property> <property name="mappingDirectoryLocations"> <list> <value> classpath:com/app/web/bean </value> </list> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean> <bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="target"> <list> <ref local="loginService" /> <ref local="logoutService" /> </list> </property> <property name="transactionAttributes"> <props> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="delete*">PROPAGATION_REQUIRED</prop> <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> <bean id="userinfoDAO" class="com.app.DAO.UserInfoDAO"> <property name="sessionFactory"><ref local="sessionFactory"/></property> </bean> <bean id="loginService" class="com.app.service.LoginService"> <property name="userinfoDAO"> <ref bean="userinfoDAO" /> </property> </bean> <bean id="logoutService" class="com.app.service.LogoutService"> <property name="userinfoDAO"> <ref bean="userinfoDAO" /> </property> </bean> <bean id="LoginAction" class="com.app.web.action.LoginAction " singleton="false"> <property name="loginService"> <ref bean="loginService" /> </property> </bean> <bean id="LogoutAction" class="com.app.web.action.LogoutAction " singleton="false"> <property name="logoutService"> <ref bean="logoutService" /> </property> </bean> </beans>
10:编写数据源属性文件(jdbc.properties):
# Properties file with JDBC-related settings. # Applied by PropertyPlaceholderConfigurer from "applicationContext-resources.xml". # Targeted at system administrators, to avoid touching the context XML files. # jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:15000/test jdbc.username=root jdbc.password=passwd00
11:修正action类,在该类中通过设定一个业务逻辑类来完成添加或删除操作:
package com.app.web.action; import com.app.service.LoginService; import com.app.web.bean.UserInfo; public class LoginAction { private LoginService loginService; private String username = ""; private String password = ""; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public LoginService getLoginService() { return loginService; } public void setLoginService(LoginService loginService) { this.loginService = loginService; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String execute() { UserInfo userInfo = new UserInfo(); userInfo.setUsername(username); userInfo.setPassword(password); loginService.saveinfo(userInfo); return "success"; } }
package com.app.web.action; import com.app.service.LogoutService; import com.app.web.bean.UserInfo; public class LogoutAction { private LogoutService logoutService; private String username = ""; private String password = ""; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public LogoutService getLogoutService() { return logoutService; } public void setLogoutService(LogoutService logoutService) { this.logoutService = logoutService; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String execute() { UserInfo userInfo = new UserInfo(); userInfo.setUsername(username); userInfo.setPassword(password); logoutService.deleteInfo(userInfo); return "success"; } }
此时Spring和Hibernate就完成的集成。3个框架也完成了集成。启动tomcat进行测试吧。好的开始!
编写过程中遇到的几个问题:
(1)struts.xml配置package节点时,没有指定extends="struts-default",启动服务时报错,无法进行form提交去访问资源;
(2)要想响应.do,还必须在struts.xml中追加<constant name="struts.action.extension" value="do" />节点,默认是.action;
(3)在进行DAO类中删除记录的编写时,没有导入antlr-2.7.6.jar包,导致java.lang.reflect.InvocationTargetException;
(4)在进行DAO类中删除记录的编写时,使用的表名是数据库中的名字,而Hibernate是根据类名进行查询的,所以会not map 错误。
相关文章推荐
- Struts2+Spring2.5+Hibernate3实例
- spring boot 集成WebService Cxf简单实例(rest)
- 整合struts2+hibernate3+spring2.5
- Struts2.1&Hibernate3.2&Spring2.5集成[基于Annotation]--案例结构
- 基于SSH(Struts2.0+Spring2.5+Hibernate3)的框架构建(1)
- springboot集成swagger2简单实例
- Struts2+Spring2.5+Hibernate3整合
- struts+hibernate+spring简单实例
- 简单的struts+spring+hibernate配置实例
- spring4.2+struts2.5+jdbc实例-PIMS(五)
- spring4.2+struts2.5+jdbc实例-PIMS(三)
- struts2.0、hibernate3、spring2.5框架整合流程实例
- Struts2.1&Hibernate3.2&Spring2.5集成[基于Annotation]--代码
- JPA+Spring2.5+Struts2.1.8 集成(二)
- spring2.5+struts2.1.8+hibernate3整合配置
- java开源框架集成常见错误之spring2.5中没有org.springframework.web.struts.DelegatingActionProxy ,使得Action不能注入到spring中
- Spring 2.5集成MVC框架Struts 2
- Spring 2.5集成MVC框架Struts 2
- struts2+hibernate3+spring2.5整合配置
- spring4.2+struts2.5+jdbc实例-PIMS(四)