IntelliJ IDEA14.0.3+Maven+SpringMVC+Spring+Hibernate光速构建Java权限管理系统(三)

注册登录

--利用简单的编写注册登录系统来打通从前端到后台的数据传输路径。

一、建立数据库、基本表

基本环境:mysql5,7、Navicat for MySQL11.0.9企业版。

我们在本地MySQL服务器中新建名为work的数据库,然后建立名为user的表,详细如下图所示:

二、hibernate与dao

hibernate是比较成熟的重量级ORM框架,利用它可以大大简化我们对数据库的操作(基本的操作数据库方式就是增删改查)。

在大型项目中我们通常会有个base包来存放最基础的公共类,其中的dao层存放可复用性强的数据库操作,比如对单个实体的增删改查,批量保存,批量删除,分页查询等等。这样,其他功能包中的dao层可以从base包中的dao层进行继承,从而使我们在编程时可以花更多时间在业务逻辑上。

为了照顾编程的规范性,base/dao层中先编写接口,再编写实现类。

这里先给出IBaseDao.java和BaseDaoImpl.java两个文件的代码:

IBaseDao.java

 

[java]  view plain  copy
  1. package com.whut.work.base.dao;  
  2.   
  3. import java.sql.SQLException;  
  4. import java.util.Collection;  
  5. import java.util.List;  
  6.   
  7. import org.hibernate.HibernateException;  
  8.   
  9. import com.whut.work.base.model.Page;  
  10. import com.whut.work.base.vo.Parameter;  
  11.   
  12. public interface IBaseDao<T> {  
  13.   
  14.     //单个CRUD  
  15.     public void save(final T entity) throws Exception;  
  16.     public void delete(final T entity) throws Exception;  
  17.     <span style="white-space:pre">  </span>public void deleteWithHql(final String hql) throws Exception;  
  18.     public void update(final T entity) throws Exception;  
  19.     public T getOne(final int id) throws Exception;  
  20.   
  21.     <span style="white-space:pre">  </span>//批处理  
  22.     <span style="white-space:pre">  </span>public int batchSave(final List<T> list) throws Exception;  
  23.     <span style="white-space:pre">  </span>public void deleteAll(final Collection entities) throws Exception;  
  24.   
  25.     //createQuery(Query)  
  26.     public T findOne(final String hql) throws Exception;  
  27.     public T findOne(final String hql, final Parameter parameter) throws Exception;  
  28.       
  29.     //list查询  
  30.     public List<T> findList(final String hql) throws Exception;  
  31.     public List<T> findList(final String hql, final Parameter parameter) throws Exception;  
  32.       
  33.     //分页查询  
  34.     public Page<T> findPage(final int currentPage, final int pageSize, final String queryHql, final String countHql, final Object[] values)  
  35.             throws HibernateException,SQLException;  
  36.     public Page<T> findPage(final int currentPage, final int pageSize, final String queryHql, final String countHql)  
  37.             throws HibernateException,SQLException;  
  38.       
  39.     //查询满足条件的记录数  
  40.     public long findCount(final String hql);  
  41.     public long findCount(final String hql, final Object[] values);  
  42. }  

BaseDaoImpl.java

