1.在servlet中获取数据之后马上进行服务端校验,如果校验成功那么执行后面的代码;
如果校验不成功,那么响应给客户错误信息并返回请求页面。
2.具体如何做呢?
定义校验表单数据的方法,返回一个StringBuffer,在servlet中进行响应
private StringBuffer validateLoginForm(String username,
String password) {
StringBuffer errors_message=new StringBuffer("");
if(username==null||"".equals(username))//不要帮用户空格,他输入是什么就是什么
{
errors_message.append("用户名不能为空");
}
if(password==null||"".equals(password))
{
errors_message.append("密码不能为空");
}
return errors_message;//返回存有校验结果的字符串
}
login登录代码
public void login(HttpServletRequest request,HttpServletResponse response)
{
//获取表单数据
String username=request.getParameter("username");
String password=request.getParameter("password");
/*
* 2.合法性校验:如果校验通过那么继续执行后面的代码,如果校验不通过,那么程序结束返回用户出错信息
*/
StringBuffer sb=validateLoginForm(request, response, username, password);
if(sb.toString().length()>0)
{
//如果校验不通过,那么在这里对请求响应
request.setAttribute("message", sb.toString());
try {
request.getRequestDispatcher("login.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}else
{
//3.调用service的login方法
UserServiceIfac userService=ServiceFactory.getUserServiceInstance();
User user=userService.login(username, password);
//4.根据user是否为空进行登录结果判断
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter pw=null;
try {
pw=response.getWriter();
} catch (Exception e) {
e.printStackTrace();
}
//根据登录业务方法的返回值是否为空,作出如下响应
if(user==null)
{
//告诉用户登录失败,并返回登录页面
/*
* 第一种做法
* 如果开发严格要求,后台代码中不能出现前端脚本,那么这个做法不行
*/
//pw.println("<script>alert('登录失败');location.href='login.jsp';</script>");
/*
//第二种做法:这种做法是跳转,所以url不会变,如果用户刷新页面的表单会再提交一次
request.setAttribute("message", "用户名或密码错误");//朝接收端发送信息
try {
request.getRequestDispatcher("login.jsp").forward(request, response);//forward方法的参数不能为null
} catch (Exception e) {
e.printStackTrace();
}
*/
/*
* 第三种做法:重定向,没有告诉用户出什么事了,但url变了
*/
try {
response.sendRedirect(request.getContextPath()+"/login.jsp");
} catch (Exception e) {
e.printStackTrace();
}
}else
{
//===============================================================
/*
* 需求:我们希望登录成功之后不管在当前应用哪个页面都能访问到用户的信息
* 实现技术:HttpSession
*/
//1、获取session对象
HttpSession session=request.getSession();
//2、把用户信息放入session,那么不管在当前应用的哪个页面都能访问到用户信息
session.setAttribute("user", user);
//告诉用户登录成功,并重定向都首页面
//需要根据用户的身份定位页面
if("1".equals(user.getRule()))
{ // 管理员
pw.println("<script>alert('登录成功');location.href='admin/index.jsp';</script>");
}else if("2".equals(user.getRule()))
{ // 普通用户
pw.println("<script>alert('登录成功');location.href='user/index.jsp';</script>");
}
}
}
=======================
login.jsp部分代码