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>
阅读全文
0 0
- ssh开发之登录实现
- Python实现ssh登录
- SSH物流开发系统设计:搭建框架并实现登录
- SSH之IDEA使用maven整合实现简易用户登录
- Winform开发框架之系统登录实现
- Winform开发框架之系统重新登录、自动登录实现
- SSH与SSM学习之SSH整合11——实现登录功能
- SSH与SSM学习之SSH实现CRM练习15——注册登录
- SSH与SSM学习之SSH实现CRM练习16——登录校验拦截器
- 实现ssh无密码登录
- 实现无密码SSH登录
- Linux实现SSH远程登录
- ssh实现无密码登录
- 实现ssh免密码登录
- SSH实现分用户登录
- SSH实现免密码登录
- ssh实现无密码登录
- 实现SSH免密登录
- 使用VS创建OpenCV工程
- 【JZOJ5296】【清华集训2017模拟】Sequence
- 两串旋转
- Dijkstra算法
- 使RibbonBar中的Button不可用(动态设置CMFCRibbonBar状态)
- ssh开发之登录实现
- Spring Security实践
- 行内元素和块级元素
- 最全oracle单行函数之其他函数用法详解
- 30分钟掌握ES6/ES2015核心内容(上)
- Linux操作系统下的串口通信
- 【离散化 && 线段树 && 染色】POJ
- Swift
- 欢迎使用CSDN-markdown编辑器