下面将用一个实例来解决Struts2+Spring2+Hibernate3三者之间的整合问题。
实例:用户登录程序。
说明:在这三者之间,其实我们要整合的是struts2+spring2以及Spring2+Hibernate3,Struts与Hibernate不存在整合问题,他们一个是web层框架,一个是持久层框架。
按照如下的步骤进行:
1、建立好web工程及相应的package,即建立三层结构:web层,service层,dao层。
2、导入所需要的jar包,特别地要加入Struts2-Spring-plugin-2.0.9.jar,其他的jar包大家应该知道,不清楚的可以网上查阅相关资料。
3、配置web.xml文件,在这个文件中,需要加入一个Spring的监听器类,其完整配置如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app 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">
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>
- org.apache.struts2.dispatcher.FilterDispatcher
- </filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <!--struts2与spring2整合,是通过监听器-->
- <listener>
- <listener-class>
- org.springframework.web.context.ContextLoaderListener
- </listener-class>
- </listener>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
4、编写一个User类和User.hbm.xml映射文件
5、编写dao层代码,使用接口和实现类的方式,其完整源代码如下:
IUserDao.java和UserDaoImpl.java:
- package org.hnylj.dao;
- import org.hnylj.model.User;
- public interface IUserDao {
- public User login (String username,String password) ;
- }
- package org.hnylj.dao.impl;
- import java.util.List;
- import org.hnylj.dao.IUserDao;
- import org.hnylj.model.User;
- import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
- public class UserDaoImpl extends HibernateDaoSupport implements IUserDao {
- public User login(String username, String password) {
- User user = null;
- final String HQL = "FROM User u where u.username=? and u.password=?";
- String[] parameterHql = new String[2];
- parameterHql[0] = username;
- parameterHql[1] = password;
- List<?> list = this.getHibernateTemplate().find(HQL,parameterHql);
- if(list.size()!=0){
- user = (User)list.get(0);
- }
- return user;
- }
- }
6、编写service层代码,与上面一样也使用接口和实现类的方式,其完整源代码如下:
IUserService.java和UserServiceImpl.java:
- package org.hnylj.service;
- import org.hnylj.model.User;
- public interface IUserService {
- public User login(String username, String password) ;
- }
- package org.hnylj.service.impl;
- import org.hnylj.dao.IUserDao;
- import org.hnylj.dao.impl.UserDaoImpl;
- import org.hnylj.model.User;
- import org.hnylj.service.IUserService;
- public class UserServiceImpl implements IUserService {
- private IUserDao userDao ;
- public IUserDao getUserDao() {
- return userDao;
- }
- public void setUserDao(IUserDao userDao) {
- this.userDao = userDao;
- }
- public User login(String username, String password) {
- User user = userDao.login(username, password);
- return user ;
- }
- }
7、编写web层代码,即Struts的action代码:
- package org.hnylj.web;
- import org.hnylj.model.User;
- import org.hnylj.service.IUserService;
- import org.hnylj.service.impl.UserServiceImpl;
- import com.opensymphony.xwork2.ActionSupport;
- public class LoginAction extends ActionSupport {
- private String username ;
- private String password ;
- private IUserService userService ;
- 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 IUserService getUserService() {
- return userService;
- }
- public void setUserService(IUserService userService) {
- this.userService = userService;
- }
- public String execute() throws Exception {
- username = getUsername() ;
- password = getPassword() ;
- User user = userService.login(username, password) ;
- if (user != null) {
- return SUCCESS ;
- }
- return ERROR ;
- }
- }
8、所有的代码已经写好了,现在就是进行一下配置, 这里需要applicationContext.xml文件和Struts.xml文件,其中applicationContext.xml文件管理所有的bean,我们将hibernate所需要的数据源及Struts中action都注入其中,统一管理。配置情况如下
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
- <bean id="dataSource"
- class="com.mchange.v2.c3p0.ComboPooledDataSource"
- destroy-method="close">
- <property name="jdbcUrl"
- value="jdbc:mysql://localhost:3306/ssh2" />
- <property name="driverClass" value="com.mysql.jdbc.Driver" />
- <property name="user" value="root" />
- <property name="password" value="123" />
- <property name="maxPoolSize" value="40" />
- <property name="minPoolSize" value="1" />
- <property name="initialPoolSize" value="1" />
- <property name="maxIdleTime" value="20" />
- </bean>
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource">
- <ref bean="dataSource" />
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">
- org.hibernate.dialect.SQLServerDialect
- </prop>
- </props>
- </property>
- <property name="mappingResources">
- <list>
- <value>org/hnylj/model/User.hbm.xml</value>
- </list>
- </property>
- </bean>
- <bean id="userDao" class="org.hnylj.dao.impl.UserDaoImpl">
- <property name="sessionFactory">
- <ref bean="sessionFactory" />
- </property>
- </bean>
- <bean id="userService"
- class="org.hnylj.service.impl.UserServiceImpl">
- <property name="userDao">
- <ref bean="userDao" />
- </property>
- </bean>
- <bean id="loginAction" class="org.hnylj.web.LoginAction">
- <property name="userService">
- <ref bean="userService" />
- </property>
- </bean>
- </beans>
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <package name="struts2" namespace="/" extends="struts-default">
- <action name="login" class="org.hnylj.web.LoginAction">
- <result name="success">/success.jsp</result>
- <result name="error">/error.jsp</result>
- </action>
- </package>
- <constant name="struts.custom.i18n.resources" value="globalMessages" />
- </struts>
还有一些用于Struts国际化的属性文件代码请参考下面的源代码附件。
至此一个Strut2+Spring2+Hibernate3整合的用户登陆程序所有工作完成,将整个应用部署到tomcat下,启动tomcat服务器即可运行。