经过一天的折腾,终于在MyEclipse2013下搭建出一个Struts2+Spring3.1+Hibernate3.3整合的项目,具体过程如下,仅供新手学习,大神勿喷
首先新建Web项目:
直接finish完成即可!
加入Spring支持:
弹出如下窗口:
此处将Spring配置文件的名称改为applicationContext-hibernate.xml用来专门管理Hibernate
此时该配置文件配置如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> </beans>
直接点击Finish完成即可!至此Spring支持成功加入了!
加入Struts2的支持:
此处需要注意的是在加Spring支持的时候,已经加入了antlr-2.7.6.jar的包,所以此处要勾选高级选项,将antlr-2.7.2.jar的复选框取消,点击finish完成即可!至此Struts2的支持加好!
最后一步:加入Hibernate支持:
在加Hibernate支持之前,先要配置好数据库的链接:
此界面找不到的朋友还请自行百度查询!
此处1的地方要勾选上!
2的地方就是将Hibernate交给Spring管理!
3的
选择刚才创建好的数据库链接!
点击finish完成即可!
此时各配置文件配置如下:
applicationContext-hibernate.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> <context:annotation-config></context:annotation-config> <context:component-scan base-package="com.ssh.dao.impl,com.ssh.service.impl"></context:component-scan> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/ssh"></property> <property name="username" value="root"></property> <property name="password" value="admin"></property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> </props> </property> <property name="mappingResources"> <list> <value>com/ssh/pojo/SysRole.hbm.xml</value> <value>com/ssh/pojo/SysUser.hbm.xml</value></list> </property> </bean> </beans>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> </struts>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>SSH</display-name> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext-*.xml</param-value> </context-param> <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>*.action</url-pattern> </filter-mapping> </web-app>
框架支持加完之后,下面正式进入登录功能的开发!
数据库中我预先准备了一些数据,SQL代码如下:
/* Navicat MySQL Data Transfer Source Server : 本机服务器 Source Server Version : 50533 Source Host : localhost:3306 Source Database : platform Target Server Type : MYSQL Target Server Version : 50533 File Encoding : 65001 Date: 2014-05-09 20:12:53 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for sys_role -- ---------------------------- DROP TABLE IF EXISTS `sys_role`; CREATE TABLE `sys_role` ( `id` int(11) NOT NULL AUTO_INCREMENT, `roleName` varchar(255) NOT NULL COMMENT ‘角色名称‘, `depart` int(11) DEFAULT NULL COMMENT ‘权限(部门)‘, `roleNum` varchar(2000) DEFAULT NULL COMMENT ‘角色权限‘, `field1` varchar(255) DEFAULT NULL COMMENT ‘备用字段1‘, `field2` varchar(255) DEFAULT NULL COMMENT ‘备用字段2‘, `field3` varchar(255) DEFAULT NULL COMMENT ‘备用字段3‘, `field4` varchar(255) DEFAULT NULL COMMENT ‘备用字段4‘, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of sys_role -- ---------------------------- -- ---------------------------- -- Table structure for sys_user -- ---------------------------- DROP TABLE IF EXISTS `sys_user`; CREATE TABLE `sys_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(255) NOT NULL COMMENT ‘用户名‘, `userPwd` varchar(255) NOT NULL COMMENT ‘密码‘, `userNike` varchar(255) NOT NULL COMMENT ‘用户昵称‘, `userMail` varchar(255) DEFAULT NULL COMMENT ‘邮箱‘, `userPhone` varchar(255) DEFAULT NULL COMMENT ‘手机‘, `userTel` varchar(255) DEFAULT NULL COMMENT ‘电话‘, `userLastTime` varchar(255) DEFAULT NULL COMMENT ‘最后登录时间‘, `userLastIp` varchar(255) DEFAULT NULL COMMENT ‘最后登录IP‘, `userCompany` varchar(255) DEFAULT NULL COMMENT ‘单位名称‘, `roleid` int(11) DEFAULT NULL, `field1` varchar(255) DEFAULT NULL COMMENT ‘备用字段1‘, `field2` varchar(255) DEFAULT NULL COMMENT ‘备用字段2‘, `field3` varchar(255) DEFAULT NULL COMMENT ‘备用字段3‘, `field4` varchar(255) DEFAULT NULL COMMENT ‘备用字段4‘, PRIMARY KEY (`id`), KEY `roleid` (`roleid`), CONSTRAINT `sys_user_ibfk_1` FOREIGN KEY (`roleid`) REFERENCES `sys_role` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of sys_user -- ---------------------------- INSERT INTO `sys_user` VALUES (‘1‘, ‘admin‘, ‘admin‘, ‘管理员‘, null, null, null, null, null, null, null, null, null, null, null);
通过Hibernate生产映射:
生成映射之后,在src目录下会有如下的包:
SysRole.java
package com.ssh.pojo; @SuppressWarnings("serial") public class SysRole implements java.io.Serializable { private Integer id; private String roleName; private Integer depart; private String roleNum; private String field1; private String field2; private String field3; private String field4; public SysRole() { } public SysRole(String roleName) { this.roleName = roleName; } public SysRole(String roleName, Integer depart, String roleNum, String field1, String field2, String field3, String field4) { this.roleName = roleName; this.depart = depart; this.roleNum = roleNum; this.field1 = field1; this.field2 = field2; this.field3 = field3; this.field4 = field4; } public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getRoleName() { return this.roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } public Integer getDepart() { return this.depart; } public void setDepart(Integer depart) { this.depart = depart; } public String getRoleNum() { return this.roleNum; } public void setRoleNum(String roleNum) { this.roleNum = roleNum; } public String getField1() { return this.field1; } public void setField1(String field1) { this.field1 = field1; } public String getField2() { return this.field2; } public void setField2(String field2) { this.field2 = field2; } public String getField3() { return this.field3; } public void setField3(String field3) { this.field3 = field3; } public String getField4() { return this.field4; } public void setField4(String field4) { this.field4 = field4; } }
SysUser.java
package com.ssh.pojo; @SuppressWarnings("serial") public class SysUser implements java.io.Serializable { private Integer id; private SysRole sysRole; private String userName; private String userPwd; private String userNike; private String userMail; private String userPhone; private String userTel; private String userLastTime; private String userLastIp; private String userCompany; private String field1; private String field2; private String field3; private String field4; public SysUser() { } public SysUser(String userName, String userPwd, String userNike) { this.userName = userName; this.userPwd = userPwd; this.userNike = userNike; } public SysUser(SysRole sysRole, String userName, String userPwd, String userNike, String userMail, String userPhone, String userTel, String userLastTime, String userLastIp, String userCompany, String field1, String field2, String field3, String field4) { this.sysRole = sysRole; this.userName = userName; this.userPwd = userPwd; this.userNike = userNike; this.userMail = userMail; this.userPhone = userPhone; this.userTel = userTel; this.userLastTime = userLastTime; this.userLastIp = userLastIp; this.userCompany = userCompany; this.field1 = field1; this.field2 = field2; this.field3 = field3; this.field4 = field4; } public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public SysRole getSysRole() { return this.sysRole; } public void setSysRole(SysRole sysRole) { this.sysRole = sysRole; } public String getUserName() { return this.userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPwd() { return this.userPwd; } public void setUserPwd(String userPwd) { this.userPwd = userPwd; } public String getUserNike() { return this.userNike; } public void setUserNike(String userNike) { this.userNike = userNike; } public String getUserMail() { return this.userMail; } public void setUserMail(String userMail) { this.userMail = userMail; } public String getUserPhone() { return this.userPhone; } public void setUserPhone(String userPhone) { this.userPhone = userPhone; } public String getUserTel() { return this.userTel; } public void setUserTel(String userTel) { this.userTel = userTel; } public String getUserLastTime() { return this.userLastTime; } public void setUserLastTime(String userLastTime) { this.userLastTime = userLastTime; } public String getUserLastIp() { return this.userLastIp; } public void setUserLastIp(String userLastIp) { this.userLastIp = userLastIp; } public String getUserCompany() { return this.userCompany; } public void setUserCompany(String userCompany) { this.userCompany = userCompany; } public String getField1() { return this.field1; } public void setField1(String field1) { this.field1 = field1; } public String getField2() { return this.field2; } public void setField2(String field2) { this.field2 = field2; } public String getField3() { return this.field3; } public void setField3(String field3) { this.field3 = field3; } public String getField4() { return this.field4; } public void setField4(String field4) { this.field4 = field4; } }
applicationContext-hibernate多出如下代码,用于让项目启动时加载到实体类
<property name="mappingResources"> <list> <value>com/ssh/pojo/SysRole.hbm.xml</value> <value>com/ssh/pojo/SysUser.hbm.xml</value></list> </property>
SysUserDAO.java
package com.ssh.dao; public interface SysUserDAO <K ,V>{ /** * 登录方法 * @param userName 用户名 * @param passWord 密码 * @return */ public V login(String userName,String passWord); }
在DAOImpl中要注入HibernateTemplate
因此ApplicationContext-hibernate.xml加入如下配置:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> <context:annotation-config></context:annotation-config> <context:component-scan base-package="com.ssh.dao.impl,com.ssh.service.impl"></context:component-scan> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/ssh"></property> <property name="username" value="root"></property> <property name="password" value="admin"></property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> </props> </property> <property name="mappingResources"> <list> <value>com/ssh/pojo/SysRole.hbm.xml</value> <value>com/ssh/pojo/SysUser.hbm.xml</value></list> </property> </bean> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean> </beans>
SysUserDAOImpl.java
package com.ssh.dao.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.ssh.dao.SysUserDAO; import com.ssh.pojo.SysUser; public class SysUserDAOImpl extends HibernateDaoSupport implements SysUserDAO<Integer, SysUser> { @Autowired public SysUserDAOImpl(HibernateTemplate hibernateTemplate){ super.setHibernateTemplate(hibernateTemplate); } /** * 登录 */ @SuppressWarnings("unchecked") public SysUser login(String userName, String passWord) { String hql = "FROM SysUser where userName = ? and userPwd = ?"; List<SysUser> list = super.getHibernateTemplate().find(hql , userName , passWord); if(list.size() > 0){ return list.get(0); }else{ return null; } } }
SysUserService.java
package com.ssh.service; import com.ssh.pojo.SysUser; public interface SysUserService { /** * 登录 * @param userName 用户名 * @param passWord 密码 * @return */ public SysUser login(String userName , String passWord); }
SysUserServiceImpl.java
package com.ssh.service.impl; import com.ssh.dao.SysUserDAO; import com.ssh.pojo.SysUser; import com.ssh.service.SysUserService; public class SysUserServiceImpl implements SysUserService { private SysUserDAO<Integer, SysUser> sysUserDAO; public SysUser login(String userName, String passWord) { return sysUserDAO.login(userName, passWord); } //通过set方法注入dao public void setSysUserDAO(SysUserDAO<Integer, SysUser> sysUserDAO) { this.sysUserDAO = sysUserDAO; } }
加入两个新的配置用来注入DAO和Service
applicationContext-action.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> <bean id="login" class="com.ssh.action.UserAction"> <property name="sysUserService" ref="sysUserService"></property> </bean> </beans>
applicationContext-service.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> <!-- 首字母不要大写,会报错 --> <bean id="sysUserDAO" class="com.ssh.dao.impl.SysUserDAOImpl"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="sysUserService" class="com.ssh.service.impl.SysUserServiceImpl"> <property name="sysUserDAO" ref="sysUserDAO"></property> </bean> </beans>
编写Action:
UserAction.java
package com.ssh.action; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; import com.ssh.pojo.SysUser; import com.ssh.service.SysUserService; @SuppressWarnings("serial") public class UserAction extends ActionSupport{ private HttpServletRequest request = ServletActionContext.getRequest(); private String userName; private String passWord; private SysUserService sysUserService; public String login(){ SysUser user = sysUserService.login(userName, passWord); if(user != null){ request.getSession().setAttribute("user", user); //登录成功之后将登录用户放入session return "success"; }else{ return "input"; //返回错误页 } } public void setSysUserService(SysUserService sysUserService) { this.sysUserService = sysUserService; } 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 HttpServletRequest getRequest() { return request; } public void setRequest(HttpServletRequest request) { this.request = request; } }
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>登录</title> </head> <body> <form action="login.action" method="post"> 用户名:<input name="userName" type="text" /> 密码:<input name="passWord" type="password" /> <input type="submit" value="login" /> </form> </body> </html>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> </head> <body> 欢迎${user.userNike}登录!!!<br> </body> </html>
Struts2+Spring3.1+Hibernate3.3的整个项目,布布扣,bubuko.com