<!-- ************************************************************登陆成功页面******************************************************************************** -->
<%@ 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);
}
}