[java]  view plain  copy
  1. package com.whut.work.base.dao.Impl;  
  2.   
  3. import java.sql.SQLException;  
  4. import java.util.Collection;  
  5. import java.util.List;  
  6. import java.util.Set;  
  7.   
  8. import javax.annotation.Resource;  
  9.   
  10. import org.hibernate.HibernateException;  
  11. import org.hibernate.Query;  
  12. import org.hibernate.Session;  
  13. import org.hibernate.SessionFactory;  
  14.   
  15. import com.whut.work.base.dao.IBaseDao;  
  16. import com.whut.work.base.model.Page;  
  17. import com.whut.work.base.vo.Parameter;  
  18.   
  19. public class BaseDaoImpl<T> implements IBaseDao<T> {  
  20.   
  21.     private int BATCH_MAX_ROW = 5;  
  22.   
  23.     private SessionFactory sessionFactory;    
  24.     private Class<T> entityClass;  
  25.       
  26.     //construct methods  
  27.     public BaseDaoImpl(){  
  28. }  
  29.   
  30.     public BaseDaoImpl(Class<T> entityClass){  
  31.         this.entityClass = entityClass;  
  32.     }  
  33.   
  34.   
  35.     @Override  
  36.     public void save(T entity) throws Exception {  
  37.         Session session = this.getSession();  
  38.         session.beginTransaction();  
  39.         session.save(entity);  
  40.         session.getTransaction().commit();  
  41.     }  
  42.   
  43.     @Override  
  44.     public int batchSave(List<T> list) throws Exception {  
  45.         Session session = this.getSession();  
  46.         session.beginTransaction();  
  47.         for (int i = 0; i < list.size(); ++i) {  
  48.             session.save(list.get(i));  
  49.             if (i % BATCH_MAX_ROW == 0) {  
  50.                 session.flush();  
  51.                 session.clear();  
  52.             }  
  53.         }  
  54.         session.flush();  
  55.         session.clear();  
  56.         session.getTransaction().commit();  
  57.         return list.size();  
  58.     }  
  59.   
  60.     @Override  
  61.     public void deleteAll(Collection entities) throws Exception {  
  62.         Session session = this.getSession();  
  63.         session.beginTransaction();  
  64.         for (Object entity : entities) {  
  65.             session.delete(entity);  
  66.         }  
  67.         session.getTransaction().commit();  
  68.     }  
  69.   
  70.     @Override  
  71.     public void delete(T entity) throws Exception {  
  72.         Session session = this.getSession();  
  73.         session.beginTransaction();  
  74.         session.delete(entity);  
  75.         session.getTransaction().commit();  
  76.     }  
  77.   
  78.     @Override  
  79.     public void deleteWithHql(String hql) throws Exception {  
  80.         Session session = this.getSession();  
  81.         session.beginTransaction();  
  82.         Query query = session.createQuery(hql);  
  83.         query.executeUpdate();  
  84.         session.getTransaction().commit();  
  85.     }  
  86.   
  87.     @Override  
  88.     public void update(T entity) throws Exception {  
  89.         Session session = this.getSession();  
  90.         session.beginTransaction();  
  91.         session.update(entity);  
  92.         session.getTransaction().commit();  
  93.     }  
  94.   
  95.     @SuppressWarnings("unchecked")  
  96.     @Override  
  97.     public T getOne(int id) throws Exception {  
  98.         Session session = this.getSession();  
  99.         session.beginTransaction();  
  100.         Object returnObject = session.get(entityClass, id);  
  101.         session.getTransaction().commit();  
  102.   
  103.         return (T) returnObject;  
  104.     }  
  105.   
  106.     @Override  
  107.     public T findOne(String hql) throws Exception {  
  108.         return findOne(hql,null);  
  109.     }  
  110.   
  111.     @SuppressWarnings("unchecked")  
  112.     @Override  
  113.     public T findOne(final String hql, final Parameter parameter) throws Exception {  
  114.         Session session = this.getSession();  
  115.         session.beginTransaction();  
  116.         Query query = session.createQuery(hql);  
  117.         setParameter(query, parameter);  
  118.         Object returnObject = query.setMaxResults(1).uniqueResult();  
  119.         session.getTransaction().commit();  
  120.   
  121.         return (T) returnObject;  
  122.     }  
  123.   
  124.     @Override  
  125.     public List<T> findList(final String hql) throws Exception {  
  126.         return findList(hql, null);  
  127.     }  
  128.   
  129.     @SuppressWarnings("unchecked")  
  130.     @Override  
  131.     public List<T> findList(final String hql, final Parameter parameter) throws Exception {  
  132.         Session session = this.getSession();  
  133.         session.beginTransaction();  
  134.         Query query = session.createQuery(hql);  
  135.         setParameter(query, parameter);  
  136.         List<T> returnList = query.list();  
  137.         session.getTransaction().commit();  
  138.   
  139.         return returnList;  
  140.     }  
  141.   
  142.     /** 
  143.      * 
  144.      * @param query 
  145.      * @param parameter 
  146.      * set sql parameters 
  147.      */  
  148.     private void setParameter(Query query, Parameter parameter) {  
  149.         if (parameter != null) {  
  150.             Set<String> keySet = parameter.keySet();  
  151.             for (String string : keySet) {  
  152.                 Object value = parameter.get(string);  
  153.                 if (value instanceof Collection<?>) {  
  154.                     query.setParameterList(string, (Collection<?>) value);  
  155.                 } else if (value instanceof Object[]) {  
  156.                     query.setParameterList(string, (Object[]) value);  
  157.                 } else {  
  158.                     query.setParameter(string, value);  
  159.                 }  
  160.             }  
  161.         }  
  162.     }  
  163.   
  164.     public SessionFactory getSessionFactory() {  
  165.         return sessionFactory;  
  166.     }  
  167.   
  168.     @Resource(name="sessionFactory")//在applicationContext.xml文件中有配置  
  169.     public void setSessionFactory(SessionFactory sessionFactory) {  
  170.         this.sessionFactory = sessionFactory;  
  171.     }  
  172.   
  173.      /** 
  174.      * @return session 
  175.      */  
  176.     private Session getSession() {  
  177.         return sessionFactory.getCurrentSession();  
  178.     }  
  179.   
  180.     @SuppressWarnings("unchecked")  
  181.     @Override  
  182.     public Page<T> findPage(int currentPage, int pageSize, String queryHql, String countHql, Object[] values)  
  183.             throws HibernateException, SQLException {  
  184.         Session session = this.getSession();  
  185.         session.beginTransaction();  
  186.         Query query = session.createQuery(queryHql);  
  187.         if (values != null) {  
  188.             for (int i = 0; i < values.length; i++) {  
  189.                 query.setParameter(i, values[i]);  
  190.             }  
  191.         }  
  192.         // 如果pageSize<=0则查询全部,用于打印导出等...  
  193.         if (pageSize > 0) {  
  194.             query.setFirstResult(pageSize * (currentPage - 1));//设置要查询的结果集的开始索引位置  
  195.             query.setMaxResults(pageSize);//设置要查询的结果集的数量  
  196.         }  
  197.         List<T> returnList = query.list();  
  198.         session.getTransaction().commit();  
  199.         long totalRecords = findCount(countHql, values);  
  200.           
  201.         return new Page<T>(returnList, totalRecords, currentPage, pageSize);  
  202.     }  
  203.   
  204.     @Override  
  205.     public Page<T> findPage(int currentPage, int pageSize, String queryHql, String countHql)  
  206.             throws HibernateException, SQLException {  
  207.         return findPage(currentPage, pageSize, queryHql, countHql, null);  
  208.     }  
  209.   
  210.     @Override  
  211.     public long findCount(String hql) {  
  212.         return findCount(hql, null);  
  213.     }  
  214.   
  215.     @Override  
  216.     public long findCount(String hql, Object[] values) {  
  217.         Session session = this.getSession();  
  218.         session.beginTransaction();  
  219.         Query query = session.createQuery(hql);  
  220.         if (values != null) {  
  221.             for (int i = 0; i < values.length; i++) {  
  222.                 query.setParameter(i, values[i]);  
  223.             }  
  224.         }  
  225.         Long returnLong = (Long) query.setMaxResults(1).uniqueResult();  
  226.         session.getTransaction().commit();  
  227.           
  228.         return returnLong;  
  229.     }  
  230.       
  231. }  

