基于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; } }
用户注册流程
一开始用户先来到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()中手动封装表单未添加数据
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中配置
配置Struts
在UserAction对Struts进行配置
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
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
书写表单校验提示信息
让提示信息变得好看
错误信息颜色变红
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"%>
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; }}
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; }}
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(); } }
邮箱注册
邮箱类
// 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); }}
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; }}
编写用户激活逻辑,设置用户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; }}
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; }}
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(); } }
用户登陆
用户登录
用户登录流程图
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; }}
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; }}
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; } }
对用户登陆进行测试
此时数据库中纯在两条数据
测试失败:用户名不存在,用户密码登陆错误,用户未激活
测试成功:跳转index页面
添加一个提示用户去激活邮箱的界面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib uri="/struts-tags" prefix="s" %>恭喜你注册成功,请到您刚填写的邮箱去激活用户!!谢谢
regex:.* /login.jsp /login.jsp /index.jsp /login.jsp /registerSuccess.jsp
Cynical丶Gary
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib uri="/struts-tags" prefix="s" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib uri="/struts-tags" prefix="s" %>恭喜你注册成功,请到您刚填写的邮箱去激活用户!!谢谢
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; }}
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; }}
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; } }
项目过程中的问题
一、Struts has detected an unhandled exception:
Messages: |
|
注册信息重名,不能添加重复的username