上一篇博客对model1和model2进行了对比总结,这篇博客对model2的思想“实例化”一下,介绍一个model2的登陆实例。
实例很简单:用户在index.jsp页面输入用户名和密码,提交到servelt,servlet调用manager的方法,manager进行逻辑判断,判断后servlet会将页面转到show.jsp页面,show.jsp会反馈用户登录的情况。
index.jsp
在这个页面中有用户名和密码的文本框,已经提交页面的submit按钮。当点击submit按钮整个form会直接提交。
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
</head>
<form name="userForm" target="_self" id="userForm" action="servlet/loginServlet">
<body>
用户名:<input name="userName" type="text" id="userName" size="20" maxlength="20" value=""><br>
密码:<input name="passWord" type="text" id="passWord" size="20" maxlength="20" value=""><br>
<input name="btnAdd" type="submit" id="btnLogin" value="登陆">
</body>
</form>
</html>
show.jsp
用来反馈用户登录后的信息,这里用到了JSTL,直接显示信息。
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
${showInfo }
</body>
</html>
获取表单数据,调用后台的业务逻辑,并进行页面的跳转。
public class loginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取前台发过来的用户名和用户密码
String userName=request.getParameter("userName");
String passWord=request.getParameter("passWord");
//构造user对象,并赋值
User user=new User();
user.setUserName(userName);
user.setPassWord(passWord);
//查询用户是否存在
UserManager userManager=new UserManager();
String showInfo=userManager.QueryUser(user);
//将显示信息放入到rqeust中
request.setAttribute("showInfo", showInfo);
//页面重定向到show.jsp
request.getRequestDispatcher("/show.jsp").forward(request, response);
}
}
manager
manager存储数据以及业务逻辑判断,在这里写了一个假数据,并与登陆的用户名和密码进行业务逻辑的判断。
public class UserManager {
public String QueryUser(User user){
User userDB=new User();
userDB.setUserName("admin");
userDB.setPassWord("admin");
if (user.getUserName().equals(userDB.getUserName())
&& user.getPassWord().equals(userDB.getPassWord())) {
return "欢迎【"+userDB.getUserName()+"】登陆系统";
}
return "用户不存在";
}
}
登录实例的时序图
通过和上一篇博客中model2的时序图比较不难发现,这个登录的实例的时序图可以和model2的时序图的lifeline一一对应起来。而每一层职责单一的思想也表现了出来,jsp用来显示;servlet用来转页面;manger相当于model,用来进行业务逻辑。
本文通过一个具体的登录实例,详细介绍了Model2模式的工作流程。包括前端表单提交、Servlet处理请求、Manager进行业务逻辑判断及反馈结果的过程。
140





