ssh开发之登录实现

来源:互联网 发布:java导出excel表格方法 编辑:程序博客网 时间:2024/06/05 09:53

一、本节说明

好久没写博客了,登录功能是任何一个应用都必不可少的功能,这次先介绍一下登录的实现。

二、准备工作

假设你已配置好ssh开发所需的环境,如果没有,请参考我的另一篇博文:SSH整合开发之配置文件

三、基础组件

我们必须先把基础设施做好才能开始写视图层页面,需要的组件有两种:DAO组件和业务逻辑组件。除了组件还需要持久化类用来映射用户表
Java EE提倡面向接口编程,以下都遵循这个思想。

1.DAO组件

它首先需要有个基类的DAO接口定义一些通用的方法,然后还要有一个基类的DAO组件实现这个接口的方法。
用户有操作,那么需要定义一个用户DAO接口继承自基类DAO接口,还要有一个用户的DAO组件继承自基类的DAO组件并且实现了用户DAO接口。


基类DAO接口

package com.easychat.dao;import java.io.Serializable;import java.util.List;public interface BaseDao<T> {    /**     * 获取实体     * @param entityClazz     * @param id     * @return     */    T get(Class<T> entityClazz,Serializable id);    /**     * 保存实体     * @param entity     * @return     */    Serializable save(T entity);    /**     * 更新实体     * @param entity     */    void update(T entity);    /**     * 删除实体     * @param entityClazz     * @param id     */    void delete(Class<T> entityClazz,Serializable id);    /**     * 搜索     * @param entityClazz     * @return     */    List<T> findAll(Class<T> entityClazz);    long findCount(Class<T> entityClazz);    /**     * 根据hql查询     * @param hql     * @return     */    public List<T> find(String hql);    public List<T> find(String hql,Object... params);    /**     * 分页查询     * @param hql     * @param pageNo     * @param pageSize     * @return     */    public List<T> findByPage(String hql,int pageNo,int pageSize);    public List<T> findByPage(String hql,int pageNo,int pageSize,Object...params);}

用户DAO接口代码如下:

package com.easychat.dao;import com.easychat.entity.User;public interface UserDao extends BaseDao<User>{}

基类DAO组件代码如下:

