博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaWeb_(SSH论坛)_三、用户模块
阅读量:4668 次
发布时间:2019-06-09

本文共 42745 字,大约阅读时间需要 142 分钟。

 

 

基于SSH框架的小型论坛项目  

  一、项目入门  

  二、框架整合  

  三、用户模块  

  四、页面显示  

  五、帖子模块  

  六、点赞模块  

  七、辅助模块  

 

User表

  id:

  username:登陆账号

  password:登陆密码

  name:用户名

  email:用户邮箱

  telephone:用户电话

  state(1,0):根据邮箱判断用户是否激活

  code:

  image:用户头像

  level:用户等级

  coin:金币

 

(根据用户表单进行创建User表)

 

  点击立即注册

    用户成功->登陆界面

    注册失败->用户名存在

 

  将表单数据链接数据库

 

  创建User实体(domain层)

private String id;    private String username;    private String password;    private String name;    private String email;    private String telephone;    private Integer state;    private String code;    private String image;    private Integer level;    private Integer coin;

 

package com.Gary.domain;public class User {    private String id;    private String username;    private String password;    private String name;    private String email;    private String telephone;    private Integer state;    private String code;    private String image;    private Integer level;    private Integer coin;        public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public String getTelephone() {        return telephone;    }    public void setTelephone(String telephone) {        this.telephone = telephone;    }    public Integer getState() {        return state;    }    public void setState(Integer state) {        this.state = state;    }    public String getCode() {        return code;    }    public void setCode(String code) {        this.code = code;    }    public String getImage() {        return image;    }    public void setImage(String image) {        this.image = image;    }    public Integer getLevel() {        return level;    }    public void setLevel(Integer level) {        this.level = level;    }    public Integer getCoin() {        return coin;    }    public void setCoin(Integer coin) {        this.coin = coin;    }            }
User.java

 

  用户注册流程

  一开始用户先来到UserAction.java中register()方法