通过以上代码我们可以发现,在分页查询以及设置hql参数的操作中还需要用到两个类:Page.java和Parameter.java。

 

Page.java

[java]  view plain  copy
  1. package com.whut.work.base.model;  
  2.   
  3. import java.util.List;  
  4.   
  5. public class Page<T> {  
  6.   
  7.     private int current = 1;  
  8.     private int total = 0;  
  9.     private long records = 0;  
  10.     private int size = 10;  
  11.     private String orderBy = "";  
  12.     private String order = "";  
  13.   
  14.     public String getOrderBy() {  
  15.         return orderBy;  
  16.     }  
  17.   
  18.     public void setOrderBy(String orderBy) {  
  19.         this.orderBy = orderBy;  
  20.     }  
  21.   
  22.     public String getOrder() {  
  23.         return order;  
  24.     }  
  25.   
  26.     public void setOrder(String order) {  
  27.         this.order = order;  
  28.     }  
  29.   
  30.     private List<T> list = null;  
  31.   
  32.     public Page() {  
  33.   
  34.     }  
  35.   
  36.     public Page(int currentPage, int pageSize){  
  37.         current=currentPage;  
  38.         size=pageSize;  
  39.     }  
  40.   
  41.     public Page(List<T> list, int current, int size) {  
  42.         this.current = current;  
  43.         this.size = size;  
  44.         this.list = list;  
  45.     }  
  46.       
  47.     public Page(List<T> list, long records, int current, int size, String orderBy, String order) {  
  48.         this.list = list;  
  49.         this.current = current;  
  50.         this.records = records;  
  51.         this.size = size;  
  52.         this.orderBy = orderBy;  
  53.         this.order = order;  
  54.         this.total = records == 0 ? 1 : (int) ((records - 1) / size + 1);//分几页的计算方法  
  55.   
  56.         if (this.current > this.total) {  
  57.             this.current = this.total;  
  58.         }  
  59.         if (current < 1) {  
  60.             this.current = 1;  
  61.         }  
  62.     }  
  63.   
  64.     public Page(List<T> list, long records, int current, int size) {  
  65.         this(list, records, current, size, null, null);  
  66.     }  
  67.   
  68.     public int getCurrent() {  
  69.         return current;  
  70.     }  
  71.   
  72.     public void setCurrent(int current) {  
  73.         this.current = current;  
  74.     }  
  75.   
  76.     public int getSize() {  
  77.         return size;  
  78.     }  
  79.   
  80.     public void setSize(int size) {  
  81.         this.size = size;  
  82.     }  
  83.   
  84.     public int getTotal() {  
  85.         return total;  
  86.     }  
  87.   
  88.     public void setTotal(int l) {  
  89.         this.total = l;  
  90.     }  
  91.   
  92.     public long getRecords() {  
  93.         return records;  
  94.     }  
  95.   
  96.     public void setRecords(long records) {  
  97.         this.records = records;  
  98.     }  
  99.   
  100.     public List<T> getList() {  
  101.         return list;  
  102.     }  
  103.   
  104.     public void setList(List<T> list) {  
  105.         this.list = list;  
  106.     }  
  107.   
  108.     @Override  
  109.     public String toString() {  
  110.         return "Page{" +  
  111.                 "current=" + current +  
  112.                 ", size=" + size +  
  113.                 ", list=" + list +  
  114.                 '}';  
  115.     }  
  116. }  

Parameter.java

 

 

[java]  view plain  copy
  1. package com.whut.work.base.vo;  
  2.   
  3. import java.util.HashMap;  
  4.   
  5. /** 
  6.  * 查询参数类 
  7.  */  
  8. public class Parameter extends HashMap<String, Object> {  
  9.   
  10.     private static final long serialVersionUID = 1L;  
  11.   
  12.     /** 
  13.      * 构造类,例:new Parameter(id, parentIds) 
  14.      * 
  15.      * @param values 参数值 
  16.      */  
  17.     public Parameter(Object... values) {  
  18.         if (values != null) {  
  19.             for (int i = 0; i < values.length; i++) {  
  20.                 put("p" + i, values[i]);  
  21.             }  
  22.         }  
  23.     }  
  24.   
  25.     /** 
  26.      * 构造类,例:new Parameter(new Object[][]{{"id", id}, {"parentIds", parentIds}}) 
  27.      * 
  28.      * @param parameters 参数二维数组 
  29.      */  
  30.     public Parameter(Object[][] parameters) {  
  31.         if (parameters != null) {  
  32.             for (Object[] os : parameters) {  
  33.                 if (os.length == 2) {  
  34.                     put((String) os[0], os[1]);  
  35.                 }  
  36.             }  
  37.         }  
  38.     }  
  39.   
  40. }  

至此,我们先给出项目结构图,关于那个util包,以后我们遇到相应问题时再来讨论它(暂时不用建立它)。

 



当然,关于各种的包的命名大家完全可以根据自己喜好来进行。

三、用户实体(user包)

之前我们已经建立了数据库中的user表,现在我们来编写用户model层代码,并用注解配置。

 

[java]  view plain  copy
  1. package com.whut.work.user.model;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import javax.persistence.Column;  
  6. import javax.persistence.Entity;  
  7. import javax.persistence.GeneratedValue;  
  8. import javax.persistence.Id;  
  9. import javax.persistence.Table;  
  10.   
  11. @Entity  
  12. @Table(name="user")  
  13. public class User {  
  14.   
  15.     @Id  
  16.     @GeneratedValue  
  17.     private Integer id;  
  18.     private String username;  
  19.     private String password;  
  20.     <span style="white-space:pre">  </span>private String tel;  
  21.     <span style="white-space:pre">  </span>private String email;  
  22.     @Column(name="create_time")  
  23.     private Date createTime;  
  24.     @Column(name="is_delete")  
  25.     private Boolean isDelete;  
  26.       
  27.     public Integer getId() {  
  28.         return id;  
  29.     }  
  30.     public void setId(Integer id) {  
  31.         this.id = id;  
  32.     }  
  33.     public String getUsername() {  
  34.         return username;  
  35.     }  
  36.     public void setUsername(String username) {  
  37.         this.username = username;  
  38.     }  
  39.     public String getPassword() {  
  40.         return password;  
  41.     }  
  42.     public void setPassword(String password) {  
  43.         this.password = password;  
  44.     }  
  45.     public Date getCreateTime() {  
  46.         return createTime;  
  47.     }  
  48.     public void setCreateTime(Date createTime) {  
  49.         this.createTime = createTime;  
  50.     }  
  51.     public Boolean getIsDelete() {  
  52.         return isDelete;  
  53.     }  
  54.     public void setIsDelete(Boolean isDelete) {  
  55.         this.isDelete = isDelete;  
  56.     }  
  57.   
  58.     public String getTel() {  
  59.         return tel;  
  60.     }  
  61.   
  62.     public void setTel(String tel) {  
  63.         this.tel = tel;  
  64.     }  
  65.   
  66.     public String getEmail() {  
  67.         return email;  
  68.     }  
  69.   
  70.     public void setEmail(String email) {  
  71.         this.email = email;  
  72.     }  
  73. }  

然后编写用户的dao层:

 

IUserDao.java

 

[java]  view plain  copy
  1. package com.whut.work.user.dao;  
  2.   
  3. import com.whut.work.base.dao.IBaseDao;  
  4. import com.whut.work.user.model.User;  
  5.   
  6. public interface IUserDao extends IBaseDao<User>{  
  7.   
  8. }  

UserDaoImpl.java

 

 

[java]  view plain  copy
  1. package com.whut.work.user.dao.impl;  
  2.   
  3. import org.springframework.stereotype.Component;  
  4.   
  5. import com.whut.work.base.dao.Impl.BaseDaoImpl;  
  6. import com.whut.work.user.dao.IUserDao;  
  7. import com.whut.work.user.model.User;  
  8.   
  9. @Component  
  10. public class UserDaoImpl extends BaseDaoImpl<User> implements IUserDao {  
  11.   
  12.     public UserDaoImpl(){  
  13.         super(User.class);  
  14.     }  
  15.   
  16. }  

四、登录部分(login包)

 

我们暂时只需编写登录部分的controller层和service层。调用过程为:login下的controller接收到前台传送过来的用户登录信息,调用login下的service,接着通过user下的dao与数据库进行交互。login包中包含注册和登录功能。

ILoginService.java

[java]  view plain  copy
  1. package com.whut.work.login.service;  
  2.   
  3. import java.util.Map;  
  4.   
  5. public interface ILoginService {  
  6.   
  7.     //登录  
  8.     public Map<String,Object> login(String username, String password) throws Exception;  
  9.       
  10.     //注册  
  11.     public Map<String,Object> register(String username, String password, String tel, String email) throws Exception;  
  12.       
  13. }  

LoginServiceImpl.java

 

 

