模式2——用户注册
register.jsp:负责向用户显示注册页面,用户名、密码、确认密码、E-mail
|提交给
ControllerServlet:用来接受客户端提交的请求,然后进行验证:基本语法格式的验证,该用户是否是已经存在的用户 如果该用户是合法的,将该用户加入到user这个集合对象昂中,然后跳转到loginSuccess.jsp 否则,跳转到register.jsp,将错误信息显示出来,让用户重新注册
RegisterFormBean:封装用户输入表单的数据,并做数据格式的验证
UserBean:用来保存用户的信息,包括用户名、密码、确认密码
DbUtil:集合对象users,<”zhangsan”,user1>
添加用户的方法insertUser(User user),
自定义异常:DbUtileException
Register.jsp部分:
<jsp:useBean id="registerForm"class="com.csdn.beans.RegisterFormBean" scope="request"/>
<jsp:setProperty property="*" name="registerForm"/>
<form action="registerServlet"method="post">
<table>
<tbody><tr>
<td>用户名</td>
<td><input type="text"name="name" value="<%=registerForm.getName()%>"/></td>
<td><%=registerForm.getErrorMsg("name") %></td></tr>
<tr>
<td>密 码</td>
<td><input type="password"name="password" value="<%=registerForm.getPassword()%>"/></td>
<td><%=registerForm.getErrorMsg("password") %></td></tr>
<tr>
<td>确认密码</td>
<td><input type="password"name="password2"/></td>
<td> </td></tr>
<tr>
<td> email</td>
<td><input type="text"name="email" value="<%=registerForm.getEmail()%>"/></td>
<td><%=registerForm.getErrorMsg("email") %></td></tr>
<tr>
<td><input type="submit"name="submit" value="注册"/></td>
<td> </td>
<td> </td></tr>
</tbody></table>
ControllerServlet部分:
doPost:
RequestDispatcher rd=null;
//获取表单提交的数据,封装在RegisterFormBean对象中,进行语法格式的验证
RegisterFormBean registerForm=new RegisterFormBean();
request.setAttribute("registerForm",registerForm);
registerForm.setName(request.getParameter("name"));
registerForm.setPassword(request.getParameter("password"));
registerForm.setPassword2(request.getParameter("password2"));
registerForm.setEmail(request.getParameter("email"));
if(registerForm.validate()){
//如果为假,转向到注册页面register.jsp
rd=request.getRequestDispatcher("/register.jsp");
rd.forward(request, response);
return;
}
//语法格式验证之后,将RegisterFormBean对象存储带USerBean对象中,然后调用DbUtil中的insertUtil
UserBean user=new UserBean();
user.setName(registerForm.getName());
user.setPassword(registerForm.getPassword());
user.setEmail(registerForm.getEmail());
DbUtil db=DbUtil.getInstance();
try {
//如果用户已经存在
db.insertUser(user);
} catch (DbUtilException ex) {
//处理该异常
registerForm.setErrorMsg("name", ex.getErrorMsg("name"));
//转到register.jsp页面
rd=request.getRequestDispatcher("/register.jsp");
rd.forward(request,response);
return;
}
//插入成功直接跳过catch
HttpSession session=request.getSession();
session.setAttribute("user",user);
rd=request.getRequestDispatcher("/loginSuccess.jsp");
rd.forward(request,response);
RegisterFormBean部分:
private String name="";
private String password="";
private String password2="";
private String email="";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword2() {
return password2;
}
public void setPassword2(String password2) {
this.password2 = password2;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
private Hashtable errors=new Hashtable();
public boolean validate(){
boolean okAll=true;
//基本语法格式的验证
if(name.trim().equals("")){
errors.put("name","输入姓名");
okAll=false;
}if(password.length()>10 || password.length()<6){
errors.put("password","密码必须包含6-10个字符");
okAll=false;
}if(password2.equals(password)){
errors.put("password","两次输入密码不匹配");
okAll=false;
//正则表达式
}if(!email.matches("[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+")){
errors.put("email", "email格式不正确");
okAll=false;
}
return okAll;
}
public void setErrorMsg(String err,String errorMsg){
if(err!=null && errorMsg!=null){
errors.put(err, errorMsg);
}
}
public String getErrorMsg(String err){
String message=(String) errors.get(err);
//如果没有找到对应的制定错误消息就返回空串,否则返回粗偶消息
return (message==null)? "" : message;
}
UserBean部分:
private String name;
private String password;
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
//验证方法
public boolean validatePassord(String password){
if(this.password.equals(password)){
return true;
}else{
return false;
}
}
DbUtil部分:
//存储从数据库中提取的用户信息
private Hashtable users=new Hashtable();
static DbUtil instance=new DbUtil();
private DbUtil(){
UserBean user1=new UserBean();
user1.setName("张三");
user1.setPassword("1234567");
user1.setEmail("zhangsan@163.com");
UserBean user2=new UserBean();
user2.setName("里斯");
user2.setPassword("1234567");
user2.setEmail("lisi@163.com");
UserBean user3=new UserBean();
user3.setName("万古");
user3.setPassword("1234567");
user3.setEmail("wang@163.com");
users.put(user1.getName(), user1);
users.put(user2.getName(), user2);
users.put(user3.getName(), user3);
}
public static DbUtil getInstance(){
return instance;
}
public UserBean getUser(String name){
UserBean user=(UserBean) users.get(name);
return user;
}
public void insertUser(UserBean user)throws DbUtilException{
if(user==null){
return;
}
String userName=user.getName();
if(users.get(userName)!=null){
//说明该用户名已经存在
DbUtilException ex=new DbUtilException();
ex.setErrorsMsg("name", "该用户已经存在");
throw ex;
}
//说明该用户不存在
users.put(userName,user);
}