综合案例:登录与注册-基于TDD测试驱动开发
分析:
登陆失败带数据返回浏览器,登陆成功不带数据转到main
登录
基于TDD测试驱动开发,保证业务逻辑完全正确。在这个基础上才可能保证界面显示正常
1:编写测试
package com.rh.package05;
import com.rh.Service.Day05LoginUserSevice;
import com.rh.bean.UserDay05;
import org.junit.Test;
public class TestLoginUserService {
@Test
public void test01(){
//1:获取参数
String username="jack";
String password="123";
UserDay05 user=new UserDay05(username,password);
//2:调用登录
Day05LoginUserSevice userService=new Day05LoginUserSevice();
//返回值Boolean只有两种情况,返回值为数字情况可能多一些
int code=userService.ligon(user);
System.out.print(code);
}
}
2:编写逻辑
package com.rh.Service;
import com.rh.Dao.UserDaoday05;
import com.rh.bean.UserDay05;
//登陆与注册
public class Day05LoginUserSevice {
public int ligon(UserDay05 user) {
//查找是否存在账号密码
UserDaoday05 dao=new UserDaoday05();
int count=dao.find(user);
return count;
}
}
package com.rh.Dao;
import com.rh.bean.UserDay05;
import java.util.ArrayList;
import java.util.List;
public class UserDaoday05 {
private static List<UserDay05> userlist=new ArrayList<>();
static{
userlist.add(new UserDay05("jack","1234"));
userlist.add(new UserDay05("rose","1234"));
}
public int find(UserDay05 user){
for(UserDay05 u:userlist){
//存在 账号与密码 相同的用户
if(user.getUsername().equals(u.getUsername())&&user.getPassword().equals(u.getPassword())){
return 1;
}
}
return -1;
}
}
package com.rh.bean;
public class UserDay05 {
private String username;
private String password;
public UserDay05() {
}
public UserDay05(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "UserDay05{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
webUI
登陆页面,核心就是一个表单
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2020/9/13
Time: 10:38
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form method="post" action="/myweb03/day05LoginServlet"><br/>
username:<input type="text" name="username"><br/>
password:<input type="text" name="password"><br/>
<input type="submit" value="login"><br/>
</form>
</body>
</html>
配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<welcome-file-list>
<welcome-file>Loginday05.jsp</welcome-file>
</welcome-file-list>
</web-app>
web–loginservlet
编写页面请求的servlet
package com.rh.day05packageServlet;
import com.rh.Service.Day05LoginUserSevice;
import com.rh.bean.UserDay05;
import org.apache.commons.beanutils.BeanUtils;
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 java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet("/day05LoginServlet")
public class day05LoginServlet 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 {
//1:获取参数
//1.5:设置请求体中的中文编码utf-8,解决输入的账号为中文名
request.setCharacterEncoding("utf-8");
Map<String,String[]> map=request.getParameterMap() ;
UserDay05 user=new UserDay05();
//1:创建WEB-INF/lib目录
//1.2:添加beanUtils jar
//1.3:绑定
//1.4:populate方法调用
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//2:调用登录
Day05LoginUserSevice userService=new Day05LoginUserSevice();
int code=userService.login(user);
System.out.print(code);
}
}
查看结果,登录之后的页面显示
怕不断是否输入正确,然后跳转另一个页面还是携带数据会登录1页面显示输入错误
package com.rh.day05packageServlet;
import com.rh.Service.Day05LoginUserSevice;
import com.rh.bean.UserDay05;
import org.apache.commons.beanutils.BeanUtils;
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 java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet("/day05LoginServlet")
public class day05LoginServlet 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 {
//1:获取参数
//1.5:设置请求体中的中文编码utf-8,解决输入的账号为中文名
request.setCharacterEncoding("utf-8");
Map<String,String[]> map=request.getParameterMap() ;
UserDay05 user=new UserDay05();
//1:创建WEB-INF/lib目录
//1.2:添加beanUtils jar
//1.3:绑定
//1.4:populate方法调用
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//2:调用登录
Day05LoginUserSevice userService=new Day05LoginUserSevice();
int code=userService.login(user);
System.out.print(code);
if(code==1){
//显示主页
response.sendRedirect(request.getContextPath()+"/day05home.jsp");
}else{
//-1
//回到登陆页面
request.setAttribute("error_msg","账号或者密码错误");
request.getRequestDispatcher("Loginday05.jsp").forward(request,response);
}
}
}
jsp:获取请求转发携带数据输出
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2020/9/13
Time: 10:38
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<font color="red">${error_msg}</font>
<form method="post" action="/myweb03/day05LoginServlet"><br/>
username:<input type="text" name="username"><br/>
password:<input type="text" name="password"><br/>
<input type="submit" value="login"><br/>
</form>
</body>
</html>
注册
注册逻辑
注册test
package com.rh.package05;
import com.rh.Service.Day05LoginUserSevice;
import com.rh.bean.UserDay05;
import org.junit.Test;
public class TestLoginUserService {
@Test
public void test01(){
//1:获取参数
String username="jack";
String password="123";
UserDay05 user=new UserDay05(username,password);
//2:调用登录
Day05LoginUserSevice userService=new Day05LoginUserSevice();
//返回值Boolean只有两种情况,返回值为数字情况可能多一些
int code=userService.login(user);
System.out.print(code);
}
@Test
public void test02(){
String username="jack";
String password="1234";
UserDay05 user=new UserDay05(username,password);
Day05LoginUserSevice userSevice=new Day05LoginUserSevice();
int code=userSevice.register(user);
System.out.println("service"+code);
}
}
注册的service
package com.rh.Service;
import com.rh.Dao.UserDaoday05;
import com.rh.bean.UserDay05;
//登陆与注册
public class Day05LoginUserSevice {
public int login(UserDay05 user) {
//查找是否存在账号密码
UserDaoday05 dao=new UserDaoday05();
int count=dao.find(user);
return count;
}
public int register(UserDay05 user) {
//查找用户名是否已存在,不存在进行保存,否则不保存提示失败
UserDaoday05 dao=new UserDaoday05();
int count=dao.findByName(user.getUsername());
if(count==0){
//不存在,进行保存
dao.add(user);
System.out.println("Service保存");
return 1;
}else{
System.out.println("Service不保存");
return -1;
}
}
}
注册dao
package com.rh.Dao;
import com.rh.bean.UserDay05;
import java.util.ArrayList;
import java.util.List;
public class UserDaoday05 {
private static List<UserDay05> userlist=new ArrayList<>();
static{
userlist.add(new UserDay05("jack","1234"));
userlist.add(new UserDay05("rose","1234"));
}
public int find(UserDay05 user){
for(UserDay05 u:userlist){
//存在 账号与密码 相同的用户
if(user.getUsername().equals(u.getUsername())&&user.getPassword().equals(u.getPassword())){
return 1;
}
}
return -1;
}
public int findByName(String username) {
for(UserDay05 u:userlist){
//存在 账号与密码 相同的用户
if(u.getUsername().equals(username)){
System.out.println("Dao找到");
return 1;
}
}
System.out.println("Dao没找到");
return -1;
}
public void add(UserDay05 user) {
System.out.println("Dao保存");
userlist.add(user);
}
}
注册用户
package com.rh.bean;
public class UserDay05 {
private String username;
private String password;
private String password2;
private String email;
private String name;
private String gender;
private String birthday;
public UserDay05() {
}
public UserDay05(String username, String password) {
this.username = username;
this.password = password;
}
public UserDay05(String username, String password, String password2, String email, String name, String gender, String birthday) {
this.username = username;
this.password = password;
this.password2 = password2;
this.email = email;
this.name = name;
this.gender = gender;
this.birthday = birthday;
}
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;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "UserDay05{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", passsword2='" + password2 + '\'' +
", email='" + email + '\'' +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
", birthday='" + birthday + '\'' +
'}';
}
}
实现代码:
注册页面:
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2020/9/13
Time: 10:38
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<font color="red">${error_msg}</font>
<form method="post" action="/myweb03/day05RegisterServlet"><br/>
<%-- //name一定要与user成员变量相对应,反射--%>
用户名:<input type="text" name="username"><br/>
密码:<input type="text" name="password"><br/>
确认密码:<input type="text" name="password2"><br/>
email:<input type="text" name="email"><br/>
姓名:<input type="text" name="name"><br/>
性别:<input type="radio" name="gender" value="1">男<input type="radio" name="geder" value="2">女<br/>
出生日期:<input type="date" name="birthday" >
<input type="submit" value="login"><br/>
</form>
</body>
</html>
注册servlet
package com.rh.day05packageServlet;
import com.rh.Service.Day05LoginRegisterUserSevice;
import com.rh.bean.UserDay05;
import org.apache.commons.beanutils.BeanUtils;
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 java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet("/day05RegisterServlet")
public class day05RegisterServlet 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 {
//1:获取参数
//1.5:设置请求体中的中文编码utf-8,解决输入的账号为中文名
request.setCharacterEncoding("utf-8");
Map<String,String[]> map=request.getParameterMap() ;
UserDay05 user=new UserDay05();
//1:创建WEB-INF/lib目录
//1.2:添加beanUtils jar
//1.3:绑定
//1.4:populate方法调用
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//2:调用注册
Day05LoginRegisterUserSevice userService=new Day05LoginRegisterUserSevice();
int code=userService.register(user);
//如果用户注册成功,回到登陆页面取登录
//如果注册失败,回到注册页面重新注册
if(code==1){
response.sendRedirect(request.getContextPath()+"/Loginday05.jsp");
}else{
request.setAttribute("error_msg","该用户名已被注册");
request.getRequestDispatcher("Registerday05.jsp").forward(request,response);
}
}
}
原理