注册的基本代码实现
一、用户注册
基本点注册代码实现:
分析:表单提交数据 --> 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() {@Overridepublic Object convert(Class clazz, Object value) {//将string转成dateSimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");Date parse = null;try {parse = format.parse(value.toString());} catch (ParseException e) {// TODO Auto-generated catch blocke.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.jspresponse.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>