[java]  view plain  copy
  1. package com.whut.work.login.service.impl;  
  2.   
  3. import java.util.Date;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8. import org.springframework.beans.factory.annotation.Autowired;  
  9. import org.springframework.stereotype.Component;  
  10.   
  11. import com.whut.work.login.service.ILoginService;  
  12. import com.whut.work.user.dao.IUserDao;  
  13. import com.whut.work.user.model.User;  
  14.   
  15. @Component  
  16. public class LoginServiceImpl implements ILoginService  {  
  17.   
  18.     @Autowired  
  19.     private IUserDao userDao;  
  20.       
  21.     @Override  
  22.     public Map<String, Object> login(String username, String password) throws Exception {  
  23.         Map<String,Object> returnMap = new HashMap<String,Object>();  
  24.           
  25.         String hql = "from User u where u.username='"+username+"'";  
  26.         User user = new User();  
  27.         try {  
  28.             user = userDao.findOne(hql);  
  29.         } catch (Exception e) {  
  30.             e.printStackTrace();  
  31.         }  
  32.         if(user != null){  
  33.             if(user.getPassword().equals(password)){  
  34.                 returnMap.put("value", user);  
  35.                 returnMap.put("message", "登录成功");  
  36.                 returnMap.put("success", true);  
  37.             }else{  
  38.                 returnMap.put("message", "密码错误");  
  39.                 returnMap.put("success", false);  
  40.             }  
  41.         }else{  
  42.             returnMap.put("message", "该用户不存在!");  
  43.             returnMap.put("success", false);  
  44.         }  
  45.         return returnMap;  
  46.     }  
  47.   
  48.     @Override  
  49.     public Map<String, Object> register(String username, String password,String tel,String email) throws Exception {  
  50.         Map<String,Object> returnMap = new HashMap<String,Object>();  
  51.           
  52.         String hql = "from User u where u.username='"+username+"'";  
  53.         User user = new User();  
  54.         if(userDao.findOne(hql) != null){  
  55.             returnMap.put("message", "该用户名已存在...");  
  56.             returnMap.put("success", false);  
  57.             return returnMap;  
  58.         }else{  
  59.             user.setUsername(username);  
  60.             user.setPassword(password);  
  61.             user.setTel(tel);  
  62.             user.setEmail(email);  
  63.             user.setCreateTime(new Date());  
  64.             user.setIsDelete(false);  
  65.             userDao.save(user);  
  66.             returnMap.put("value", user);  
  67.             returnMap.put("message", "注册成功");  
  68.             returnMap.put("success", true);  
  69.             return returnMap;  
  70.         }  
  71.     }  
  72.   
  73. }  

LoginCtrl.java

 

 

[java]  view plain  copy
  1. package com.whut.work.login.controller;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5.   
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpSession;  
  8.   
  9. import org.springframework.beans.factory.annotation.Autowired;  
  10. import org.springframework.stereotype.Controller;  
  11. import org.springframework.web.bind.annotation.RequestMapping;  
  12. import org.springframework.web.bind.annotation.RequestMethod;  
  13. import org.springframework.web.bind.annotation.ResponseBody;  
  14.   
  15. import com.whut.work.base.model.Page;  
  16. import com.whut.work.login.service.ILoginService;  
  17. import com.whut.work.user.model.User;  
  18. import com.whut.work.user.service.IUserService;  
  19.   
  20. @Controller  
  21. @RequestMapping("/login")  
  22. public class LoginCtrl {  
  23.       
  24.     @Autowired  
  25.     private ILoginService loginService;  
  26.   
  27.     @RequestMapping(value="/login",method=RequestMethod.POST)  
  28.     @ResponseBody  
  29.     public Map<String,Object> login(HttpServletRequest request,String username,String password){  
  30.         Map<String,Object> returnMap = new HashMap<String,Object>();  
  31.           
  32.         try {  
  33.             Map<String,Object> map = loginService.login(username, password);  
  34.             //获取user实体  
  35.             Object object = map.get("value");  
  36.             if(object != null){  
  37.                 User user = (User) object;  
  38.                 HttpSession session = request.getSession();  
  39.                 session.setAttribute("userId", user.getId());  
  40.             }  
  41.             returnMap.put("value", object);  
  42.             returnMap.put("message", map.get("message"));  
  43.             returnMap.put("success", map.get("success"));  
  44.         } catch (Exception e) {  
  45.             returnMap.put("message", "异常:登录失败!");  
  46.             returnMap.put("success", false);  
  47.             e.printStackTrace();  
  48.         }  
  49.         return returnMap;  
  50.     }  
  51.   
  52.     @RequestMapping(value="/register",method=RequestMethod.POST)  
  53.     @ResponseBody  
  54.     public Map<String,Object> register(HttpServletRequest request,String username,String password,String tel,String email){  
  55.         Map<String,Object> returnMap = new HashMap<String,Object>();  
  56.           
  57.         try {  
  58.             Map<String,Object> map = loginService.register(username, password,tel,email);  
  59.             //获取user实体  
  60.             Object object = map.get("value");  
  61.             if(object != null){  
  62.                 User user = (User) object;  
  63.                 HttpSession session = request.getSession();  
  64.                 session.setAttribute("userId", user.getId());  
  65.             }  
  66.             returnMap.put("value", object);  
  67.             returnMap.put("message", map.get("message"));  
  68.             returnMap.put("success", map.get("success"));  
  69.         } catch (Exception e) {  
  70.             returnMap.put("message", "异常:注册失败!");  
  71.             returnMap.put("success", false);  
  72.             e.printStackTrace();  
  73.         }  
  74.         return returnMap;  
  75.     }  
  76.   
  77. }  

至此,项目的结构如下图所示:

 


关于user包下的controller、service以及vo我们以后会遇到的,这里先忽略。
五、前端页面

前端页面效果部分我就不多讲了,代码也只贴部分重点的。前端css框架为bootstrap,js框架为angularjs。

