登录页面业务逻辑分析
展示层(web层):
- 浏览器输入账号密码提交登录信息给LoginSevlet
- LoginSevlet获取用户名密码,封装成User类,传递给业务逻辑层的登录方法
- 登入成功跳转到成功页面,登入出错请求转发到登录页面,提示错误信息
业务逻辑层(service层)
- 调用dao层的数据查询功能
数据访问层(dao层)
- 访问数据库匹配账号密码
业务实现
基于TDD测试驱动开发,保证业务逻辑完全正确,在基础上才有可能保证界面显示正常。
1. 编写测试逻辑
public class LoginServletTest {
@Test
public void test(){
User user = new User();
user.setUsername("zhang1san");
user.setPassword("123");
//创建一个登录的service,调用login实现登录
LoginService loginService = new LoginService();
boolean flag = loginService.login(user);
if(flag){
System.out.println("登入成功");
}
else{
System.out.println("账号或密码错误");
}
}
}
2.然后通过逻辑在去实现类
编写LoginService 类
public class LoginService {
public boolean login(User user) {
//新建dao对象,查询数据库
Dao dao = new Dao();
//返回查询结果
boolean count = dao.find(user);
return count;
}
}
编写Dao 类
public class Dao {
public boolean find(User user) {
//数据库查询语句,这里没有引入数据库,自己写的一个类当做数据库
DB db = new DB();
boolean res = db.select(user);
return res;
}
}
//模拟数据库
public class DB {
static ArrayList<User> userList= new ArrayList<User>();
static {
User user1 = new User("zhangsan","123");
userList.add(user1);
}
public boolean select(User user) {
for(User u :userList){
if((u.getUsername().equals(user.getUsername()))&&(u.getPassword().equals(user.getPassword())))
return true;
}
return false;
}
public boolean insert(User user) {
for(User u :userList){
if(u.getUsername().equals(user.getUsername()))
return false;
}
userList.add(user);
return true;
}
}
测试类成功通过后编写LoginServelt()
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
LoginService loginService = new LoginService();
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = new User(username,password);
boolean flag = loginService.login(user);
if(flag){
System.out.println(username+"登入成功");
request.getRequestDispatcher("/SuccessLoginServlet").forward(request,response);
}
else{
System.out.println("账号或密码错误");
//密码错误就将提示信息转发到index.jsp
request.setAttribute("error_msg","账号或密码错误");
request.getRequestDispatcher("/index.jsp").forward(request,response);
}
}
}
登录界面index.jsp文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="/LoginServlet" method="post">
账号:<input type="text" name="username"><br>
密码:<input type="password" name="password"><input type="checkbox" name="record">记住密码<br>
<font color="red"> ${error_msg}</font>
<a href="/register.jsp">注册账号</a>
</form>
</body>
</html>
效果: