<!-- ************************************************************登陆成功页面******************************************************************************** --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>index.jsp</title> </head> <body> <h1>注册成功!欢迎进入首页</h1> </body> </html> <!-- ************************************************************注册页面页面******************************************************************************** --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1 align="center">欢迎注册</h1> <form action="Servlet" method="post"> <table width="500px" align="center" border="1px"> <tr> <td>姓名</td> <td> <input type="text" name="username" value="${user.username}" /><span>${user.error.username }</span> </td> </tr> <tr> <td>地址</td> <td><input type="text" name="address" value="${user.address}"/><span>${user.error.address }</span></td> </tr> <tr> <td>邮箱</td> <td><input type="text" name="email" value="${user.email}"/><span>${user.error.email}</span></td> </tr> <tr> <td>年龄</td> <td><input type="text" name="userage" value="${user.userage}" /></td> </tr> <tr> <td>生日</td> <td><input type="text" name="birthday" value="${user.birthday}"/><span>${user.error.birthday}</span></td> </tr> <tr> <td align="center" colspan="2"><input type="submit" value="Reg" /> <input type="reset" value="reset" /></td> </tr> </table> </form> </body> </html> <!-- ***********************************************************实体类******************************************************************************** --> package com.pojo; import java.util.Date; public class Users { private String userid; private String username; private String address; private String email; private int userage; private Date birthday; public String getUserid() { return userid; } public void setUserid(String userid) { this.userid = userid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public int getUserage() { return userage; } public void setUserage(int userage) { this.userage = userage; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Users() { super(); } public Users(String userid, String username, String address, String email, int userage, Date birthday) { super(); this.userid = userid; this.username = username; this.address = address; this.email = email; this.userage = userage; this.birthday = birthday; } @Override public String toString() { return "Users [userid=" + userid + ", username=" + username + ", address=" + address + ", email=" + email + ", userage=" + userage + ", birthday=" + birthday + "]"; } } <!-- ***********************************************************过渡实体类******************************************************************************** --> package com.pojo; import java.util.LinkedHashMap; import java.util.Map; import org.apache.commons.beanutils.locale.converters.DateLocaleConverter; /** * 此类为一个过渡 * 以全String类型接收JSP中传过来的数据 * 处理完业务后返回 * @author lin * */ public class UserBean { private String userid; private String username; private String address; private String email; private String userage; private String birthday; //用于存储错误的信息 private Map<String, String> error = new LinkedHashMap<>(); @Override public String toString() { return "UserBean [userid=" + userid + ", username=" + username + ", address=" + address + ", email=" + email + ", userage=" + userage + ", birthday=" + birthday + ", error=" + error + "]"; } public String getUserid() { return userid; } public void setUserid(String userid) { this.userid = userid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getUserage() { return userage; } public void setUserage(String userage) { this.userage = userage; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } public Map<String, String> getError() { return error; } public void setError(Map<String, String> error) { this.error = error; } public UserBean(String userid, String username, String address, String email, String userage, String birthday, Map<String, String> error) { super(); this.userid = userid; this.username = username; this.address = address; this.email = email; this.userage = userage; this.birthday = birthday; this.error = error; } public UserBean() { super(); } /** * 以下进行对数据的校验 */ public boolean validate(){ boolean isOK=true; if(checkUserName(isOK) & checkEmail(isOK) & checkBirthday(isOK)){ isOK=true; }else{ isOK=false; } return isOK; } /** * 对生日的规则 * @param isOK * @return */ private boolean checkBirthday(boolean isOK) { if(birthday!=null && !birthday.trim().equals("")) { DateLocaleConverter dlc=new DateLocaleConverter(); try{ dlc.convert(birthday,"yyyy-MM-dd"); }catch(Exception e){ System.out.println("转换失败"); isOK=false; error.put("birthday","日期格式不对"); } } return isOK; } /** * 对名称的规则 * @param isOK * @return */ private boolean checkUserName(boolean isOK) { if(username==null || username.trim().equals("")){ isOK=false; error.put("username", "用户名不能为空"); }else{ if(!username.matches("[A-Za-z]{3,8}")){ isOK=false; error.put("username","用户名必须是3到8位字母"); } } return isOK; } /**对邮箱的规则 * @param isOK * @return */ private boolean checkEmail(boolean isOK) { if(email==null || email.trim().equals("")){ isOK=false; error.put("email", "邮箱不能为空"); }else{ if(!email.matches("\\w+@\\w+(\\.\\w+)+")){ isOK=false; error.put("email","邮箱格式不对"); } } return isOK; } } <!-- ***********************************************************Servlet******************************************************************************** --> package com.servlets; import java.io.IOException; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Enumeration; import java.util.UUID; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.beanutils.Converter; import com.pojo.UserBean; import com.pojo.Users; /** * Servlet implementation class Servlet */ @WebServlet("/Servlet") public class Servlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Servlet() { } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); //将数据进行封装 UserBean requestToBean = requestToBean(request, UserBean.class); if (requestToBean.validate()) { //对传入的数据进行校验,成功则将过度类赋给实体类 Users user2 = new Users(); // BeanUtils可以对数据进行复制,自动数据类型转化 try { //将BeanUtils不能转化的日期类型进行转化 copyBean(user2, requestToBean); //加上ID user2.setUserid(UUID.randomUUID().toString()); System.out.println("对象封装成功!"+user2); response.sendRedirect("/JSP-Servlet.3.3/index.jsp"); } catch (Exception e) { e.printStackTrace(); } } else { // 如果校验不符合规则取出error HttpSession session = request.getSession(); session.setAttribute("user", requestToBean); response.sendRedirect("/JSP-Servlet.3.3/reg.jsp"); } } /** * 日期类型的转化 * @param user2 * @param requestToBean */ private void copyBean(Users user2, UserBean requestToBean) { ConvertUtils.register(new Converter() { // 是把时间类型进行转换 @Override //先判断是否为空 public Object convert(Class type, Object value) { if (value == null) { return null; } String str = (String) value; if (str.trim().equals("")) { return null; } //规定格式 SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd"); try { return s.parse(str.trim()); } catch (Exception e) { throw new RuntimeException(e); } } }, Date.class); try { BeanUtils.copyProperties(user2, requestToBean); } catch (Exception e) { throw new RuntimeException(e); } } /** * 利用泛型,反射得到实体类中的所有属性,方法 * @param request * @param c * @return */ private <T> T requestToBean(HttpServletRequest request, Class<T> c) { try { //泛型接收 T t = c.newInstance(); //获取请求中的数据 Enumeration<String> e = request.getParameterNames(); //对数据操作 while (e.hasMoreElements()) { String name = e.nextElement(); String value = request.getParameter(name); //setProperty提供三个参数,第一是JavaBean对象,第二个是要操作的属性名,第三个为要设置的具体的值 BeanUtils.setProperty(t, name, value); } return t; } catch (Exception e) { throw new RuntimeException(e); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }