直接上代码了:
com.ethan.accountactivate.domain
package com.ethan.accountactivate.domain;
public class User {
private int id;
private String name;
private String password;
private String email;
private boolean activated;
private String randKey;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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 isActivated() {
return activated;
}
public void setActivated(boolean activated) {
this.activated = activated;
}
public String getRandKey() {
return randKey;
}
public void setRandKey(String randKey) {
this.randKey = randKey;
}
}
com.ethan.accountactivate.dao
package com.ethan.accountactivate.dao;
import com.ethan.accountactivate.domain.User;
public interface UserDao {
void addUser(User user);
void updateUser(User user);
User findUserById(int id);
User findUserByName(String name);
}
没有使用任何数据库,直接利用内存了。
com.ethan.accountactivate.dao.impl
package com.ethan.accountactivate.dao.impl;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;
import com.ethan.accountactivate.dao.UserDao;
import com.ethan.accountactivate.domain.User;
public class UserDaoImpl implements UserDao {
private UserDaoImpl() {}
private static UserDaoImpl instance = new UserDaoImpl();
public static UserDaoImpl getInstance() {
return instance;
}
Map<Integer,User> users = new HashMap<Integer,User>();
private int nextId = 1;
@Override
public void addUser(User user) {
user.setId(nextId++);
//增加用户的时候产生randKey
user.setRandKey(UUID.randomUUID().toString());
users.put(user.getId(), user);
}
@Override
public void updateUser(User user) {
users.put(user.getId(), user);
}
@Override
public User findUserById(int id) {
return users.get(id);
}
@Override
public User findUserByName(String name) {
Collection values = users.values();
Iterator<User> itr = values.iterator();
while(itr.hasNext()) {
User user = itr.next();
if(user.getName().equals(name)) {
return user;
}
}
return null;
}
}
com.ethan.accountactivate.servlets
package com.ethan.accountactivate.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RegisterUserUI extends HttpServlet {
/**
* Constructor of the object.
*/
public RegisterUserUI() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/pages/registerUserUI.jsp").forward(request, response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}
package com.ethan.accountactivate.servlets;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ethan.accountactivate.dao.UserDao;
import com.ethan.accountactivate.dao.impl.UserDaoImpl;
import com.ethan.accountactivate.domain.User;
import com.ethan.accountactivate.utils.AccountActivateUtil;
import com.ethan.accountactivate.utils.EmailUtil;
public class RegisterUser extends HttpServlet {
//要做成单例,否则各种操作的servlet中的dao(内存)不一致,users map没有意义
private UserDao userDao = UserDaoImpl.getInstance();
/**
* Constructor of the object.
*/
public RegisterUser() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName = request.getParameter("userName");
String password = request.getParameter("password");
String password2 = request.getParameter("password2");
String email = request.getParameter("email");
//记录错误信息
Map<String,String> errors = new HashMap<String,String>();
if(userName==null||userName.trim().length()<=0) {
errors.put("userName", "必须输入用户名!");
} else if(userName!=null&&userDao.findUserByName(userName)!=null) {
errors.put("userName", "用户已存在!");
}
if(password==null||password.trim().length()<3) {
errors.put("password", "密码至少要有3个字符!");
} else if(password!=null&&!password.equals(password2)) {
errors.put("password2", "确认密码不一致!");
}
if(email==null||!email.matches("[a-zA-Z0-9\\._-]+@[a-zA-Z0-9\\._-]+(\\.[a-zA-Z0-9_-]+)+")) {
errors.put("email", "email不合法!");
}
if(!errors.isEmpty()) {
request.setAttribute("errors", errors);
request.getRequestDispatcher("/RegisterUserUI").forward(request, response);
return;
}
User user = new User();
user.setName(userName);
user.setPassword(password);
user.setEmail(email);
//user.setRandKey(UUID.randomUUID().toString());
//采用内存数据库,hashMap
userDao.addUser(user);
request.getSession().setAttribute("user", user);
try {
EmailUtil.sendMail(user);
} catch (Exception e) {
System.out.println("send error");
e.printStackTrace();
}
request.getRequestDispatcher("/WEB-INF/pages/registerUser.jsp").forward(request, response);
return;
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}
package com.ethan.accountactivate.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginUI extends HttpServlet {
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/pages/loginUI.jsp").forward(request, response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
package com.ethan.accountactivate.servlets;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ethan.accountactivate.dao.UserDao;
import com.ethan.accountactivate.dao.impl.UserDaoImpl;
import com.ethan.accountactivate.domain.User;
public class Login extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName = request.getParameter("userName");
String password = request.getParameter("password");
//记录错误信息
Map<String,String> errors = new HashMap<String,String>();
if(userName==null||userName.trim().length()<=0) {
errors.put("userName", "必须输入用户名!");
}
UserDao userDao = UserDaoImpl.getInstance();
User user = userDao.findUserByName(userName);
if(user==null) {
errors.put("userName", "用户名不存在!");
} else {
if(!user.getPassword().equals(password)) {
errors.put("userName", "密码不对!");
}
}
if(!errors.isEmpty()) {
request.setAttribute("errors", errors);
request.getRequestDispatcher("/LoginUI").forward(request, response);
return;
}
request.getSession().setAttribute("user", user);
request.getRequestDispatcher("/WEB-INF/pages/login.jsp").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
激活:
package com.ethan.accountactivate.servlets;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ethan.accountactivate.dao.UserDao;
import com.ethan.accountactivate.dao.impl.UserDaoImpl;
import com.ethan.accountactivate.domain.User;
import com.ethan.accountactivate.utils.AccountActivateUtil;
public class ActivateAccount extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String idValue = request.getParameter("id");
int id = 0;
try {
id = Integer.parseInt(idValue);
} catch (Exception e) {
//一片空白
return;
}
UserDao userDao = UserDaoImpl.getInstance();
User user = userDao.findUserById(id);
//user.setActivated(true);
user.setActivated(AccountActivateUtil.verifyCheckcode(request, user));
//内存中的对象,改了就会自动改。下边可以不要
userDao.updateUser(user);
request.getSession().setAttribute("user", user);
request.getRequestDispatcher("/WEB-INF/pages/login.jsp").forward(request, response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}