🎈前言🎈
✨欢迎点赞👍收藏🌟留言、评论、私信必回哦✨
✨文章中涉及到的代码均已上传至GitHub✨
一、创建实体类(User)
案例代码如下
User.java
/**
* 使用当前类实例表示一个注册用户
*/
//Serializable签名接口序列化
public class User implements Serializable {
private String username;
private String password;
private String nickname;
private int age;
public User(){}
public User(String username, String password, String nickname, int age) {
this.username = username;
this.password = password;
this.nickname = nickname;
this.age = age;
}
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;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", nickname='" + nickname + '\'' +
", age=" + age +
'}';
}
}
二、创建控制类(UserController)
案例代码如下
UserController.java
@Controller
public class UserController {
@RequestMapping(value = "/logUser", method = RequestMethod.GET)
public void check(HttpServletRequest request, HttpServletResponse response) throws IOException, ClassNotFoundException {
String username = request.getParameter("username");//获取前台传入的数据(username) 根据标签name获取
String password = request.getParameter("pwd");//获取前台传入的数据(password) 根据标签name获取
if (username.length()<=0) {
//用户名为空
System.out.println("username is null!!");
} else {
File dir = new File("./users");
FileFilter filter = new FileFilter() {
@Override
public boolean accept(File file) {
String name = file.getName();
return name.contains(username + ".obj");
}
};
File[] lists = dir.listFiles(filter);
//将过滤出符合条件的用户名存入数组
// for (File list : lists) {
// System.out.println(list);
// }
//根据数组长度是否大于0判断用户是否存在 这里面数组长度只存在两种可能0或1
if (lists.length > 0) {
//将obj对象反序列化存入user中
FileInputStream fis = new FileInputStream(lists[0]);
ObjectInputStream ois = new ObjectInputStream(fis);
User user = (User) ois.readObject();
ois.close();
System.out.println(user);
if (user.getPassword().equals(password)) {
// response.setStatus(200);
// System.out.println(response.getStatus());
response.sendRedirect("/reg_success.html"); //重定向到登录成功页面
} else {
//密码错误
System.out.println("Password error!");
}
} else {
//用户不存在
System.out.println("User not exist!");
}
}
}
}
三、程序运行效果
四、难点
- 前台数据处理
request.getParameter //获取HTML标签name属性的值
- form表单提交方式需要和后台响应方式相同
@RequestMapping(value = "/logUser", method = RequestMethod.GET)
- 用户输入是否合法
本文使用.obj实例化对象代替数据库,第一步应先进行判空操作
if (username.length()<=0
在判空后进行用户名校验以及密码校验并利用重定向跳转到登录成功页面