要想能够支持返回一个 html 文件,就需要让代码读取一个 类似 /index.html 这样的文件,要想读文件,需要先知道文件路径 (但我们只知道文件名)
解决方法:
new 一个 和 src 同级的 Directory
右击新创建的 xxx (Directory):Mark Directory as — xxx Root
然后 new 一个 file:index.html
写到这里,服务器已经可以返回一个指定的静态页面了
这个页面中包含了一个 form 表单,借助表单来实现登录操作
此时,启动服务器
由于表单是把数据提交到 /login 这个 path 中
服务器紧接着就要实现 POST 请求下的 /login 的处理
doPost 方法:
private void doPost(Request request, Response response) {
//2.实现 /login 的处理
if(request.getUrl().startsWith(“/login”)) {
//读取用户提交的用户名和密码
String userName = request.getParameter(“username”);
String password = request.getParameter(“password”);
System.out.println("userName: " + userName);
System.out.println("password: " + password);
}
}
再次重启服务器,使用 fiddler 抓包:
流程:
接着,请求到达服务器上,解析成 Request 对象
用户名和密码这种键值对,就保存到 body 中,同时会把 body 中的键值对解析保存到 parameters 表中
doPost 方法获取参数:
在这个基础上,在继续实现验证用户名密码是否正确
private void doPost(Request request, Response response) {
//2.实现 /login 的处理
if(request.getUrl().startsWith(“/login”)) {
//读取用户提交的用户名和密码
String userName = request.getParameter(“username”);
String password = request.getParameter(“password”);
//登录逻辑需要验证用户名密码是否正确
// 此处为了简单,把用户名和密码在代码中写死
// 更科学的处理方式: 从数据库中读取用户名对应密码,检验密码是否一致
if(“hh”.equals(userName) && “666”.equals(password)){
// 登陆成功
response.setStatus(200);
response.setMessage(“OK”);
response.setHeader(“Content-Type”,“text/html;charset=utf-8”);
response.writeBody(“”);
response.writeBody(“
response.writeBody(“”);
}
else{
// 登陆失败
response.setStatus(403)