您的位置:首页 > 编程语言 > Java开发

整合SSH--登陆注册

2009-05-07 12:34 483 查看
//数据库映射 HibernateSpring整合
//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从容器中取出名为mgrService
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 继承取出ServiceBaseAction类来调用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 继承取出ServiceBaseAction类来调用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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