package com.easychat.daoImpl;import java.io.Serializable;import java.util.List;import org.hibernate.Query;import org.hibernate.SessionFactory;import com.easychat.dao.BaseDao;public class BaseDaoImpl<T> implements BaseDao<T>{    private SessionFactory sessionFactory;    //注入    public void setSessionFactory(SessionFactory sessionFactory) {        this.sessionFactory = sessionFactory;    }    public SessionFactory getSessionFactory() {        return sessionFactory;    }    @SuppressWarnings("unchecked")    @Override    public T get(Class<T> entityClazz, Serializable id) {        return (T) getSessionFactory().getCurrentSession().get(entityClazz, id);    }    @Override    public Serializable save(T entity) {        return getSessionFactory().getCurrentSession().save(entity);    }    @Override    public void update(T entity) {        // TODO Auto-generated method stub        getSessionFactory().getCurrentSession().saveOrUpdate(entity);    }    @Override    public void delete(Class<T> entityClazz, Serializable id) {        getSessionFactory().getCurrentSession().createQuery("delete "+entityClazz.getSimpleName()+" en where en.id=?0")        .setParameter("0",id)        .executeUpdate();    }    @Override    public List<T> findAll(Class<T> entityClazz) {        return find("select en from "+entityClazz.getSimpleName()+" en");    }    @Override    public long findCount(Class<T> entityClazz) {        // TODO Auto-generated method stub        return 0;    }    /**     * 根据hql语句查找     * @param hql     * @return     */    @SuppressWarnings("unchecked")    public List<T> find(String hql){        return getSessionFactory().getCurrentSession().createQuery(hql).list();    }    /**     * 根据带占位符的hql语句查找     * @param hql     * @param params     * @return     */    @SuppressWarnings("unchecked")    public List<T> find(String hql,Object... params){        Query query=getSessionFactory().getCurrentSession().createQuery(hql);        for(int i=0;i<params.length;i++){            query.setParameter(i,params[i]);        }        return query.list();    }    /**     * 分页查询     * @param hql     * @param pageNo 查询第几页     * @param pageSize 每页多少条记录     * @return     */    @SuppressWarnings("unchecked")    public List<T> findByPage(String hql,int pageNo,int pageSize){        return getSessionFactory().getCurrentSession().createQuery(hql)                .setFirstResult((pageNo-1)*pageSize)                .setMaxResults(pageSize)                .list();    }    /**     * 根据带占位符的hql语句查询分页结果     * @param hql     * @param pageNo     * @param pageSize     * @param params     * @return     */    @SuppressWarnings("unchecked")    public List<T> findByPage(String hql,int pageNo,int pageSize,Object...params){        Query query=getSessionFactory().getCurrentSession().createQuery(hql);        for(int i=0;i<params.length;i++){            query.setParameter(i,params[i]);        }        return query.setFirstResult((pageNo-1)*pageSize)                .setMaxResults(pageSize)                .list();    }}

用户DAO组件代码如下:

import com.easychat.dao.UserDao;import com.easychat.entity.User;public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao{}

2.持久化类

User类映射为数据表

package com.easychat.entity;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;/** * 用户实体 *  * @author Administrator 刘壮飞 * */@Entity@Table(name = "user_inf")public class User {    @Id    @Column(name = "user_id")    @GeneratedValue(strategy=GenerationType.IDENTITY)    private Integer id;    // 手机号作用户名    @Column(name = "user_tel",unique=true)    private String tel;    // 用户密码    @Column(name = "user_password")    private String password;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getTel() {        return tel;    }    public void setTel(String tel) {        this.tel = tel;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public User(String tel, String password) {        super();        this.tel = tel;        this.password = password;    }    public User() {        super();    }}

持久化类配置
持久化类还需要配置,配置问题见下文。


3.业务逻辑组件

每个业务逻辑组件都应该有一个接口,这里定义三个方法。
业务逻辑接口代码如下:

package com.easychat.service;import com.easychat.entity.User;/** * 用户业务接口 * @author Administrator * */public interface UserService {    /**     * 验证用户     * @param user     * @return     */    public boolean validate(User user);    /**     * 注册     * @param user     * @return     */    public boolean register(User user);    /**     * 根据用户名、密码查找用户     * @param tel     * @param password     * @return     */    public User find(String tel,String password);}

业务逻辑组件代码如下:

package com.easychat.serviceImpl;import java.util.List;import com.easychat.dao.UserDao;import com.easychat.entity.User;import com.easychat.service.UserService;/** * 用户业务逻辑组件 * @author Administrator * */public class UserServiceImpl implements UserService{    //用户DAO组件    private UserDao userDao;    //执行注入DAO组件    public void setUserDao(UserDao userDao) {        this.userDao = userDao;    }    @Override    public boolean register(User user) {        userDao.save(user);        return true;    }    @Override    public boolean validate(User user) {        return find(user.getTel(), user.getPassword())==null?false:true;    }    @Override    public User find(String tel, String password) {        List<User> list=userDao.find("select u from User u  where u.tel=? and u.password=?",tel,password);        return list.size()==0?null:list.get(0);    }}

5.控制器实现

package com.easychat.action;import com.easychat.entity.User;import com.easychat.service.UserService;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;/** * 登录控制器 * @author Administrator 刘壮飞 * */public class LoginAction extends ActionSupport{    //用户业务逻辑组件    private UserService userService;    private User user;    public void setUser(User user) {        this.user = user;    }    //必须添加getter方法,否则ognl无法将参数转换为对象    public User getUser() {        return user;    }    public void setUserService(UserService userService) {        this.userService = userService;    }    @Override    public String execute() throws Exception {        // TODO Auto-generated method stub        if(userService.validate(user)){            ActionContext context=ActionContext.getContext();            context.getSession().put("tel",getUser().getTel());            context.getSession().put("password",getUser().getPassword());            return SUCCESS;        }        else return ERROR;    }}

6.配置

基本的组件都实现了,现在剩下的就是配置了。数据源等配置就不再说了,这里只说罗列持久化类这一块,如果不会配置,请查阅SSH整合开发之配置文件中的appicationContext.xml文件。
罗列持久化类:

<list>        <!-- 罗列持久化类 -->        <value>com.easychat.entity.User</value></list>

Spring来控制依赖关系,注入配置这里不再细说,不懂的话请看上文的链接。


四、视图层

jsp只需要弄个表单将用户数据提交到loginAction就可以了,没什么技术含量,代码如下:

<s:form action="loginAction" id="form1">    <s:textfield label="用户名" name="user.tel"></s:textfield>    <s:textfield label="密码" name="user.password"></s:textfield>    <s:submit value="登录账号" id="submit"></s:submit></s:form>
原创粉丝点击