说明:代码颜色为 #ff6600
一、软件要求:
Hibernate: Hibernate 3.6.6 Final 下载地址:http://sourceforge.net/projects/hibernate/files/hibernate3/
commons-pool-1.5.6-bin.zip 下载地址:http://commons.apache.org/pool/download_pool.cgi
commons-dbcp-1.4-bin.zip 下载地址:http://commons.apache.org/dbcp/download_dbcp.cgi
二、环境配置:
此篇文章接上两篇讲述内容继续讲述,实现Spring+Hibernate+Struts2整合使用,而关于Hibernate会在其它文章单独讲述。
1、解压文件:hibernate-distribution-3.6.6.Final.dist.zip, commons-dbcp-1.4-bin.zip,commons-pool-1.5.6-bin.zip
2、打开解压的文件夹,将下列jar文件放入/WEB-INF/lib目录下
hibernate3.jar
antlr-2.7.6.jar , commons-collections-3.1.jar, dom4j-1.6.1.jar, javassist-3.12.0.GA.jar , jta-1.1.jar, slf4j-api-1.6.1.jar,
hibernate-jpa-2.0-api-1.0.1.Final.jar
commons-dbcp-1.4.jar,commons-pool-1.5.6.jar
三、改进第二篇文件,以Spring+Struts2+Hibernate实现用户登录验证功能。
1、文件介绍
failure.jsp页面:若登录的用户名和密码不正确,所跳转到的错误页面。
com.test.dao.impl.UserDaoImpl.java类文件:处理用户登录提交的信息,本文主要的功能是查询用户登录的信息是否存在。
com.test.entity.User类文件:一个与user数据表对应的文件。
src/com/test/entity/User.hbm.xml文件:与com.test.entity.User同一个目录下。用于将com.test.entity.User与user数据表相映射。
2、基础工作
要用到数据表,就需要先建立数据库服务器,若已经安装好了MySql,先建立一个userdb数据库,在该数据库中建立一个user表。具体的设置请浏览一篇名为:《****》的文章。
该表中的字段是id,name,password。
3、步骤
a. 新建一个com.test.entity.User类。内容如下:
package com.test.entity;
/**
* 對應userdb數據庫的user表字段
* @author testlogin123
* @version 1.0.0
* date 2011/07/27
*/
public class User {
private int id;
private String name;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
b.在src/com/test/entity/目录下,新建User.hbm.xml文件,内容如下:
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.test.entity">
<class name="User" table="user">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="name" column="name"/>
<property name="password" column="password"/>
</class>
</hibernate-mapping>
c.新建com.test.dao.impl.UserDaoImpl类,内容如下:
package com.test.dao.impl;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.test.entity.User;
public class UserDaoImpl extends HibernateDaoSupport {
/**
* 驗證用戶登陸
*/
public List<User> loginUser(String name, String password) {
// TODO Auto-generated method stub
User user = new User();
user.setName(name);
user.setPassword(password);
return (List<User>) getHibernateTemplate().findByExample(user, 0, 1);
}
}
d.修改com.test.UserAction类,内容说明如下:
//增加了一个属性,类型为UserDaoImpl,
private UserDaoImpl userDaoImpl;
//userDaoImpl的gets,sets方法
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
//修改execute方法,该方法将调用UserDaoImpl.loginUser(String name,String password)方法;用于到用户点击登录提交按钮时,验证用户是否存在。
/**
* 驗證登陸
*/
public String execute() throws Exception {
List<User> listUser=this.getUserDao().loginUser(this.getUserName(),this.getUserPassword());
boolean bool=listUser.isEmpty();
if(bool){
//r若不存在该用户则跳转到failure指定的页面,这个failure要看struts.xml文件具体的配置。
return "failure";
}else{
this.setUserId(listUser.get(0).getId());
return SUCCESS;
}
}
e、打开/WEB-INF/applicationContext.xml文件,添加如下内容:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/userdb"></property>
<property name="username" value="root"></property>
<property name="password" value="mysql"></property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="mappingResources">
<list><value>com/test/entity/User.hbm.xml</value></list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="userDaoImpl" class="com.test.dao.impl.UserDaoImpl" >
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="login" class="com.test.UserAction">
<property name="userDaoImpl">
<ref bean="userDaoImpl"/>
</property>
</bean>
f.打开/src/struts.xml文件,做如下修改:
原来的内容:
<action name="login" class="loginSpring">
<result>/success.jsp</result>
</action>
修改后的内容:
<action name="login" class="login">
<result>/success.jsp</result>
<result name="failure">/failure.jsp</result>
</action>
g.新建一个登录失败页面/WebContent/failure.jsp。内容任意,内容不重要。目的是当登录失败后能够有这个页面可以跳转。
四、测试
在浏览器下,打开login.jsp页面,先输入一个数据表中不存在的用户名和密码,其应当是跳转到failure.jsp页面。再输入一个存在的用户名和密码,其应当是跳转到success.jsp页面下。