public String register() throws Exception {        // TODO Auto-generated method stub                userService.addUser(user);            return "toLogin";                }

 

  通过regiser()方法来到UserService.java

public class UserService {    private UserDao userDao;        public void addUser(User user) {            userDao.addUser(user);            }}

 

  通过addUser()来到Dao层save(user)

public class UserDao extends HibernateDaoSupport{    public void addUser(User user) {        // TODO Auto-generated method stub        //拿到与当前线程绑定的session        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();        session.save(user);    }}

 

  register.jsp自动封装表单字段

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
register.jsp

 

  register()中手动封装表单未添加数据

public String register() throws Exception {        // TODO Auto-generated method stub        /*     自动封装的打1     private String id;    private String username;    1    private String password;    1    private String name;    1    private String email;    1    private String telephone;    1    private Integer state;    private String code;    private String image;    private Integer level;    private Integer coin;         */                //没有的数据手动封装        user.setState(0);        user.setCode(UUID.randomUUID().toString());        user.setImage("0");        user.setLevel(1);        user.setCoin(1000);                //是否添加成功        userService.addUser(user);            return "toLogin";                }

 

 

配置hibernate

 

  applicationContext.xml中有一句

 

org.hibernate.dialect.MySQL5InnoDBDialect
update
true
true

 

  数据源字段再User,hbm中配置

User.hbm.xml

 

 

配置Struts

 

  在UserAction对Struts进行配置

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
login.jsp

 

regex:.*
/login.jsp

 

 

配置spring

 

regex:.*
/login.jsp

 

 

  applicationContext.xml中进行整合

 

   测试

  在项目中进行表单注册

 

 

 

表单校验

 

  页面自带表单校验

  通过引入jquery.validate.min.js就可以实现

 

//input各种判断    //用户名:    $('input').eq(0).blur(function(){        if($(this).val().length==0){            $(this).parent().next("div").text("");            $(this).parent().next("div").css("color",'#ccc');        }else if($(this).val().length>0 && $(this).val().length<4){            $(this).parent().next("div").text("长度只能在4-20个字符之间");            $(this).parent().next("div").css("color",'red');        }else if($(this).val().length>=4&& !isNaN($(this).val())){            $(this).parent().next("div").text("用户名不能为纯数字");            $(this).parent().next("div").css("color",'red');        }    })    //密码    $('input').eq(1).blur(function(){        if($(this).val().length==0){            $(this).parent().next("div").text("");            $(this).parent().next("div").css("color",'#ccc');        }else if($(this).val().length>0 && $(this).val().length<3){            $(this).parent().next("div").text("长度只能在3-20个字符之间");            $(this).parent().next("div").css("color",'red');        }else{            $(this).parent().next("div").text("");        }            })//    确认密码    $('input').eq(2).blur(function(){        if($(this).val().length==0){            $(this).parent().next("div").text("");            $(this).parent().next("div").css("color",'#ccc');        }else if($(this).val()!=$('input').eq(1).val()){            $(this).parent().next("div").text("两次密码不匹配");            $(this).parent().next("div").css("color",'red');        }else{            $(this).parent().next("div").text("");        }            })

 

实现From表单中邮箱校验

  邮箱name="email"

 

 

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
register.jsp
register.jsp

 

  书写表单校验提示信息

 

  让提示信息变得好看

  错误信息颜色变红

 

 

 

Ajax实现用户名异步校验

 

  异步校验:当用户注册账号一离焦,立马将数据与数据库中的数据进行校验

  给用户名表单添加Ajax校验

 

 

$(function()        {        $("#username").blur(function(){            $.post(            //action地址                        //提交的数据            {},            //回调函数            function(data)            {                            }            //数据的格式            "json"                        )        })    })

 

  

 

  

  基于Ajax异步校验检测,Web层,Service层,Dao层 

  Web层校验用户名是否存在

public String checkUsername() throws Exception {                //获得用户username        boolean success = userService.findUserByUsername(user.getUsername());                //获得原生Servlet对象        ServletActionContext.getResponse().getWriter().write("{\"success\":"+success+"}");                return null;    }

 

  Service层去查找有没有username

public boolean findUserByUsername(String username) {        // TODO Auto-generated method stub        Long count = userDao.findUserByUsername(username);        if(count==0)            return true;        else            return false;    }

 

   Dao层对数据库进程数据查询

public Long findUserByUsername(String username){        // TODO Auto-generated method stub        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();        String sql = "select count(*) from user where username = ?";        NativeQuery query = session.createSQLQuery(sql);                //1号位置设置为username        query.setParameter(1,username);        BigInteger result = (BigInteger)query.uniqueResult();                return result.longValue();    }

 

  register.jsp返回要查询的值

$(function()        {        $("#username").blur(function(){                var usernameInput = $(this).val();                //alert(usernameInput);            $.post(                //action地址checkUsername()                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               "${pageContext.request.contextPath}/UserAction_checkUsername",                //提交的数据                {"username":usernameInput},                //回调函数                function(data)                {                    var success = data.success;                    //可以添加                    if(success)                    {                        $("#usernameInfo").css("color","green");                        $("#usernameInfo").html("用户名可以使用!");                        }                    //不可添加                    else                    {                        $("#usernameInfo").css("color","red");                        $("#usernameInfo").html("用户名已经被注册!");                    }                },                //数据的格式                "json"            )        })    })

 

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
register.jsp

 

package com.Gary.web;import java.util.UUID;import org.apache.struts2.ServletActionContext;import com.Gary.domain.User;import com.Gary.service.UserService;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;//采用模型驱动 泛型Userpublic class UserAction extends ActionSupport implements ModelDriven
{ public User user = new User(); private UserService userService; //校验用户名是否存在 public String checkUsername() throws Exception { //获得用户username boolean success = userService.findUserByUsername(user.getUsername()); //获得原生Servlet对象 ServletActionContext.getResponse().getWriter().write("{\"success\":"+success+"}"); return null; } public String register() throws Exception { // TODO Auto-generated method stub /* 自动封装的打1 private String id; private String username; 1 private String password; 1 private String name; 1 private String email; 1 private String telephone; 1 private Integer state; private String code; private String image; private Integer level; private Integer coin; */ //没有的数据手动封装 user.setState(0); user.setCode(UUID.randomUUID().toString()); user.setImage("0"); user.setLevel(1); user.setCoin(1000); //是否添加成功 userService.addUser(user); return "toLogin"; } public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } public User getModel() { return user; }}
UserAction.java

 

package com.Gary.service;import java.math.BigInteger;import com.Gary.dao.UserDao;import com.Gary.domain.User;public class UserService {    private UserDao userDao;    public UserDao getUserDao() {        return userDao;    }    public void setUserDao(UserDao userDao) {        this.userDao = userDao;    }    public void addUser(User user) {        // TODO Auto-generated method stub         userDao.addUser(user);    }    public boolean findUserByUsername(String username) {        // TODO Auto-generated method stub        Long count = userDao.findUserByUsername(username);        if(count==0)            return true;        else            return false;    }}
UserService.java

 

package com.Gary.dao;import java.math.BigInteger;import org.hibernate.Session;import org.hibernate.query.NativeQuery;import org.springframework.orm.hibernate5.support.HibernateDaoSupport;import com.Gary.domain.User;public class UserDao extends HibernateDaoSupport{    public void addUser(User user) {     Session session =    getHibernateTemplate().getSessionFactory().getCurrentSession();     session.save(user);     }    public Long findUserByUsername(String username){        // TODO Auto-generated method stub        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();        String sql = "select count(*) from user where username = ?";        NativeQuery query = session.createSQLQuery(sql);                //1号位置设置为username        query.setParameter(1,username);        BigInteger result = (BigInteger)query.uniqueResult();                return result.longValue();    }    }
UserDao.java

 

 

邮箱注册

  

 

 

    

 

  邮箱类

// 1.创建一个程序与邮件服务器会话对象 Session        Properties props = new Properties();        props.setProperty("mail.transport.protocol", "SMTP");        props.setProperty("mail.host", "smtp.163.com");        props.setProperty("mail.smtp.auth", "true");// 指定验证为true        // 创建验证器        Authenticator auth = new Authenticator() {            public PasswordAuthentication getPasswordAuthentication() {                return new PasswordAuthentication("m17689470428", "tt199706282818");            }        };        Session session = Session.getInstance(props, auth);        // 2.创建一个Message,它相当于是邮件内容        Message message = new MimeMessage(session);        message.setFrom(new InternetAddress("m17689470428@163.com")); // 设置发送者        message.setRecipient(RecipientType.TO, new InternetAddress(email)); // 设置发送方式与接收者        //设置标题        message.setSubject(title);        // message.setText("这是一封激活邮件,请点击");        message.setContent(emailMsg, "text/html;charset=utf-8");        // 3.创建 Transport用于将邮件发送        Transport.send(message);

 

  UserAction.java中添加邮箱激活内容,编写用户激活函数

public String register() throws Exception {        // TODO Auto-generated method stub            //没有的数据手动封装        user.setState(0);        user.setCode(UUID.randomUUID().toString());        user.setImage("0");        user.setLevel(1);        user.setCoin(1000);                    //是否添加成功        userService.addUser(user);            MailUtils.sendMail(user.getEmail(), "请激活", "恭喜您注册成功,请点击下面的链接激活!! 点击这里");                return "toLogin";                }

 

  用户激活函数

public String active() throws Exception {            System.out.println("active");        return null;    }

 

 

 

 

 

package com.Gary.utils;import java.util.Properties;import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.AddressException;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMessage.RecipientType;public class MailUtils {        //发邮箱,给谁发Email,以及Email内容    public static void sendMail(String email, String title,String emailMsg)            throws AddressException, MessagingException {        // 1.创建一个程序与邮件服务器会话对象 Session        Properties props = new Properties();        props.setProperty("mail.transport.protocol", "SMTP");        props.setProperty("mail.host", "smtp.163.com");        props.setProperty("mail.smtp.auth", "true");// 指定验证为true        // 创建验证器        Authenticator auth = new Authenticator() {            public PasswordAuthentication getPasswordAuthentication() {                return new PasswordAuthentication("m17689470428", "tt199706282818");            }        };        Session session = Session.getInstance(props, auth);        // 2.创建一个Message,它相当于是邮件内容        Message message = new MimeMessage(session);        message.setFrom(new InternetAddress("m17689470428@163.com")); // 设置发送者        message.setRecipient(RecipientType.TO, new InternetAddress(email)); // 设置发送方式与接收者        //设置标题        message.setSubject(title);        // message.setText("这是一封激活邮件,请点击");        message.setContent(emailMsg, "text/html;charset=utf-8");        // 3.创建 Transport用于将邮件发送        Transport.send(message);    }}
MailUtils.java

 

package com.Gary.web;import java.util.UUID;import org.apache.struts2.ServletActionContext;import com.Gary.domain.User;import com.Gary.service.UserService;import com.Gary.utils.MailUtils;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;//采用模型驱动 泛型Userpublic class UserAction extends ActionSupport implements ModelDriven
{ public User user = new User(); private UserService userService; //用户激活 public String active() throws Exception { System.out.println("active"); return null; } //校验用户名是否存在 public String checkUsername() throws Exception { //获得用户username boolean success = userService.findUserByUsername(user.getUsername()); //获得原生Servlet对象 ServletActionContext.getResponse().getWriter().write("{\"success\":"+success+"}"); return null; } public String register() throws Exception { // TODO Auto-generated method stub //没有的数据手动封装 user.setState(0); user.setCode(UUID.randomUUID().toString()); user.setImage("0"); user.setLevel(1); user.setCoin(1000); //是否添加成功 userService.addUser(user); MailUtils.sendMail(user.getEmail(), "请激活", "恭喜您注册成功,请点击下面的链接激活!!
点击这里"); return "toLogin"; } public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } public User getModel() { return user; }}
UserAction.java

 

  编写用户激活逻辑,设置用户state属性从0变1

 

MailUtils.sendMail(user.getEmail(), "请激活", "恭喜您注册成功,请点击下面的链接激活!! 点击这里");

 

  Web层用户激活

public String active() throws Exception {            userService.activeUser(userCode);                return "toLogin";        }

 

  Service层传递数据给Dao层

public void activeUser(String userCode) {        // TODO Auto-generated method stub        userDao.activeUser(userCode);    }

 

  Dao层修改数据库中State为1

public void activeUser(String userCode) {        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();        String sql = "update user set state = 1 where code = ?";        NativeQuery query = session.createSQLQuery(sql);        query.setParameter(1,userCode);        query.executeUpdate();    }

 

  用户注册

  

 

  查看SQL数据库中用户信息

 

  阿里云邮箱中激活用户信息

 

  点击激活后,修改用户个人state值

 

package com.Gary.web;import java.util.UUID;import org.apache.struts2.ServletActionContext;import com.Gary.domain.User;import com.Gary.service.UserService;import com.Gary.utils.MailUtils;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;//采用模型驱动 泛型Userpublic class UserAction extends ActionSupport implements ModelDriven
{ public User user = new User(); private String userCode; private UserService userService; //用户激活 public String active() throws Exception { userService.activeUser(userCode); return "toLogin"; } public String getUserCode() { return userCode; } public void setUserCode(String userCode) { this.userCode = userCode; } //校验用户名是否存在 public String checkUsername() throws Exception { //获得用户username boolean success = userService.findUserByUsername(user.getUsername()); //获得原生Servlet对象 ServletActionContext.getResponse().getWriter().write("{\"success\":"+success+"}"); return null; } public String register() throws Exception { // TODO Auto-generated method stub //没有的数据手动封装 user.setState(0); user.setCode(UUID.randomUUID().toString()); user.setImage("0"); user.setLevel(1); user.setCoin(1000); //是否添加成功 userService.addUser(user); MailUtils.sendMail(user.getEmail(), "请激活", "恭喜您注册成功,请点击下面的链接激活!!
点击这里"); return "toLogin"; } public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } public User getModel() { return user; }}
UserAction.java

 

package com.Gary.service;import java.math.BigInteger;import com.Gary.dao.UserDao;import com.Gary.domain.User;public class UserService {    private UserDao userDao;    public UserDao getUserDao() {        return userDao;    }        public void activeUser(String userCode) {        // TODO Auto-generated method stub        userDao.activeUser(userCode);    }        public void setUserDao(UserDao userDao) {        this.userDao = userDao;    }    public void addUser(User user) {        // TODO Auto-generated method stub         userDao.addUser(user);    }    public boolean findUserByUsername(String username) {        // TODO Auto-generated method stub        Long count = userDao.findUserByUsername(username);        if(count==0)            return true;        else            return false;    }}
UserService.java

 

package com.Gary.dao;import java.math.BigInteger;import org.hibernate.Session;import org.hibernate.query.NativeQuery;import org.springframework.orm.hibernate5.support.HibernateDaoSupport;import com.Gary.domain.User;public class UserDao extends HibernateDaoSupport{    public void addUser(User user) {     Session session =    getHibernateTemplate().getSessionFactory().getCurrentSession();     session.save(user);     }    public Long findUserByUsername(String username){        // TODO Auto-generated method stub        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();        String sql = "select count(*) from user where username = ?";        NativeQuery query = session.createSQLQuery(sql);        //1号位置设置为username        query.setParameter(1,username);        BigInteger result = (BigInteger)query.uniqueResult();                return result.longValue();    }        public void activeUser(String userCode) {        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();        String sql = "update user set state = 1 where code = ?";        NativeQuery query = session.createSQLQuery(sql);        query.setParameter(1,userCode);        query.executeUpdate();    }    }
User.Dao

 

 

用户登陆

 

  用户登录

  用户登录流程图

 

 

   Service层链接出具库,在数据库中查询数据

public int checkUser(User user) {        User temp = userDao.findUserByUsernameReturnUser(user);        //用户名不存在        if(temp==null)        {            return 1;        }        //判断密码是否相同        if(temp.getPassword().equals(user.getPassword()))        {            if(temp.getState()==1)            {                //登陆成功                return 0;            }else {                //没有激活                return 3;            }        }else {            //密码错误            return 2;        }    }

 

  Web层传递数据给Service层

public String Login() throws Exception {            int success = userService.checkUser(user);                if(success == 0)        {            return "toIndex";        }        else if(success ==1) {            //用户名不存在            ActionContext.getContext().put("error","用户名不存在!!");            return "login";        }        else if(success ==2) {            //密码错误            ActionContext.getContext().put("error", "密码错误");            return "login";        }        else if(success ==3) {            //用户未激活            ActionContext.getContext().put("error","用户未激活!!");            return "login";        }else {            return "error";        }            }

 

 

package com.Gary.web;import java.util.UUID;import org.apache.struts2.ServletActionContext;import com.Gary.domain.User;import com.Gary.service.UserService;import com.Gary.utils.MailUtils;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;//采用模型驱动 泛型Userpublic class UserAction extends ActionSupport implements ModelDriven
{ public User user = new User(); private String userCode; private UserService userService; //用户登陆 public String Login() throws Exception { int success = userService.checkUser(user); if(success == 0) { return "toIndex"; } else if(success ==1) { //用户名不存在 ActionContext.getContext().put("error","用户名不存在!!"); return "login"; } else if(success ==2) { //密码错误 ActionContext.getContext().put("error", "密码错误"); return "login"; } else if(success ==3) { //用户未激活 ActionContext.getContext().put("error","用户未激活!!"); return "login"; }else { return "error"; } } //用户激活 public String active() throws Exception { userService.activeUser(userCode); return "toLogin"; } public String getUserCode() { return userCode; } public void setUserCode(String userCode) { this.userCode = userCode; } //校验用户名是否存在 public String checkUsername() throws Exception { //获得用户username boolean success = userService.findUserByUsername(user.getUsername()); //获得原生Servlet对象 ServletActionContext.getResponse().getWriter().write("{\"success\":"+success+"}"); return null; } public String register() throws Exception { // TODO Auto-generated method stub //没有的数据手动封装 user.setState(0); user.setCode(UUID.randomUUID().toString()); user.setImage("0"); user.setLevel(1); user.setCoin(1000); //是否添加成功 userService.addUser(user); MailUtils.sendMail(user.getEmail(), "请激活", "恭喜您注册成功,请点击下面的链接激活!!
点击这里"); return "toLogin"; } public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } public User getModel() { return user; }}
UserAction.java

 

package com.Gary.service;import java.math.BigInteger;import com.Gary.dao.UserDao;import com.Gary.domain.User;public class UserService {    private UserDao userDao;    public int checkUser(User user) {        User temp = userDao.findUserByUsernameReturnUser(user);        //用户名不存在        if(temp==null)        {            return 1;        }        //判断密码是否相同        if(temp.getPassword().equals(user.getPassword()))        {            if(temp.getState()==1)            {                //登陆成功                return 0;            }else {                //没有激活                return 3;            }        }else {            //密码错误            return 2;        }    }        public UserDao getUserDao() {        return userDao;    }        public void activeUser(String userCode) {        // TODO Auto-generated method stub        userDao.activeUser(userCode);    }        public void setUserDao(UserDao userDao) {        this.userDao = userDao;    }    public void addUser(User user) {        // TODO Auto-generated method stub         userDao.addUser(user);    }    public boolean findUserByUsername(String username) {        // TODO Auto-generated method stub        Long count = userDao.findUserByUsernameReturnNum(username);        if(count==0)            return true;        else            return false;    }}
UserService.java

 

package com.Gary.dao;import java.math.BigInteger;import org.hibernate.Session;import org.hibernate.query.NativeQuery;import org.springframework.orm.hibernate5.support.HibernateDaoSupport;import com.Gary.domain.User;public class UserDao extends HibernateDaoSupport{    public void addUser(User user) {     Session session =    getHibernateTemplate().getSessionFactory().getCurrentSession();     session.save(user);     }    public Long findUserByUsernameReturnNum(String username){        // TODO Auto-generated method stub        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();        String sql = "select count(*) from user where username = ?";        NativeQuery query = session.createSQLQuery(sql);        //1号位置设置为username        query.setParameter(1,username);        BigInteger result = (BigInteger)query.uniqueResult();                return result.longValue();    }        public void activeUser(String userCode) {        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();        String sql = "update user set state = 1 where code = ?";        NativeQuery query = session.createSQLQuery(sql);        query.setParameter(1,userCode);        query.executeUpdate();    }    public User findUserByUsernameReturnUser(User user) {        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();        String sql = "select * from user where username = ?";        NativeQuery query = session.createSQLQuery(sql);            query.addEntity(User.class);        query.setParameter(1, user.getUsername());        User temp =(User) query.uniqueResult();                return temp;    }    }
UserDao.java

 

   对用户登陆进行测试

  此时数据库中纯在两条数据

  

 

  测试失败:用户名不存在,用户密码登陆错误,用户未激活

 

  测试成功:跳转index页面

 

  添加一个提示用户去激活邮箱的界面

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib uri="/struts-tags" prefix="s" %>
registerSuccess.jsp

 

 

 

regex:.*
/login.jsp
/login.jsp
/index.jsp
/login.jsp
/registerSuccess.jsp
struct.xml

 

Cynical丶Gary
head.html

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib uri="/struts-tags" prefix="s" %>
login.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib uri="/struts-tags" prefix="s" %>
registerSuccess.jsp

 

package com.Gary.web;import java.util.UUID;import org.apache.struts2.ServletActionContext;import com.Gary.domain.User;import com.Gary.service.UserService;import com.Gary.utils.MailUtils;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;//采用模型驱动 泛型Userpublic class UserAction extends ActionSupport implements ModelDriven
{ public User user = new User(); private String userCode; private UserService userService; //用户登陆 public String Login() throws Exception { int success = userService.checkUser(user); if(success == 0) { return "toIndex"; } else if(success ==1) { //用户名不存在 ActionContext.getContext().put("error","用户名不存在!!"); return "login"; } else if(success ==2) { //密码错误 ActionContext.getContext().put("error", "密码错误"); return "login"; } else if(success ==3) { //用户未激活 ActionContext.getContext().put("error","用户未激活!!"); return "login"; }else { return "error"; } } //用户激活 public String active() throws Exception { userService.activeUser(userCode); return "toLogin"; } public String getUserCode() { return userCode; } public void setUserCode(String userCode) { this.userCode = userCode; } //校验用户名是否存在 public String checkUsername() throws Exception { //获得用户username boolean success = userService.findUserByUsername(user.getUsername()); //获得原生Servlet对象 ServletActionContext.getResponse().getWriter().write("{\"success\":"+success+"}"); return null; } public String register() throws Exception { // TODO Auto-generated method stub //没有的数据手动封装 user.setState(0); user.setCode(UUID.randomUUID().toString()); user.setImage("0"); user.setLevel(1); user.setCoin(1000); //是否添加成功 userService.addUser(user); MailUtils.sendMail(user.getEmail(), "请激活", "恭喜您注册成功,请点击下面的链接激活!!
点击这里"); return "toRegisterSuccess"; } public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } public User getModel() { return user; }}
UserAction.java

 

package com.Gary.service;import java.math.BigInteger;import com.Gary.dao.UserDao;import com.Gary.domain.User;public class UserService {    private UserDao userDao;    public int checkUser(User user) {        User temp = userDao.findUserByUsernameReturnUser(user);        //用户名不存在        if(temp==null)        {            return 1;        }        //判断密码是否相同        if(temp.getPassword().equals(user.getPassword()))        {            if(temp.getState()==1)            {                //登陆成功                return 0;            }else {                //没有激活                return 3;            }        }else {            //密码错误            return 2;        }    }        public UserDao getUserDao() {        return userDao;    }        public void activeUser(String userCode) {        // TODO Auto-generated method stub        userDao.activeUser(userCode);    }        public void setUserDao(UserDao userDao) {        this.userDao = userDao;    }    public void addUser(User user) {        // TODO Auto-generated method stub         userDao.addUser(user);    }    public boolean findUserByUsername(String username) {        // TODO Auto-generated method stub        Long count = userDao.findUserByUsernameReturnNum(username);        if(count==0)            return true;        else            return false;    }}
UserService.java

 

package com.Gary.dao;import java.math.BigInteger;import org.hibernate.Session;import org.hibernate.query.NativeQuery;import org.springframework.orm.hibernate5.support.HibernateDaoSupport;import com.Gary.domain.User;public class UserDao extends HibernateDaoSupport{    public void addUser(User user) {     Session session =    getHibernateTemplate().getSessionFactory().getCurrentSession();     session.save(user);     }    public Long findUserByUsernameReturnNum(String username){        // TODO Auto-generated method stub        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();        String sql = "select count(*) from user where username = ?";        NativeQuery query = session.createSQLQuery(sql);        //1号位置设置为username        query.setParameter(1,username);        BigInteger result = (BigInteger)query.uniqueResult();                return result.longValue();    }        public void activeUser(String userCode) {        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();        String sql = "update user set state = 1 where code = ?";        NativeQuery query = session.createSQLQuery(sql);        query.setParameter(1,userCode);        query.executeUpdate();    }    public User findUserByUsernameReturnUser(User user) {        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();        String sql = "select * from user where username = ?";        NativeQuery query = session.createSQLQuery(sql);            query.addEntity(User.class);        query.setParameter(1, user.getUsername());        User temp =(User) query.uniqueResult();                return temp;    }    }
User.Dao

 

 

 

 

项目过程中的问题

 

一、Struts has detected an unhandled exception:

Messages:
  1. Duplicate entry 'Gary' for key 'username_UNIQUE'
  2. could not execute statement
  3. could not execute statement; SQL [n/a]; constraint [username_UNIQUE]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement

 

 

   注册信息重名,不能添加重复的username

 

 

 

 

 

转载于:https://www.cnblogs.com/1138720556Gary/p/9863973.html

你可能感兴趣的文章
SQL Server中Text和varchar(max)数据类型区别
查看>>
Markdown的基本语法
查看>>
lintcode-87-删除二叉查找树的节点
查看>>
Creating a blocking Queue<T> in .NET
查看>>
621. Task Scheduler
查看>>
IIS支持flv文件
查看>>
目标反射回波检测算法及其FPGA实现 之二:互相关/卷积/FIR电路的实现
查看>>
[Linux]常用命令与目录全拼
查看>>
并查集详解 (转)
查看>>
Junit测试Controller(MockMVC使用),传输@RequestBody数据解决办法
查看>>
jQuery Post
查看>>
从总数中生成一定数量的随机数
查看>>
Strut2页面传参跳转 --Struts2
查看>>
5.User Interface/ActionBar
查看>>
Integer 与 int 中的 ==
查看>>
ReactJS实用技巧(1):JSX与HTML的那些不同
查看>>
java语言程序设计(基础篇) 第2章 基本程序设计 课本源代码
查看>>
装饰者模式 详解
查看>>
【模板】卢卡斯定理
查看>>
[POJ 1273]Drainage Ditches
查看>>