login.js

 

[javascript]  view plain  copy
  1. angular.module("mainapp",[])  
  2.     .controller("maincontroller",function($scope){  
  3.         $scope.inputUsername = "";  
  4.         $scope.inputPassword = "";  
  5.         //登录  
  6.         $scope.login = function(){  
  7.             if(checkFirst() != false){  
  8.                 login_ajax($scope.inputUsername,$scope.inputPassword);  
  9.             }else{  
  10.                 alert("请将信息填写完整...");  
  11.             };  
  12.         };  
  13.         function checkFirst(){  
  14.             if($scope.inputUsername!=null && $scope.inputUsername!=""  
  15.                 && $scope.inputPassword!=null && $scope.inputPassword!=""){  
  16.                 return true;  
  17.             }else{  
  18.                 return false;  
  19.             }  
  20.         };  
  21.         function login_ajax(username,password){  
  22.             this.username = username;  
  23.             this.password = hex_md5(password);  
  24.             $.ajax({  
  25.                 type:"POST",  
  26.                 url:"/login/login",  
  27.                 data:{"username":this.username,"password":this.password},  
  28.                 contentType:"application/x-www-form-urlencoded",  
  29.                 dataType:"json",  
  30.                 success:function(data){  
  31.                     console.log(data);  
  32.                     $scope.$apply(function(){  
  33.                         if(data.success == true && data.message == "登录成功"){  
  34.                             $scope.inputUsername = "";$scope.inputPassword = "";  
  35.                             //alert("登录成功1!");  
  36.                             window.location.href = "../jsp/infojsp/info.jsp?userName="+data.value.username+  
  37.                                 "&userId="+data.value.id;  
  38.                         }else if(data.success == false && data.message == "密码错误"){  
  39.                             $scope.inputUsername = "";$scope.inputPassword = "";  
  40.                             alert("密码错误!");  
  41.                         }else if(data.success == false && data.message == "该用户不存在!"){  
  42.                             $scope.inputUsername = "";$scope.inputPassword = "";  
  43.                             alert("该用户不存在!");  
  44.                         }  
  45.                     });  
  46.                 }  
  47.             });  
  48.         };  
  49.     })  

signup.js

 

 

[javascript]  view plain  copy
  1. angular.module("mainapp",[])  
  2.     .controller("maincontroller",function($scope){  
  3.         $scope.inputUsername = "";  
  4.         $scope.inputPassword = "";  
  5.         $scope.inputEmail = "";  
  6.         $scope.inputTel = "";  
  7.         function checkFirst(){  
  8.             if($scope.inputUsername!=null && $scope.inputUsername!=""  
  9.                 && $scope.inputPassword!=null && $scope.inputPassword!=""  
  10.                 && $scope.inputEmail!=null && $scope.inputEmail!=""  
  11.                 && $scope.inputTel!=null && $scope.inputTel!=""){  
  12.                 return true;  
  13.             }else{  
  14.                 return false;  
  15.             }  
  16.         };  
  17.         //注册  
  18.         $scope.register = function(){  
  19.             if(checkFirst() != false){  
  20.                 $scope.inputPassword = hex_md5($scope.inputPassword);  
  21.                 $.ajax({  
  22.                     type:"POST",  
  23.                     url:"/login/register",  
  24.                     data:{"username":$scope.inputUsername,"password":$scope.inputPassword,"tel":$scope.inputTel,"email":$scope.inputEmail},  
  25.                     contentType:"application/x-www-form-urlencoded",  
  26.                     dataType:"json",  
  27.                     success:function(data){  
  28.                         console.log(data);  
  29.                         $scope.$apply(function(){  
  30.                             if(data.success == true && data.message == "注册成功"){  
  31.                                 $scope.inputUsername = "";$scope.inputPassword = "";  
  32.                                 $scope.inputEmail = "";$scope.inputTel = "";  
  33.                                 alert("注册成功!");  
  34.                                 window.location.href = "login.html";  
  35.                             }else if(data.success == false && data.message == "该用户名已存在..."){  
  36.                                 $scope.inputUsername = "";$scope.inputPassword = "";  
  37.                                 $scope.inputEmail = "";$scope.inputTel = "";  
  38.                                 alert("该用户名已被注册...");  
  39.                             }  
  40.                         });  
  41.                     }  
  42.                 });  
  43.             }else{  
  44.                 alert("请将信息填写完整...");  
  45.             };  
  46.         };  
  47.     })  

login.html

 

 

