注册的基本代码实现
一、用户注册
基本点注册代码实现:
分析:表单提交数据 --> web层收集数据 --> 封装数据 --> 传递数据 --> 三层架构代码
GitHub代码下载链接:https://github.com/Vmetrio/Register
1、表单提交数据
2、web层
package com.itshop.web.servlet;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.security.Provider.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import javax.mail.MessagingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import com.itshop.domain.User;
import com.itshop.utils.CommonsUtils;
import com.itshop.utils.MailUtils;
import com.itshop.service.UserService;
public class RegisterServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
//获得表单数据
Map<String, String[]> properties = request.getParameterMap();
User user = new User();
try {
//自己制定一个类型转换器(将String转成Date)
ConvertUtils.register(new Converter() {
@Override
public Object convert(Class clazz, Object value) {
//将string转成date
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date parse = null;
try {
parse = format.parse(value.toString());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return parse;
}
}, Date.class);
//映射封装
BeanUtils.populate(user, properties);
} catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
//private String uid;
user.setUid(CommonsUtils.getUUID());
//private String telephone;
user.setTelephone(null);
//private int state;//是否激活
user.setState(0);
//private String code;
String activeCode = CommonsUtils.getUUID();
user.setCode(activeCode);
//将user传给service层
UserService service = new UserService();
boolean isRegistersuccess = service.regist(user);
if(isRegistersuccess) {
//跳转到注册成功页面
response.sendRedirect(request.getContextPath()+"/registerSuccess.jsp");
//发送激活邮件
String emailMsg = "恭喜你注册成功,请点击下面的链接进行激活账户"
+ "<a href='http://localhost:8080/Shop/active?activeCode="+activeCode+"'>"
+"http://localhost:8080/Shop/active?activeCode="+activeCode+ "</a>";
try {
MailUtils.sendMail(user.getEmail(), emailMsg);
} catch (MessagingException e) {
e.printStackTrace();
}
}else {
//registerFail.jsp
response.sendRedirect(request.getContextPath()+"/registerFail.jsp");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
3、封装数据
package com.itshop.domain;
import java.util.Date;
public class User {
private String uid;
private String username;
private String password;
private String name;
private String email;
private String telephone;
private Date birthday;
private String sex;
private int state;//是否激活
private String code;//激活码
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
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 Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
4、传递数据
//将user传给service层
UserService service = new UserService();
boolean isRegistersuccess = service.regist(user);
5、三层架构代码
service层:
package com.itshop.service;
import java.sql.SQLException;
import com.itshop.dao.UserDao;
import com.itshop.domain.User;
public class UserService {
public boolean regist(User user) {
UserDao dao = new UserDao();
int row = 0;
try {
row = dao.regist(user);
} catch (SQLException e) {
e.printStackTrace();
}
return row>0?true:false;
}
//状态码激活
public void active(String activeCode) {
UserDao dao = new UserDao();
try {
dao.active(activeCode);
} catch (SQLException e) {
e.printStackTrace();
}
}
public boolean checkUsername(String username) {
UserDao dao = new UserDao();
Long isExist = 0L;
try {
isExist = dao.checkUsername(username);
} catch (SQLException e) {
e.printStackTrace();
}
return isExist>0?true:false;
}
}
Dao层:
package com.itshop.dao;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import com.itshop.domain.User;
import com.itshop.utils.DataSourceUtils;
public class UserDao {
public int regist(User user) throws SQLException {
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "insert into user values(?,?,?,?,?,?,?,?,?,?)";
int update = runner.update(sql,user.getUid(),user.getUsername(),user.getPassword(),
user.getName(),user.getEmail(),user.getTelephone(),user.getBirthday(),
user.getSex(),user.getState(),user.getCode());
return update;
}
//状态码激活
public void active(String activeCode) throws SQLException {
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "update user set state=? where code=?";
runner.update(sql,1,activeCode);;
}
public Long checkUsername(String username) throws SQLException {
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "select count(*) from user where username=?";
Long query = (Long) runner.query(sql, new ScalarHandler(), username);
return query;
}
}
二、表单校验
<!-- 引入表单校验插件 -->
<script src="js/jquery.validate.min.js" type="text/javascript"></script>
1、基本表单校验
<style>
.error{
color:red
}
</style>
<script type="text/javascript">
$(function() {
$("#myform").validate({
rules : {
"username" : {
"required" : true,
"checkUsername" : true
},
"password" : {
"required" : true,
"rangelength" : [ 6, 12 ]
},
"repassword" : {
"required" : true,
"rangelength" : [ 6, 12 ],
"equalTo" : "#password"
},
"email" : {
"required" : true,
"email" : true
},
"sex" : {
"required" : true
}
},
messages : {
"username" : {
"required" : "用户名不能为空",
"checkUsername" : "用户名已存在"
},
"password" : {
"required" : "密码不能为空",
"rangelength" : "密码长度6-12位"
},
"repassword" : {
"required" : "密码不能为空",
"rangelength" : "密码长度6-12位",
"equalTo" : "两次密码不一致"
},
"email" : {
"required" : "邮箱不能为空",
"email" : "邮箱格式不正确"
}
}
})
});
</script>
2、自定义表单校验
<script type="text/javascript">
//自定义校验规则
$.validator.addMethod(
//规则的名称
"checkUsername",
//校验函数
function(value,element,params){
//定义一个标志
var flag = false;
//value:输入的内容
//element:被校验的元素对象
//params:规则对应的参数值
//目的:对输入的username进行ajax校验
$.ajax({
"async":false,
"url":"${pageContext.request.contextPath}/checkUsername",
"data":{"username":value},
"type":"POST",
"dataType":"json",
"success":function(data){
flag = data.isExist;
}
});
return !flag;
}
)
$(function() {
$("#myform").validate({
rules : {
"username" : {
"required" : true,
"checkUsername" : true
},
"password" : {
"required" : true,
"rangelength" : [ 6, 12 ]
},
"repassword" : {
"required" : true,
"rangelength" : [ 6, 12 ],
"equalTo" : "#password"
},
"email" : {
"required" : true,
"email" : true
},
"sex" : {
"required" : true
}
},
messages : {
"username" : {
"required" : "用户名不能为空",
"checkUsername" : "用户名已存在"
},
"password" : {
"required" : "密码不能为空",
"rangelength" : "密码长度6-12位"
},
"repassword" : {
"required" : "密码不能为空",
"rangelength" : "密码长度6-12位",
"equalTo" : "两次密码不一致"
},
"email" : {
"required" : "邮箱不能为空",
"email" : "邮箱格式不正确"
}
}
});
});
</script>