整合SSH--登陆注册
2009-05-07 12:34
483 查看
//数据库映射 Hibernate和Spring整合
//1.bean
package org.yeeku.model;
import java.io.Serializable;
public class User implements Serializable
{
private int
id;
private
String user;
private
String pass;
private
String email;
public void
setId(int id)
{
this.id
= id;
}
public int
getId()
{
return this.id;
}
public void
setUser(String user)
{
this.user
= user;
}
public String
getUser()
{
return this.user;
}
public void
setPass(String pass)
{
this.pass
= pass;
}
public String
getPass()
{
return this.pass;
}
public void
setEmail(String email)
{
this.email
= email;
}
public String
getEmail()
{
return this.email;
}
}
//2.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate
Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<hibernate-mapping
package="org.yeeku.model">
<class
name="User" table="user_tabler">
<id name="id"
column="user_id">
<generator
class="identity"/>
</id>
<property
name="user" column="user_name" not-null="true"
length="50" unique="true"/>
<property
name="pass" column="user_pass" not-null="true"
length="50"/>
<property
name="email" length="100"/>
</class>
</hibernate-mapping>
//3.applicationContext.xml
<?xml version="1.0"
encoding="GBK"?>
<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.xsd">
<!-- 定义数据源Bean,使用C3P0数据源实现 -->
<bean
id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<!--
指定连接数据库的驱动 -->
<property
name="driverClass" valu
1f494
e="com.mysql.jdbc.Driver"/>
<!--
指定连接数据库的URL -->
<property
name="jdbcUrl"
value="jdbc:mysql://localhost/reg_login"/>
<!--
指定连接数据库的用户名 -->
<property
name="user" value="root"/>
<!--
指定连接数据库的密码 -->
<property
name="password" value="root"/>
<!--
指定连接数据库连接池的最大连接数 -->
<property
name="maxPoolSize" value="20"/>
<!--
指定连接数据库连接池的最小连接数 -->
<property
name="minPoolSize" value="1"/>
<!--
指定连接数据库连接池的初始化连接数 -->
<property
name="initialPoolSize" value="1"/>
<!--
指定连接数据库连接池的连接的最大空闲时间 -->
<property
name="maxIdleTime" value="20"/>
</bean>
<!--定义了Hibernate的SessionFactory
-->
<bean
id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>org/yeeku/model/User.hbm.xml</value>
</list>
</property>
</bean>
</beans>
//4.web.xml
<?xml version="1.0"
encoding="GBK"?>
<web-app 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"
version="2.4">
<!-- 用于初始化Spring容器的Listener
-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
//添加底层和逻辑层
//5底层DAO interface
package org.yeeku.dao;
import java.util.List;
import org.yeeku.model.*;
public interface UserDao {
/**
* 根据id查找用户
* @param id 需要查找的种类id
*/
User get(int
id);
/**
* 增加种类
* @param user 需要增加的种类
*/
void save(User
user);
/**
* 修改用户
* @param user 需要修改的用户
*/
void
update(User user);
/**
* 删除用户
* @param id 需要删除的用户id
*/
void delete(int
id);
/**
* 删除用户
* @param user 需要删除的用户
*/
void
delete(User user);
/**
* 查询全部用户
* @return 获得全部用户
*/
List<User> findAll();
/**
* 根据用户名,密码查找用户
* @param user 查询所需的用户名
* @param pass 查询所需的密码
* @return 对应的用户
*/
User
findUserByNameAndPass(String user , String pass);
/**
* 根据用户名查找用户
* @param user 查询所需的用户名
* @return 对应的用户
*/
User
findUserByName(String user);
}
//6底层DAO impl
package org.yeeku.dao.hibernate;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.yeeku.model.*;
import org.yeeku.dao.*;
public class UserDaoHibernate extends HibernateDaoSupport
implements UserDao
{
/**
* 根据id查找用户
* @param id 需要查找的用户id
*/
public User
get(int id){
return
(User)getHibernateTemplate().get(User.class , id);
}
/**
* 增加用户
* @param user 需要增加的用户
*/
public void
save(User user){
getHibernateTemplate().save(user);
}
/**
* 修改用户
* @param user 需要修改的用户
*/
public void
update(User user){
getHibernateTemplate().saveOrUpdate(user);
}
/**
* 删除用户
* @param id 需要删除的用户id
*/
public void
delete(int id){
getHibernateTemplate().delete(getHibernateTemplate().get(User.class ,
id));
}
/**
* 删除用户
* @param user 需要删除的用户
*/
public void
delete(User user){
getHibernateTemplate().delete(user);
}
/**
* 查询全部用户
* @return 获得全部用户
*/
public
List<User> findAll(){
return
(List<User>)getHibernateTemplate().find("from User");
}
/**
* 根据用户名,密码查找用户
* @param
username 查询所需的用户名
* @param pass 查询所需的密码
* @return 对应的用户
*/
public User
findUserByNameAndPass(String user , String pass){
List ul =
getHibernateTemplate().find("from User au where au.user = ? and au.pass =
?" , new String[]{user , pass});
if (ul !=
null && ul.size() >= 1){
return
(User)ul.get(0);
}
return
null;
}
/**
* 根据用户名查找用户
* @param user 查询所需的用户名
* @return 对应的用户
*/
public User
findUserByName(String user){
List ul =
getHibernateTemplate().find("from User au where au.user = ?" , user);
if (ul !=
null && ul.size() >= 1){
return
(User)ul.get(0);
}
return
null;
}
}
//7逻辑层Service interface
package org.yeeku.service;
import java.util.List;
import org.yeeku.dao.*;
public interface UserManager{
/**
* 新增用户
* @param user 新增用户的用户名
* @param pass 新增用户的密码
* @param email
新增用户的电子邮件
* @return 新增用户的主键
*/
int
addUser(String user , String pass , String email)
throws
Exception;
/**
* 验证用户登陆
* @param user 需要登陆的用户名
* @param pass 需要登陆的密码
* @return 是否登陆成功
*/
int
loginValid(String user , String pass)
throws
Exception;
/**
* 验证用户名是否可用,如果系统中已有该用户名,则不可用。
* @param user 需要验证的用户名
* @return 用户名是否可用
*/
boolean
validateName(String user)
throws
Exception;
}
//8逻辑层Service impl
package org.yeeku.service.impl;
import org.yeeku.dao.*;
import org.yeeku.model.*;
import org.yeeku.service.UserManager;
public class UserManagerImpl implements UserManager{
private
UserDao userDao;
public void
setUserDao(UserDao userDao){
this.userDao
= userDao;
}
/**
* 新增用户
* @param user 新增用户的用户名
* @param pass 新增用户的密码
* @param email
新增用户的电子邮件
* @return 新增用户的主键
*/
public int
addUser(String user , String pass , String email) throws Exception{
try{
User
u = new User();
u.setUser(user);
u.setPass(pass);
u.setEmail(email);
userDao.save(u);
return
u.getId();
}catch
(Exception e){
e.printStackTrace();
throw
new Exception("新增用户时出现异常");
}
}
/**
* 验证用户登陆
* @param user 需要登陆的用户名
* @param pass 需要登陆的密码
* @return 是否登陆成功
*/
public int
loginValid(String user , String pass) throws Exception{
try{
User
u = userDao.findUserByNameAndPass(user , pass);
if
(u != null){
return
u.getId();
}
}catch
(Exception e){
e.printStackTrace();
throw
new Exception("验证用户登陆时出现异常");
}
return
-1;
}
/**
* 验证用户名是否可用,如果系统中已有该用户名,则不可用。
* @param user 需要验证的用户名
* @return 用户名是否可用
*/
public
boolean validateName(String user) throws Exception{
try{
if
(userDao.findUserByName(user) == null){
return
true;
}
return
false;
}catch
(Exception e){
throw
new Exception("验证用户名是否有效出错!");
}
}
}
//Struts2和Spring整合 逻辑层和spring整合
//9实现ICO容器,将dao层注入到Service层,将Service层以mgr名放入Spring容器
<?xml version="1.0"
encoding="GBK"?>
<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.xsd">
<!-- 定义数据源Bean,使用C3P0数据源实现 -->
<bean
id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<!--
指定连接数据库的驱动 -->
<property
name="driverClass" value="com.mysql.jdbc.Driver"/>
<!--
指定连接数据库的URL -->
<property
name="jdbcUrl" value="jdbc:mysql://localhost/reg_login"/>
<!--
指定连接数据库的用户名 -->
<property
name="user" value="root"/>
<!--
指定连接数据库的密码 -->
<property
name="password" value="root"/>
<!--
指定连接数据库连接池的最大连接数 -->
<property
name="maxPoolSize" value="20"/>
<!--
指定连接数据库连接池的最小连接数 -->
<property
name="minPoolSize" value="1"/>
<!--
指定连接数据库连接池的初始化连接数 -->
<property
name="initialPoolSize" value="1"/>
<!--
指定连接数据库连接池的连接的最大空闲时间 -->
<property
name="maxIdleTime" value="20"/>
</bean>
<!--定义了Hibernate的SessionFactory
-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>org/yeeku/model/User.hbm.xml</value>
</list>
</property>
</bean>
<!-- 事务管理器 -->
<bean
id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory"
ref="sessionFactory"/>
</bean>
<!-- 事务拦截器 -->
<bean
id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!--
事务拦截器bean需要依赖注入一个事务管理器 -->
<property name="transactionManager"
ref="transactionManager"/>
<property
name="transactionAttributes">
<!--
下面定义事务传播属性-->
<props>
<prop
key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop
key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义BeanNameAutoProxyCreator-->
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!--
指定对满足哪些bean name的bean自动生成业务代理 -->
<property name="beanNames">
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<value>mgr</value>
</list>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<!-- 此处可增加其他新的Interceptor -->
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<bean
id="mgr" class="org.yeeku.service.impl.UserManagerImpl">
<property name="userDao" ref="userDao"/>
</bean>
<bean
id="userDao"
class="org.yeeku.dao.hibernate.UserDaoHibernate">
<property
name="sessionFactory" ref="sessionFactory"/>
</bean>
</beans>
//Struts2和Spring整合 应用层和spring整合
//10.JSP登陆页面
<%@ page contentType="text/html;
charset=GBK"%>
<%@taglib prefix="s"
uri="/struts-tags"%>
<html>
<head>
<title>用户登陆</title>
</head>
<body>
<center>
<h3>请输入用户名和密码来登陆</h3>
如果还没有注册,单击此处<a href="Regist.jsp">注册</a>
<s:actionerror/>
<s:form
action="Login.action">
<s:textfield
name="user" label="用户名"/>
<s:textfield
name="pass" label="密码"/>
<s:submit
value="登陆"/>
</s:form>
</center>
</body>
</html>
//11.加载Struts2
<?xml version="1.0"
encoding="GBK"?>
<web-app
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"
version="2.4">
<!-- 用于初始化Spring容器的Listener -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<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>
<welcome-file-list>
<welcome-file>Login.jsp</welcome-file>
</welcome-file-list>
</web-app>
//12从容器中取出名为mgr的Service
package org.yeeku.action.base;
import com.opensymphony.xwork2.ActionSupport;
import org.yeeku.service.UserManager;
public class BaseAction extends ActionSupport
{
protected UserManager
mgr;
public void
setMgr(UserManager mgr)
{
this.mgr =
mgr;
}
}
//13登陆的action 继承取出Service在BaseAction类来调用mgr
package org.yeeku.action;
import com.opensymphony.xwork2.ActionContext;
import java.util.*;
import org.yeeku.action.base.BaseAction;
public class LoginAction extends BaseAction
{
private
String user;
private
String pass;
public String
execute() throws Exception
{
if (null !=
user && null != pass)
{
int
userId = mgr.loginValid(user , pass);
if
(userId > 0){
return "input";
}
else{
addActionError("用户名/密码不匹配");
}
}
else{
addActionError("验证码不匹配,请重新输入");
}
return
"failure";
}
public void
setUser(String user)
{
this.user
= user;
}
public String
getUser()
{
return this.user;
}
public void
setPass(String pass)
{
this.pass
= pass;
}
public String
getPass()
{
return this.pass;
}
}
//14success.jsp
<%@ page contentType="text/html;
charset=utf-8"%>
<%@taglib prefix="s"
uri="/struts-tags"%>
<html>
<head>
<title>注册/登陆成功</title>
</style>
</head>
<body>
<center>
注册/登陆成功<br>
</center>
</body>
</html>
//15error.jsp
<%@ page contentType="text/html;
charset=GBK"%>
<%@taglib prefix="s"
uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
<html>
<head>
<title>出错提示页</title>
</style>
</head>
<body>
<TABLE width="780" align="center"
CELLSPACING=0 background="images/bodybg.jpg">
<tr>
<td
height="39" valign=top>
<br><div
align="center"><font color="#FF0000"
size="+1"><b>系统处理过程中发生了一个错误,信息如下:</b></font></div>
</td>
</tr>
<tr>
<td
height="100" valign=top>
<s:property
value="exception.message"/>
<span
style="color:red;font:9pt bold"><s:property
value="exception.message"/></span>
</td>
</tr>
<tr>
<td
valign=top><div align="center" style="font:10pt">请您先核对输入,如果再次出现该错误,请与站长联系。kongyeeku@163.com 谢谢。</div><br></td>
</tr>
</table>
</body>
</html>
//16注册的页面
<%@ page contentType="text/html;
charset=GBK"%>
<%@taglib prefix="s"
uri="/struts-tags"%>
<html>
<head>
<title>用户注册</title>
</head>
<body>
<center>
<h3>请输入注册信息</h3>
<s:actionerror/>
<s:form
action="Regist.action">
<s:textfield
name="user" label="用户名"/>
<s:textfield
name="pass" label="密码"/>
<s:textfield
name="email" label="电邮"/>
<s:submit
value="注册"/>
</s:form>
</center>
</body>
</html>
//17注册的action 继承取出Service在BaseAction类来调用mgr
package org.yeeku.action;
import com.opensymphony.xwork2.ActionContext;
import java.util.*;
import org.yeeku.action.base.BaseAction;
public class RegistAction extends BaseAction
{
private
String user;
private
String pass;
private
String email;
public String
execute() throws Exception
{
if (null !=
user && null != pass){
if
(mgr.addUser(user, pass , email) > 0){
return
"input";
}else{
addActionError("注册失败,请重试!");
return
"failure";
}
}
else{
addActionError("验证码不匹配,请重新输入");
}
return
"failure";
}
public void
setUser(String user)
{
this.user
= user;
}
public String
getUser()
{
return this.user;
}
public void
setPass(String pass)
{
this.pass
= pass;
}
public String
getPass()
{
return this.pass;
}
public void
setEmail(String email)
{
this.email
= email;
}
public String
getEmail()
{
return this.email;
}
}
//18struts.xml
<?xml version="1.0"
encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package
name="lee" extends="struts-default">
<action
name="Login" class="org.yeeku.action.LoginAction">
<result
name="input">/success.jsp</result>
<result
name="failure">/error.jsp</result>
</action>
<action
name="Regist" class="org.yeeku.action.RegistAction">
<result
name="input">/success.jsp</result>
<result
name="failure">/error.jsp</result>
</action>
</package>
</struts>
//1.bean
package org.yeeku.model;
import java.io.Serializable;
public class User implements Serializable
{
private int
id;
private
String user;
private
String pass;
private
String email;
public void
setId(int id)
{
this.id
= id;
}
public int
getId()
{
return this.id;
}
public void
setUser(String user)
{
this.user
= user;
}
public String
getUser()
{
return this.user;
}
public void
setPass(String pass)
{
this.pass
= pass;
}
public String
getPass()
{
return this.pass;
}
public void
setEmail(String email)
{
this.email
= email;
}
public String
getEmail()
{
return this.email;
}
}
//2.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate
Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<hibernate-mapping
package="org.yeeku.model">
<class
name="User" table="user_tabler">
<id name="id"
column="user_id">
<generator
class="identity"/>
</id>
<property
name="user" column="user_name" not-null="true"
length="50" unique="true"/>
<property
name="pass" column="user_pass" not-null="true"
length="50"/>
<property
name="email" length="100"/>
</class>
</hibernate-mapping>
//3.applicationContext.xml
<?xml version="1.0"
encoding="GBK"?>
<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.xsd">
<!-- 定义数据源Bean,使用C3P0数据源实现 -->
<bean
id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<!--
指定连接数据库的驱动 -->
<property
name="driverClass" valu
1f494
e="com.mysql.jdbc.Driver"/>
<!--
指定连接数据库的URL -->
<property
name="jdbcUrl"
value="jdbc:mysql://localhost/reg_login"/>
<!--
指定连接数据库的用户名 -->
<property
name="user" value="root"/>
<!--
指定连接数据库的密码 -->
<property
name="password" value="root"/>
<!--
指定连接数据库连接池的最大连接数 -->
<property
name="maxPoolSize" value="20"/>
<!--
指定连接数据库连接池的最小连接数 -->
<property
name="minPoolSize" value="1"/>
<!--
指定连接数据库连接池的初始化连接数 -->
<property
name="initialPoolSize" value="1"/>
<!--
指定连接数据库连接池的连接的最大空闲时间 -->
<property
name="maxIdleTime" value="20"/>
</bean>
<!--定义了Hibernate的SessionFactory
-->
<bean
id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>org/yeeku/model/User.hbm.xml</value>
</list>
</property>
</bean>
</beans>
//4.web.xml
<?xml version="1.0"
encoding="GBK"?>
<web-app 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"
version="2.4">
<!-- 用于初始化Spring容器的Listener
-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
//添加底层和逻辑层
//5底层DAO interface
package org.yeeku.dao;
import java.util.List;
import org.yeeku.model.*;
public interface UserDao {
/**
* 根据id查找用户
* @param id 需要查找的种类id
*/
User get(int
id);
/**
* 增加种类
* @param user 需要增加的种类
*/
void save(User
user);
/**
* 修改用户
* @param user 需要修改的用户
*/
void
update(User user);
/**
* 删除用户
* @param id 需要删除的用户id
*/
void delete(int
id);
/**
* 删除用户
* @param user 需要删除的用户
*/
void
delete(User user);
/**
* 查询全部用户
* @return 获得全部用户
*/
List<User> findAll();
/**
* 根据用户名,密码查找用户
* @param user 查询所需的用户名
* @param pass 查询所需的密码
* @return 对应的用户
*/
User
findUserByNameAndPass(String user , String pass);
/**
* 根据用户名查找用户
* @param user 查询所需的用户名
* @return 对应的用户
*/
User
findUserByName(String user);
}
//6底层DAO impl
package org.yeeku.dao.hibernate;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.yeeku.model.*;
import org.yeeku.dao.*;
public class UserDaoHibernate extends HibernateDaoSupport
implements UserDao
{
/**
* 根据id查找用户
* @param id 需要查找的用户id
*/
public User
get(int id){
return
(User)getHibernateTemplate().get(User.class , id);
}
/**
* 增加用户
* @param user 需要增加的用户
*/
public void
save(User user){
getHibernateTemplate().save(user);
}
/**
* 修改用户
* @param user 需要修改的用户
*/
public void
update(User user){
getHibernateTemplate().saveOrUpdate(user);
}
/**
* 删除用户
* @param id 需要删除的用户id
*/
public void
delete(int id){
getHibernateTemplate().delete(getHibernateTemplate().get(User.class ,
id));
}
/**
* 删除用户
* @param user 需要删除的用户
*/
public void
delete(User user){
getHibernateTemplate().delete(user);
}
/**
* 查询全部用户
* @return 获得全部用户
*/
public
List<User> findAll(){
return
(List<User>)getHibernateTemplate().find("from User");
}
/**
* 根据用户名,密码查找用户
* @param
username 查询所需的用户名
* @param pass 查询所需的密码
* @return 对应的用户
*/
public User
findUserByNameAndPass(String user , String pass){
List ul =
getHibernateTemplate().find("from User au where au.user = ? and au.pass =
?" , new String[]{user , pass});
if (ul !=
null && ul.size() >= 1){
return
(User)ul.get(0);
}
return
null;
}
/**
* 根据用户名查找用户
* @param user 查询所需的用户名
* @return 对应的用户
*/
public User
findUserByName(String user){
List ul =
getHibernateTemplate().find("from User au where au.user = ?" , user);
if (ul !=
null && ul.size() >= 1){
return
(User)ul.get(0);
}
return
null;
}
}
//7逻辑层Service interface
package org.yeeku.service;
import java.util.List;
import org.yeeku.dao.*;
public interface UserManager{
/**
* 新增用户
* @param user 新增用户的用户名
* @param pass 新增用户的密码
* @param email
新增用户的电子邮件
* @return 新增用户的主键
*/
int
addUser(String user , String pass , String email)
throws
Exception;
/**
* 验证用户登陆
* @param user 需要登陆的用户名
* @param pass 需要登陆的密码
* @return 是否登陆成功
*/
int
loginValid(String user , String pass)
throws
Exception;
/**
* 验证用户名是否可用,如果系统中已有该用户名,则不可用。
* @param user 需要验证的用户名
* @return 用户名是否可用
*/
boolean
validateName(String user)
throws
Exception;
}
//8逻辑层Service impl
package org.yeeku.service.impl;
import org.yeeku.dao.*;
import org.yeeku.model.*;
import org.yeeku.service.UserManager;
public class UserManagerImpl implements UserManager{
private
UserDao userDao;
public void
setUserDao(UserDao userDao){
this.userDao
= userDao;
}
/**
* 新增用户
* @param user 新增用户的用户名
* @param pass 新增用户的密码
* @param email
新增用户的电子邮件
* @return 新增用户的主键
*/
public int
addUser(String user , String pass , String email) throws Exception{
try{
User
u = new User();
u.setUser(user);
u.setPass(pass);
u.setEmail(email);
userDao.save(u);
return
u.getId();
}catch
(Exception e){
e.printStackTrace();
throw
new Exception("新增用户时出现异常");
}
}
/**
* 验证用户登陆
* @param user 需要登陆的用户名
* @param pass 需要登陆的密码
* @return 是否登陆成功
*/
public int
loginValid(String user , String pass) throws Exception{
try{
User
u = userDao.findUserByNameAndPass(user , pass);
if
(u != null){
return
u.getId();
}
}catch
(Exception e){
e.printStackTrace();
throw
new Exception("验证用户登陆时出现异常");
}
return
-1;
}
/**
* 验证用户名是否可用,如果系统中已有该用户名,则不可用。
* @param user 需要验证的用户名
* @return 用户名是否可用
*/
public
boolean validateName(String user) throws Exception{
try{
if
(userDao.findUserByName(user) == null){
return
true;
}
return
false;
}catch
(Exception e){
throw
new Exception("验证用户名是否有效出错!");
}
}
}
//Struts2和Spring整合 逻辑层和spring整合
//9实现ICO容器,将dao层注入到Service层,将Service层以mgr名放入Spring容器
<?xml version="1.0"
encoding="GBK"?>
<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.xsd">
<!-- 定义数据源Bean,使用C3P0数据源实现 -->
<bean
id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<!--
指定连接数据库的驱动 -->
<property
name="driverClass" value="com.mysql.jdbc.Driver"/>
<!--
指定连接数据库的URL -->
<property
name="jdbcUrl" value="jdbc:mysql://localhost/reg_login"/>
<!--
指定连接数据库的用户名 -->
<property
name="user" value="root"/>
<!--
指定连接数据库的密码 -->
<property
name="password" value="root"/>
<!--
指定连接数据库连接池的最大连接数 -->
<property
name="maxPoolSize" value="20"/>
<!--
指定连接数据库连接池的最小连接数 -->
<property
name="minPoolSize" value="1"/>
<!--
指定连接数据库连接池的初始化连接数 -->
<property
name="initialPoolSize" value="1"/>
<!--
指定连接数据库连接池的连接的最大空闲时间 -->
<property
name="maxIdleTime" value="20"/>
</bean>
<!--定义了Hibernate的SessionFactory
-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>org/yeeku/model/User.hbm.xml</value>
</list>
</property>
</bean>
<!-- 事务管理器 -->
<bean
id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory"
ref="sessionFactory"/>
</bean>
<!-- 事务拦截器 -->
<bean
id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!--
事务拦截器bean需要依赖注入一个事务管理器 -->
<property name="transactionManager"
ref="transactionManager"/>
<property
name="transactionAttributes">
<!--
下面定义事务传播属性-->
<props>
<prop
key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop
key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义BeanNameAutoProxyCreator-->
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!--
指定对满足哪些bean name的bean自动生成业务代理 -->
<property name="beanNames">
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<value>mgr</value>
</list>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<!-- 此处可增加其他新的Interceptor -->
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<bean
id="mgr" class="org.yeeku.service.impl.UserManagerImpl">
<property name="userDao" ref="userDao"/>
</bean>
<bean
id="userDao"
class="org.yeeku.dao.hibernate.UserDaoHibernate">
<property
name="sessionFactory" ref="sessionFactory"/>
</bean>
</beans>
//Struts2和Spring整合 应用层和spring整合
//10.JSP登陆页面
<%@ page contentType="text/html;
charset=GBK"%>
<%@taglib prefix="s"
uri="/struts-tags"%>
<html>
<head>
<title>用户登陆</title>
</head>
<body>
<center>
<h3>请输入用户名和密码来登陆</h3>
如果还没有注册,单击此处<a href="Regist.jsp">注册</a>
<s:actionerror/>
<s:form
action="Login.action">
<s:textfield
name="user" label="用户名"/>
<s:textfield
name="pass" label="密码"/>
<s:submit
value="登陆"/>
</s:form>
</center>
</body>
</html>
//11.加载Struts2
<?xml version="1.0"
encoding="GBK"?>
<web-app
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"
version="2.4">
<!-- 用于初始化Spring容器的Listener -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<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>
<welcome-file-list>
<welcome-file>Login.jsp</welcome-file>
</welcome-file-list>
</web-app>
//12从容器中取出名为mgr的Service
package org.yeeku.action.base;
import com.opensymphony.xwork2.ActionSupport;
import org.yeeku.service.UserManager;
public class BaseAction extends ActionSupport
{
protected UserManager
mgr;
public void
setMgr(UserManager mgr)
{
this.mgr =
mgr;
}
}
//13登陆的action 继承取出Service在BaseAction类来调用mgr
package org.yeeku.action;
import com.opensymphony.xwork2.ActionContext;
import java.util.*;
import org.yeeku.action.base.BaseAction;
public class LoginAction extends BaseAction
{
private
String user;
private
String pass;
public String
execute() throws Exception
{
if (null !=
user && null != pass)
{
int
userId = mgr.loginValid(user , pass);
if
(userId > 0){
return "input";
}
else{
addActionError("用户名/密码不匹配");
}
}
else{
addActionError("验证码不匹配,请重新输入");
}
return
"failure";
}
public void
setUser(String user)
{
this.user
= user;
}
public String
getUser()
{
return this.user;
}
public void
setPass(String pass)
{
this.pass
= pass;
}
public String
getPass()
{
return this.pass;
}
}
//14success.jsp
<%@ page contentType="text/html;
charset=utf-8"%>
<%@taglib prefix="s"
uri="/struts-tags"%>
<html>
<head>
<title>注册/登陆成功</title>
</style>
</head>
<body>
<center>
注册/登陆成功<br>
</center>
</body>
</html>
//15error.jsp
<%@ page contentType="text/html;
charset=GBK"%>
<%@taglib prefix="s"
uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
<html>
<head>
<title>出错提示页</title>
</style>
</head>
<body>
<TABLE width="780" align="center"
CELLSPACING=0 background="images/bodybg.jpg">
<tr>
<td
height="39" valign=top>
<br><div
align="center"><font color="#FF0000"
size="+1"><b>系统处理过程中发生了一个错误,信息如下:</b></font></div>
</td>
</tr>
<tr>
<td
height="100" valign=top>
<s:property
value="exception.message"/>
<span
style="color:red;font:9pt bold"><s:property
value="exception.message"/></span>
</td>
</tr>
<tr>
<td
valign=top><div align="center" style="font:10pt">请您先核对输入,如果再次出现该错误,请与站长联系。kongyeeku@163.com 谢谢。</div><br></td>
</tr>
</table>
</body>
</html>
//16注册的页面
<%@ page contentType="text/html;
charset=GBK"%>
<%@taglib prefix="s"
uri="/struts-tags"%>
<html>
<head>
<title>用户注册</title>
</head>
<body>
<center>
<h3>请输入注册信息</h3>
<s:actionerror/>
<s:form
action="Regist.action">
<s:textfield
name="user" label="用户名"/>
<s:textfield
name="pass" label="密码"/>
<s:textfield
name="email" label="电邮"/>
<s:submit
value="注册"/>
</s:form>
</center>
</body>
</html>
//17注册的action 继承取出Service在BaseAction类来调用mgr
package org.yeeku.action;
import com.opensymphony.xwork2.ActionContext;
import java.util.*;
import org.yeeku.action.base.BaseAction;
public class RegistAction extends BaseAction
{
private
String user;
private
String pass;
private
String email;
public String
execute() throws Exception
{
if (null !=
user && null != pass){
if
(mgr.addUser(user, pass , email) > 0){
return
"input";
}else{
addActionError("注册失败,请重试!");
return
"failure";
}
}
else{
addActionError("验证码不匹配,请重新输入");
}
return
"failure";
}
public void
setUser(String user)
{
this.user
= user;
}
public String
getUser()
{
return this.user;
}
public void
setPass(String pass)
{
this.pass
= pass;
}
public String
getPass()
{
return this.pass;
}
public void
setEmail(String email)
{
this.email
= email;
}
public String
getEmail()
{
return this.email;
}
}
//18struts.xml
<?xml version="1.0"
encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package
name="lee" extends="struts-default">
<action
name="Login" class="org.yeeku.action.LoginAction">
<result
name="input">/success.jsp</result>
<result
name="failure">/error.jsp</result>
</action>
<action
name="Regist" class="org.yeeku.action.RegistAction">
<result
name="input">/success.jsp</result>
<result
name="failure">/error.jsp</result>
</action>
</package>
</struts>
相关文章推荐
- SSH整合Demo——完成登录注册
- SSH整合之架构的历史---用户注册
- 简单的SSH整合登录注册
- SSH(struts+spring+hibernate)迅速开发--第六章 用户登陆和注册(4)
- ssh_crm:用户注册、登陆校验拦截器、员工拜访客户功能
- SSH(struts+spring+hibernate)迅速开发--第六章 用户登陆和注册(5)
- Shiro整合SSH开发2:结合Struts2实现登陆和退出以及Shiro执行流程和原理解析
- IDEA 下写出第一个 SSH 整合框架练手项目(二,整合SSH及登陆页面的完成)
- phpcms和discuz整合论坛实现同步注册登陆退出论坛,所以问题都已经测试了,全部OK!
- 关于discuz nt登陆 注册 登陆 的整合
- 【Struts2+Hibernate3+Spring3】利用SSH整合,完成打印用户表,用户登录、注册、修改密码系统
- SSH(struts+spring+hibernate)迅速开发--第六章 用户登陆和注册(6)
- 网站与discuz的论坛进行整合,实现用户同步注册,单点登陆,同步删除用户,同步修改用户密码
- SSH(struts+spring+hibernate)迅速开发--第六章 用户登陆和注册(7)
- 简单的SSH整合登录注册
- 【Struts2+Hibernate3+Spring3】利用SSH整合,完成打印用户表,用户登录、注册、修改密码系统
- 网站与discuz的论坛进行整合,实现用户同步注册,单点登陆,同步删除用户,同步修改用户密码
- 简单的SSH整合登录注册
- SSH整合教程(struts2+spring3+hibernate3)(含登陆示例)
- ssh整合问题总结--使用struts2+Ajax+jquery验证用户名是否已被注册