[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3.   
  4.     <head>  
  5.   
  6.         <meta charset="utf-8">  
  7.         <meta http-equiv="X-UA-Compatible" content="IE=edge">  
  8.         <meta name="viewport" content="width=device-width, initial-scale=1">  
  9.         <title>Bootstrap Login Form Template</title>  
  10.   
  11.         <!-- CSS -->  
  12.         <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:400,100,300,500">  
  13.         <link rel="stylesheet" href="login&signup/loginassets/assets/bootstrap/css/bootstrap.min.css">  
  14.         <link rel="stylesheet" href="login&signup/loginassets/assets/font-awesome/css/font-awesome.min.css">  
  15.         <link rel="stylesheet" href="login&signup/loginassets/assets/css/form-elements.css">  
  16.         <link rel="stylesheet" href="login&signup/loginassets/assets/css/style.css">  
  17.   
  18.         <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->  
  19.         <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->  
  20.         <!--[if lt IE 9]>  
  21.             <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>  
  22.             <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>  
  23.         <![endif]-->  
  24.   
  25.         <!-- Favicon and touch icons -->  
  26.         <link rel="shortcut icon" href="login&signup/loginassets/assets/ico/favicon.png">  
  27.         <link rel="apple-touch-icon-precomposed" sizes="144x144" href="login&signup/loginassets/assets/ico/apple-touch-icon-144-precomposed.png">  
  28.         <link rel="apple-touch-icon-precomposed" sizes="114x114" href="login&signup/loginassets/assets/ico/apple-touch-icon-114-precomposed.png">  
  29.         <link rel="apple-touch-icon-precomposed" sizes="72x72" href="login&signup/loginassets/assets/ico/apple-touch-icon-72-precomposed.png">  
  30.         <link rel="apple-touch-icon-precomposed" href="login&signup/loginassets/assets/ico/apple-touch-icon-57-precomposed.png">  
  31.   
  32.     </head>  
  33.   
  34.     <body ng-app="mainapp">  
  35.   
  36.         <!-- Top content -->  
  37.         <div class="top-content">  
  38.               
  39.             <div class="inner-bg">  
  40.                 <div class="container">  
  41.                     <div class="row">  
  42.                         <div class="col-sm-8 col-sm-offset-2 text">  
  43.                             <h1><strong>User</strong> MS</h1>  
  44.                             <!--<div class="description">  
  45.                                 <p>  
  46.                                     This is a free responsive login form made with Bootstrap.   
  47.                                     Download it on <href="http://azmind.com"><strong>AZMIND</strong></a>, customize and use it as you like!  
  48.                                 </p>  
  49.                             </div>-->  
  50.                         </div>  
  51.                     </div>  
  52.                     <div class="row">  
  53.                         <div class="col-sm-6 col-sm-offset-3 form-box">  
  54.                             <div class="form-top">  
  55.                                 <div class="form-top-left">  
  56.                                     <h3>Login to our site</h3>  
  57.                                     <p>Enter your username and password to log on:</p>  
  58.                                 </div>  
  59.                                 <div class="form-top-right">  
  60.                                     <class="fa fa-lock"></i>  
  61.                                 </div>  
  62.                             </div>  
  63.                             <div class="form-bottom" ng-controller="maincontroller">  
  64.                                 <form role="form" οnsubmit="return ;" class="login-form">  
  65.                                     <div class="form-group">  
  66.                                         <label class="sr-only" for="form-username">Username</label>  
  67.                                         <input type="text" name="form-username" placeholder="Username..." class="form-username form-control" id="form-username" ng-model="inputUsername">  
  68.                                     </div>  
  69.                                     <div class="form-group">  
  70.                                         <label class="sr-only" for="form-password">Password</label>  
  71.                                         <input type="password" name="form-password" placeholder="Password..." class="form-password form-control" id="form-password" ng-model="inputPassword">  
  72.                                     </div>  
  73.                                     <button type="submit" ng-click="login()" class="btn">Log in!</button>  
  74.                                 </form>  
  75.                             </div>  
  76.                         </div>  
  77.                     </div>  
  78.                     <div class="row">  
  79.                         <div class="col-sm-6 col-sm-offset-3 social-login">  
  80.                             <h3>not an account?</h3>  
  81.                             <span>click to <href="./signup.html"><strong>sign up</strong></a></span>  
  82.                         </div>  
  83.                     </div>  
  84.                 </div>  
  85.             </div>  
  86.               
  87.         </div>  
  88.   
  89.   
  90.         <!-- Javascript -->  
  91.         <!--<script src="login&signup/signupassets/assets/js/jquery-1.11.1.min.js"></script>-->  
  92.         <script src="https://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script>  
  93.         <script src="login&signup/loginassets/assets/bootstrap/js/bootstrap.min.js"></script>  
  94.         <script src="login&signup/loginassets/assets/js/jquery.backstretch.min.js"></script>  
  95.         <script src="login&signup/loginassets/assets/js/scripts.js"></script>  
  96.         <script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script>  
  97.         <script src="login&signup/md5.js"></script>  
  98.         <script src="login&signup/login.js"></script>  
  99.           
  100.         <!--[if lt IE 10]>  
  101.             <script src="login&signup/loginassets/assets/js/placeholder.js"></script>  
  102.         <![endif]-->  
  103.   
  104.     </body>  
  105.   
  106. </html>  

signup.html

 

 

[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html lang="en">  
  3.   
  4.     <head>  
  5.   
  6.         <meta charset="utf-8">  
  7.         <meta http-equiv="X-UA-Compatible" content="IE=edge">  
  8.         <meta name="viewport" content="width=device-width, initial-scale=1">  
  9.         <title>Sign up UMS</title>  
  10.   
  11.         <!-- CSS -->  
  12.         <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:400,100,300,500">  
  13.         <link rel="stylesheet" href="login&signup/signupassets/assets/bootstrap/css/bootstrap.min.css">  
  14.         <link rel="stylesheet" href="login&signup/signupassets/assets/font-awesome/css/font-awesome.min.css">  
  15.         <link rel="stylesheet" href="login&signup/signupassets/assets/css/form-elements.css">  
  16.         <link rel="stylesheet" href="login&signup/signupassets/assets/css/style.css">  
  17.   
  18.         <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->  
  19.         <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->  
  20.         <!--[if lt IE 9]>  
  21.             <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>  
  22.             <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>  
  23.         <![endif]-->  
  24.   
  25.         <!-- Favicon and touch icons -->  
  26.         <link rel="shortcut icon" href="login&signup/signupassets/assets/ico/favicon.png">  
  27.         <link rel="apple-touch-icon-precomposed" sizes="144x144" href="login&signup/signupassets/assets/ico/apple-touch-icon-144-precomposed.png">  
  28.         <link rel="apple-touch-icon-precomposed" sizes="114x114" href="login&signup/signupassets/assets/ico/apple-touch-icon-114-precomposed.png">  
  29.         <link rel="apple-touch-icon-precomposed" sizes="72x72" href="login&signup/signupassets/assets/ico/apple-touch-icon-72-precomposed.png">  
  30.         <link rel="apple-touch-icon-precomposed" href="login&signup/signupassets/assets/ico/apple-touch-icon-57-precomposed.png">  
  31.   
  32.     </head>  
  33.   
  34.     <body ng-app="mainapp">  
  35.   
  36.         <!-- Top content -->  
  37.         <div class="top-content">  
  38.               
  39.             <div class="inner-bg">  
  40.                 <div class="container">  
  41.                     <div class="row">  
  42.                         <div class="col-sm-8 col-sm-offset-2 text">  
  43.                             <h1><strong>User</strong> MS</h1>  
  44.                             <!--<div class="description">  
  45.                                 <p>  
  46.                                     This is a free responsive login form made with Bootstrap.   
  47.                                     Download it on <href="http://azmind.com"><strong>AZMIND</strong></a>, customize and use it as you like!  
  48.                                 </p>  
  49.                             </div>-->  
  50.                         </div>  
  51.                     </div>  
  52.                     <div class="row">  
  53.                         <div class="col-sm-6 col-sm-offset-3 form-box">  
  54.                             <div class="form-top">  
  55.                                 <div class="form-top-left">  
  56.                                     <h3>Singup to our site</h3>  
  57.                                     <p>Enter your information to sign up:</p>  
  58.                                 </div>  
  59.                                 <div class="form-top-right">  
  60.                                     <class="fa fa-book"></i>  
  61.                                 </div>  
  62.                             </div>  
  63.                             <div class="form-bottom" ng-controller="maincontroller">  
  64.                                 <form role="form" οnsubmit="return ;" class="login-form">  
  65.                                     <div class="form-group">  
  66.                                         <label class="sr-only" for="form-username">Username</label>  
  67.                                         <input type="text" name="form-username" placeholder="Username..." class="form-username form-control" id="form-username" ng-model="inputUsername">  
  68.                                     </div>  
  69.                                     <div class="form-group">  
  70.                                         <label class="sr-only" for="form-password">Password</label>  
  71.                                         <input type="password" name="form-password" placeholder="Password..." class="form-password form-control" id="form-password" ng-model="inputPassword">  
  72.                                     </div>  
  73.                                     <div class="form-group">  
  74.                                         <label class="sr-only" for="form-email">Email</label>  
  75.                                         <input type="text" name="form-email" placeholder="Email..." class="form-email form-control" id="form-email" ng-model="inputEmail">  
  76.                                     </div>  
  77.                                     <div class="form-group">  
  78.                                         <label class="sr-only" for="form-tel">Tel</label>  
  79.                                         <input type="text" name="form-tel" placeholder="Tel..." class="form-tel form-control" id="form-tel" ng-model="inputTel">  
  80.                                     </div>  
  81.                                     <button type="submit" ng-click="register()" class="btn">Sign up!</button>  
  82.                                 </form>  
  83.                             </div>  
  84.                         </div>  
  85.                     </div>  
  86.                     <div class="row">  
  87.                         <div class="col-sm-6 col-sm-offset-3 social-login">  
  88.                             <h3>yet have an account?</h3>  
  89.                             <span>click to <href="./login.html"><strong>log in</strong></a></span>  
  90.                         </div>  
  91.                     </div>  
  92.                 </div>  
  93.             </div>  
  94.               
  95.         </div>  
  96.   
  97.   
  98.         <!-- Javascript -->  
  99.         <!--<script src="login&signup/signupassets/assets/js/jquery-1.11.1.min.js"></script>-->  
  100.         <script src="https://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script>  
  101.         <script src="login&signup/signupassets/assets/bootstrap/js/bootstrap.min.js"></script>  
  102.         <script src="login&signup/signupassets/assets/js/jquery.backstretch.min.js"></script>  
  103.         <script src="login&signup/signupassets/assets/js/scripts.js"></script>  
  104.         <script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script>  
  105.         <script src="login&signup/md5.js"></script>  
  106.         <script src="login&signup/signup.js"></script>  
  107.   
  108.           
  109.         <!--[if lt IE 10]>  
  110.         <script src="login&signup/signupassets/assets/js/placeholder.js"></script>  
  111.         <![endif]-->  
  112.   
  113.     </body>  
  114.   
  115. </html>  

到这里,本文已经很长了,项目的演示就放在下一篇博客中啦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值