一. 储备知识
1.1 问题描述
当在login.jsp或regist.jsp页面中,登录失败或者注册失败时,总得有一些提示信息显示出来,用户才知道是否登录成功或者是否注册成功。
1.2 用Servlet处理请求,将业务交给业务层,最后在显示层返回提示信息
业务层是调用dao与数据库接触,处理完的数据返回给显示层显示出来。
显示层是显示用户需要用到的数据或者处理完的数据。
解决1.1节中的问题,可以设计下面的思想方法:
- 将login.jsp或regist.jsp收集的数据交给LoginServlet和RegistServlet
- Servlet收到请求后,将请求交给业务层去处理(即调用业务层方法处理业务)
- 处理好业务之后,将处理好的数据存入一个errorMsg变量中,并将errorMsg存入request域中
- 在Servlet中进行控制转发或者重定向(成功则重定向路径,失败则转发)
- 在显示层(即login.jsp或regist.jsp中显示errorMsg变量的信息)
二. 代码例子
LoginServlet.java
public class LoginServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
//Servlet处理请求时将请求交给业务层处理
private UserServcice service = new UserServiceImpl();//自定义的业务层,里面有几个业务方法login(User user); regist(User user); checkUsername(String username);
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
//1.获取参数
String username = request.getParameter("username");
String password = request.getParameter("password");
//2.调用其他类处理业务逻辑(UserDao)
User user = new User(null, username, password, null);//根据获取的参数实例化bean对象,用作后面业务的参数传入方法中
//3.调用业务层方法处理业务
User loginUser = service.login(user);
if(loginUser == null){
//登录失败
request.setAttribute("errorMsg", "账号或密码错误,请重新登录!");
request.getRequestDispatcher("/pages/user/login.jsp").forward(request, response);
}else{
//登录成功
response.sendRedirect(request.getContextPath() + "/pages/user/login_success.jsp");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
login.jsp
<span class="errorMsg">${empty requestScope.errorMsg? "请用户输入用户名和密码!!":errorMsg }</span>