一、简介:用户登录模块,用户输入用户名和密码,对其身份进行验证
二、简单思路和方法(基于Java ssh框架实现)
1、先在数据库中创建相应的表(我用的是MySQL数据库)
设计个Userinfo表,存放用户的用户名、登录密码和用户信息
create table userinfo
(
id int(11) primary key,
username varchar2(50) not null,
password varchar2(50) not null,
real_name varchar2(10) not null,
birthday varchar2(40),
e_mail varchar2(40),
address varchar2(50)
);
2、用Myeclipse的hibernate生成Javabean:UserInfo.java和对应的配置文件UserInfo.hbm.xml文件(自带的逆向工具)(必须在同一个包下)
UserInfo.java代码
public class UserInfo {
private int id;
private String username;
private String password;
private String real_name;
private String birthday;
private String e_mail;
private String address;
//默认的构造方法
public UserInfo() {
}
// 方便测试用
public UserInfo(String username, String password, String real_name,String birthday,String e_mail,String address) {
this.username = username;
....
}
//省略成员变量的set和get方法
}
UserInfo.hbm.xml代码
<hibernate-mapping>
<class name="com.bean.UserInfo" table="userinfo">
<!--id 数据库主键-->
<id name="id" type="int" column="Id">
<generator class="native"/><!--native主键自增长-->
</id>
<property name="username" type="java.lang.String" column="username"/>
<property name="password" type="java.lang.String" column="password"/>
<!--其他属性省略-->
</class>
</hibernate-mapping>
3、创建UserInfoServiceDAO接口
public interface UserInfoServiceDAO {
public UserInfo loginUser(User user);//通过页面传值进行数据库验证
//这里的user只封装两个值,用户名和密码;user是封装了用户名和密码两个属性进行查询
public boolean updatePwd(UserInfo userInfo);//进行用户数据的更新
/*
*添加新用户,删除就用户等略,自行添加
*/
}
4、创建UserInfoServiceDAOImpl实现类
实现UserInfoServiceDAO的方法
public class UserInfoServiceDAOImpl implements UserInfoServiceDAO {
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
// 查询数据库中是否有该用户 返回数据库查询的整条信息
@Override
public UserInfo loginUser(User user) {
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Query query = session
.createQuery("from UserInfo as u where u.username='"
+ user.getUsername() + "' and u.password='"
+ user.getPwd() + "'");
List<UserInfo> list = query.list();
//if检查是否查到数据,如果长度为0(list.size()为0),则未查到信息
if (list.size() != 0) {
UserInfo userInfo1 = list.get(0);
transaction.commit();
session.close();
return userInfo1;
} else {
transaction.commit();
session.close();
return null;
}
}
//进行用户数据的更新
@Override
public boolean updatePwd(UserInfo userInfo) {
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
session.saveOrUpdate(userInfo);
transaction.commit();
session.close();
return true;
}
}
5、编写action动作代码:UserInfoAction.java
只有验证用户登录和更新action动作,其他功能略
//User只有username和pwd属性
//ModelDriven<User>前台传值的一个接口
public class UserAction extends ActionSupport implements ModelDriven<User> {
private User user = new User();
private UserInfoServiceDAO userInfoServiceDAOImpl;
//省略get、set方法
/*
*1、execute()继承ActionSupport,重写
*2、logOut()用户注销
*/
@Override//用户登录
public String execute() throws Exception {
Map session = (Map) ActionContext.getContext().getSession();
UserInfo userInfo = userInfoServiceDAOImpl.loginUser(user);
if (user.getUsername() == null&&userInfo==null){
this.addActionMessage("用户名或密码不正确");
return ERROR;
}else{
session.put("userInfo", userInfo);// session.put("key",value);
return SUCCESS;
}
}
//用户注销
public String logOut() throws Exception {
Map session = (Map) ActionContext.getContext().getSession();
session.remove("userLogin");
return SUCCESS;
}
}
6、applicationContext.xml修改(驱动一般也需要添加)
spring依赖注入
<bean id="userInfoServiceDAOImpl" class="com.dao.impl.UserInfoServiceDAOImpl">
<property name="sessionFactory" ref="sessionFactory">
</property>
</bean>
<bean id="userAction" class="com.action.UserAction">
<property name="userInfoServiceDAOImpl" ref="userInfoServiceDAOImpl" />
</bean>
7、struts.xml部分添加,action属性和result返回
<!--
1、index.jsp首页:登录成功返回首页
2、error.jsp登录错误界面:如果用JavaScript可以不用这个。未输入用户名或未在数据库查询到信息
-->
<!-- 用户登陆界面,用户名、密码两个参数 -->
<action name="slogin" class="userAction">
<result>/index.jsp</result>
<result name="error">/error.jsp</result>
</action>
<!-- 用户注销 -->
<action name="logOut" class="userAction" method="logOut">
<result>/index.jsp</result>
</action>
8、jsp前台页面,简单登录界面,其他略
<!--添加struts2标签的的支持,在struts2的jar包中。插入页面开头-->
<%@taglib prefix="s" uri="/struts-tags"%>
<s:form method="post" action="slogin">
<!--这里值被后台的ModelDriven<User>接受,封装成User类型-->
<s:textfield label="用户名" name="username" />
<s:password label="密码" name="pwd" />
<s:actionmessage /><!--当出现错误时,显示。可省略-->
<s:submit value="确认" class="btnsubmit" />
</s:form>