前言
此版本实现登录业务(流程与注册相像)
登录的流程:
1:用户访问登录页面(可以在首页上点击超链接进入登录页面)
2:在登录页面输入用户名和密码并点击登录按钮提交表单
3:表单提交路径action="loginUser"
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<center>
<h1>Login</h1>
<form action="./loginUser" method="GET">
<table border="2">
<tr>
<td>用户名</td>
<td><input name="username" type="text"></td>
</tr>
<tr>
<td>密码</td>
<td><input name="password" type="password"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="点击登录">
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
4:ClientHandler处理请求环节发现这是这个请求时就实例化一个处理
登录的业务类LoginServlet,并调用它的serveice方法处理
返回到ClientHandler类添加如下代码
5:LoginServlet处理中如果用户输入的用户名密码都对则设置响应
登录成功提示页面:login_success.html
否则设置响应登录失败:login_fail.html
登录失败有两种情况:用户名不对,或者用户名对但密码不对。
/**
* @Author JIANG
*/
public class LoginServlet {
public void service(HttpRequest request, HttpResponse response) {
System.out.println("LoginServlet:开始处理登录...");
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username+","+password);
File file = new File("user.dat");
try (
RandomAccessFile raf = new RandomAccessFile("user.dat","r")
){
for (int i = 0;i<file.length()/100;i++) {
raf.seek(i*100);
byte[] data = new byte[32];
raf.read(data);
String name = new String(data,"UTF-8");
data = new byte[32];
raf.read(data);
String pwd = new String(data,"UTF-8");
if (!(name.equals(username) && pwd.equals(password))) {
response.setEntity(new File("webapps/myweb/login_info_err.html"));
return;
}
}
response.setEntity(new File("webapps/myweb/login_success.html"));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("LoginServlet:处理登录完毕!");
}
}
至此,登录和注册功能已经全部实现,但是,目前的两个业务所在的页面都属于静态页面,在下一个版本,将实现如何生成动态页面。