注册功能
1.分析
!!因为页面是html格式的,为保证数据传输,请求采用ajax发送
2.代码实现
前端
表单验证
<script>
function checkUsername(){
var username = $("#username");
var regexp = /^\w{8,20}$/;
var flag = regexp.test(username.val());
if(flag){
username.css("border","");
}else{
username.css("border","1px solid red");
}
return flag;
}
function checkPassword(){
var password = $("#password");
var regexp = /^\w{8,20}$/;
var flag = regexp.test(password.val());
if(flag){
password.css("border","");
}else{
password.css("border","1px solid red");
}
return flag;
}
function checkEmail(){
var email = $("#email");
var regexp = /^\w+@\w+\.\w+$/;
var flag = regexp.test(email.val());
if(flag){
email.css("border","");
}else{
email.css("border","1px solid red");
}
return flag;
}
function checkName(){
var name = $("#name");
var flag = name.val().length != 0;
if(flag){
name.css("border","");
}else{
name.css("border","1px solid red");
}
return flag;
}
function checkTelephone(){
var telephone = $("#telephone");
var regexp = /^1+\d{10}$/;
var flag = regexp.test(telephone.val());
if(flag){
telephone.css("border","");
}else{
telephone.css("border","1px solid red");
}
return flag;
}
function checkBirthday(){
var birthday = $("#birthday");
var flag = birthday.val().length != 0;
if(flag){
birthday.css("border","");
}else{
birthday.css("border","1px solid red");
}
return flag;
}
function checkCode() {
var check = $("#check");
var flag = check.val().length != 0;
if(flag){
check.css("border","");
}else{
check.css("border","1px solid red");
}
return flag;
}
页面加载完成之后,发送ajax请求,完成注册
$(function(){
$("#registerForm").submit(function(){
if(checkUsername() && checkPassword() && checkEmail() && checkName()
&& checkTelephone() && checkBirthday() && checkCode()){
$.post("user/register",$(this).serialize(),function(data){
if(data.flag){
location.href = "register_ok.html";
}else{
$("#errorMsg").html(data.errorMsg);
}
});
}else{
alert("请填写完整");
}
return false;
});
$("#username").blur(checkUsername);
$("#password").blur(checkPassword);
$("#email").blur(checkEmail);
$("#name").blur(checkName);
$("#telephone").blur(checkTelephone);
$("#birthday").blur(checkBirthday);
$("#check").blur(checkCode);
});
后端
servlet
public void register(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
String checkcode = (String)session.getAttribute("CHECKCODE_SERVER");
String check = req.getParameter("check");
ResultInfo info = new ResultInfo();
boolean flag = false;
if(check.equalsIgnoreCase(checkcode)){
session.removeAttribute("CHECKCODE_SERVER");
Map<String, String[]> map = req.getParameterMap();
User user = new User();
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
flag = userService.register(user);
info.setFlag(flag);
if(!flag){
info.setErrorMsg("注册失败");
}
}else{
info.setFlag(flag);
info.setErrorMsg("验证码错误");
}
ObjectMapper jackson = new ObjectMapper();
String infostr = jackson.writeValueAsString(info);
resp.setContentType("application/json;charset=utf-8");
resp.getWriter().write(infostr);
//jackson.writeValue(resp.getWriter(),info);
}
/**
* 账号激活
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
public void active(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String code = req.getParameter("code");
boolean flag = userService.active(code);
String msg;
if(flag){
msg = "激活成功,请<a href='login.html'>登录</a>";
}else{
msg = "激活失败或已激活";
}
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write(msg);
}
service
/**
* 用户注册
* @return
*/
@Override
public boolean register(User user) {
User u = userDao.findByUsername(user.getUsername());
boolean flag = false;
if(u == null){
user.setCode(UuidUtil.getUuid());
user.setStatus("N");
userDao.save(user);
String text = "<p><a href='http://localhost/travel/user/active?code="+user.getCode()+"'>点击完成注册</a></p>";
MailUtils.sendMail(user.getEmail(),text,"用户激活");
flag = true;
}
return flag;
}
/**
* 用户激活
* @param code
* @return
*/
@Override
public boolean active(String code) {
User user = userDao.isActive(code);
boolean flag = false;
if("N".equals(user.getStatus())){
userDao.active(code);
flag = true;
}
return flag;
}
dao
/**
* 用户注册
* @param user
*/
@Override
public void save(User user) {
String sql = "insert into tab_user(username,password,name,birthday,sex,telephone,email,status,code) values(?,?,?,?,?,?,?,?,?)";
template.update(sql,
user.getUsername(),
user.getPassword(),
user.getName(),
user.getBirthday(),
user.getSex(),
user.getTelephone(),
user.getEmail(),
user.getStatus(),
user.getCode());
}
/**
* 根据用户名查询用户
* @param username
* @return
*/
@Override
public User findByUsername(String username) {
User user = null;
try{
String sql = "select * from tab_user where username = ?";
user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username);
}catch(Exception e){
e.printStackTrace();
}
return user;
}
/**
* 用户是否激活
* @param code
* @return
*/
@Override
public User isActive(String code) {
String sql = "select * from tab_user where code = ?";
User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class),code);
return user;
}
/**
* 激活用户
* @param code
*/
@Override
public void active(String code) {
String sql = "update tab_user set status = 'Y' where code = ?";
template.update(sql,code);
}