我想做个网页,所以学了点JAVAWEB。
在这里实现了用户登录验证:
实现要知道javaweb常见内置对象的一些性质。
| 对象名 | 创建时间 | 销毁时间 | 每个用户的共享情况 | 是否可自行定义销毁时间 |
| request | 客户端发送一次请求 | 浏览器发送请求回复 | 每个用户每次请求独立使用 | 否 |
| respond | 客户端发送一次请求 | 浏览器发送请求回复 | 每个用户每次请求独立使用 | 否 |
| servletContext | 服务器启动 | 服务器正常关闭 | 所有用户全局共享 | 否 |
| cookies | 一次会话建立 | 一次会话结束 | 每个用户独自拥有,该用户所有请求共享 | 是 |
| session | 一次会话建立 | 一次会话结束(没过期前) | 每个用户独自拥有,该用户所有请求共享 | 是 |
在实现登录的时候,我们必须要保证,用户必须输入的用户名,密码,验证码信息完全正确。除此之外,必须保证一个用户只能登录一次。所以必须要在servletContext里添加用户信息。但这也让用户想要退出时,必须显示登出。
这里的前四个包,都是用户自定义类。分别是:管理员类,用户类,管理员数据库查询实现接口及其实现类。
import domin.AdministratorInfo;
import domin.UserInfo;
import service.AdministratorLoginService;
import service.impl.AdministratorLoginServiceImpl;
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.util.ArrayList;
import java.util.List;
@WebServlet("/servlet_access")
public class Servlet_access extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");//得到post的数据,都要设置编码,不然的话中文会出现乱码
AdministratorLoginService adminService = new AdministratorLoginServiceImpl(request.getParameter("user"));
//得到service对象
AdministratorInfo admin = adminService.getPassWord();//如果查询到了该管理员,则返回
boolean flag = false;//验证是否管理员是否已经登录
ArrayList arrayList = (ArrayList) request.getSession().getAttribute("error");//记录错误信息数组
arrayList.clear();//每次请求都清楚错误信息
ArrayList listAlreadyLogin = (ArrayList) request.getServletContext().getAttribute("login_user");//相同用户名的管理员列表
if(listAlreadyLogin == null){//管理员列表为空?
listAlreadyLogin = new ArrayList();
}
for(AdministratorInfo administratorInfo : listAlreadyLogin){//检查是否登录
if(administratorInfo.getId() == admin.getId())
flag=true;
}
if(request.getSession().getAttribute("login_/confirm/i") != null){检查是否登录
arrayList.add("请不要尝试多次登录,或者关闭浏览器重试");
}else {
if (!request.getSession().getAttribute("checkCode").equals(request.getParameter("checkCode"))) {//验证码验证
arrayList.add("验证码错误");
} else if(flag){
arrayList.add("不要尝试多次登录");
} else{
if (admin != null) {//用户输入用户名是否为空
if (admin.getPassWord().equals(request.getParameter("password")))//确认管理员账号密码
{
listAlreadyLogin.add(admin);
request.getServletContext().setAttribute("login_user",listAlreadyLogin);
request.getSession().setAttribute("login_/confirm/i", admin);//确认管理员等级
request.getRequestDispatcher("/servlet_findAll").forward(request, response);//跳转到成功界面
return;
} else {
arrayList.add("密码错误,请重试");
}
} else {//没查到密码对应用户
arrayList.add("账号错误,请重试");
}
}
}
request.getRequestDispatcher("/login.jsp").forward(request,response);//失败界面
return;
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}



