表单与地址刷新的小问题
在做小项目时我利用过滤器处理登陆的错误,发现一个小问题,使用按钮来提交表单会发现一个情况。
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
String username = request.getParameter(“username”); // 使用"".equals(username) 为true
String password = request.getParameter(“password”); // 使用"".equals(password) 为false
过滤器代码:
if ("".equals(username) && "".equals(password)) {
request.setAttribute("errorMsg", "用户名和密码不能为空!");
request.setAttribute("count", "1");
request.getRequestDispatcher("index.jsp").forward(request, response);
return;
} else if ("".equals(username)) {
request.setAttribute("errorMsg", "用户名不能为空!");
request.setAttribute("count", "2");
request.getRequestDispatcher("index.jsp").forward(request, response);
return;
} else if ("".equals(password)) {
request.setAttribute("username", username);
request.setAttribute("errorMsg", "密码不能为空!");
request.setAttribute("count", "3");
request.getRequestDispatcher("index.jsp").forward(request, response);
return;
} else {
filterChain.doFilter(request, response);
}
当我使用表单进行提交时,"".equals(username) && “”.equals(password) 它们的结果是为true的,我这个完全可以过滤掉错误的输出,只有用户名和密码都输入了值才能进入Servlet进行登录验证。
Srvlet代码:
String username = request.getParameter("username");
String password = request.getParameter("password");
User userUP = new User(username,password);
HttpSession session = request.getSession();
IUserDao userdao = new UserDaoImpl();
if (userdao.isExt(userUP) && password !=null) {
request.setAttribute("errorMsg", "用户名或密码错误!!!");
request.setAttribute("num", "4");
//上述条件都不满足,usename和password在数据库内是存在的
} else if(!userdao.isExt(userUP) && password !=null){
User user = userdao.loginUser(userUP); //user==null,则表示至少有一项为空
String realname = user.getRealname();
session.setAttribute("num", "5");
session.setAttribute("realname", realname);
session.setAttribute("username", userUP.getUsername());
session.setAttribute("password", userUP.getPassword());
}
request.getRequestDispatcher("index.jsp").forward(request, response);
}
在Servlet中,我写的判断语句是没有问题的,在对登录Servlet进行地址刷新后,页面直接显示“用户名或密码错误!!!”,输入正确的用户名和密码也不能解决问题,之前我以为对地址的刷新就是发出用户名和密码的空值,就算刷新一次,,由于过滤器时过滤LoginServlet的,输出的错误信息,也应该为"用户名和密码不能为空!",所以问题不在于过滤器,经过排查之后,接收不到表单数据但使用 “”.equals(username)为false,而username==null为true,于是瞬间明白问题的原因,使用表单提交获得的并不是null,成功解决问。