JSP的设计模式
1、JSP模型1(JSP+JavaBean)
JSP页面负责处理请求,并将响应发送给客户端。JSP页面文件包括:login.html、loginchk.jsp、welcome.jsp。JavaBean文件包括:UserBean.java、UserCheckBean.java。
1)登录页面login.html:
<html> <head> <title>登陆页面</title> </head> <body> <form method="post" action="loginchk.jsp"> 用户名:<input type="text" name="name" width="20"><br/> 密 码:<input type="password" name="password" width="25"/><br/> <input type="submit" value="登录"/> <input type="reset" value="重置"/> </form> </body> </html>
2)验证页面loginchk.jsp:
<%@ page contentType="text/html;charset=GB2312" language="java" %> <%@ page import="com.yyq.bean.UserCheckBean"%> <%request.setCharacterEncoding("GB2312");%> <jsp:useBean id="user" scope="session" class="com.yyq.bean.UserBean"/> <jsp:setProperty name="user" property="*"/> <% UserCheckBean uc = new UserCheckBean(user); if (uc.validate()){ %> <jsp:forward page = "welcome.jsp"/> <% } else { out.println("用户名或密码错误,请<a href=\"login.html\">重新登陆</a>"); } %> <html> <head> <title>验证</title> </head> <body> </body> </html>
3)欢迎页面welcome.jsp:
<%@ page contentType="text/html;charset=GB2312" language="java" %> <jsp:useBean id="user" scope="session" class="com.yyq.bean.UserBean"/> 欢迎您,<jsp:getProperty name="user" property="name"/>
4)UserBean类:
package com.yyq.bean; /** * Created by gao on 16-4-18. */ public class UserBean { private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
5)UserCheckBean类:
package com.yyq.bean; /** * Created by gao on 16-4-18. */ public class UserCheckBean { private UserBean user; public UserCheckBean() { } public UserCheckBean(UserBean user) { this.user = user; } public UserBean getUser() { return user; } public void setUser(UserBean user) { this.user = user; } public boolean validate() { String name = user.getName(); String password = user.getPassword(); //实际应用中,你应该查询数据库,验证用户名和密码。 if ("admin".equals(name) && "1234".equals(password)) { return true; } else { return false; } } }
6)启动Tomcat,输入http://localhost:8080/login.html
输入用户名admin和密码1234,点击登录进入欢迎页面:
如果用户名或者密码输入错误,则显示错误信息:
7)项目结构:
2、JSP模型2(MVC)
在该模型中,JSP页面用于表示层,Servlet负责处理各类任务。Servlet作为一个控制器,负责处理请求并创建JSP页面所需的任何Bean。该控制器也负责确定将该请求传递到哪个JSP页面。JSP页面检索Servlet创建的对象,并其他动态内容插入在一个模板中。该模型促进了模型视图控制器(MVC)体系结构风格设计模式的使用。MVC其实是模型、视图、控制器的缩写。在使用JSP时,有相应的文件去实现相应的操作。通常JSP只负责视图,也就是只负责显示页面。业务逻辑等由Bean去实现。
在MVC设计模型中,View用来呈现数据处理结果,可以是JSP、XML、HTML;Model用来存储数据的状态,可利用JavaBean来实现;Controller负责协调应用程序的运行流程,可用Servlet来实现。运用这种模式可以将数据呈现方式与数据处理方式分离,提高了代码的利用率。
1)登录页面login.html:
<html> <head><title>用户登录</title></head> <body> <form method="post" action="controller"> <input type="hidden" name="action" value="login"> 用户名:<input type="text" name="name"><br> 密 码:<input type="password" name="password"><p> <input type="submit" value="登录"> <input type="reset" value="重置"> </form> </body> </html>
2)信息错误显示页面loginerr.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
用户名或密码错误,请<a href="login.html">重新登录</a>
3)欢迎页面welcome.jsp:
<%@ page contentType="text/html;charset=GB2312" %> <jsp:useBean id="user" scope="session" class="com.yyq.bean.UserBean"/> 欢迎你,<jsp:getProperty name="user" property="name"/>!
4)用户UserBean类:
package com.yyq.bean; /** * Created by gao on 16-4-18. */ public class UserBean { private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
5)用户检查UserCheckBean类:
package com.yyq.bean; /** * Created by gao on 16-4-18. */ public class UserCheckBean { private UserBean user; public UserCheckBean() { } public UserCheckBean(UserBean user) { this.user = user; } public UserBean getUser() { return user; } public void setUser(UserBean user) { this.user = user; } public boolean validate() { String name = user.getName(); String password = user.getPassword(); //实际应用中,你应该查询数据库,验证用户名和密码。 if ("admin".equals(name) && "1234".equals(password)) { return true; } else { return false; } } }
6)控制类 ControllerServlet类:
package com.yyq.controller; import com.yyq.bean.UserBean; import com.yyq.bean.UserCheckBean; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; /** * Created by gao on 16-4-18. */ public class ControllerServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("GBK"); resp.setContentType("text/html;charset=GBK"); String action = req.getParameter("action"); if (!isValidated(req) && !("login".equals(action))) { gotoPage("login.html", req, resp); return; } if ("login".equals(action)) { UserBean user = new UserBean(); user.setName(req.getParameter("name")); user.setPassword(req.getParameter("password")); UserCheckBean uc = new UserCheckBean(user); if (uc.validate()) { HttpSession session = req.getSession(); //将user对象保存到Session对象中,在welcome.jsp中 //通过<jsp:userBean>动作元素从Session中得到user对象 session.setAttribute("user", user); //验证成功,将请求转向welcome.jsp gotoPage("welcome.jsp", req, resp); } else { //验证失败,将请求转向loginerr.jsp gotoPage("loginerr.jsp", req, resp); } } //对于其它的action请求,可在后面的else if...else语句中继续处理。 /*else if { } else { }*/ } /** * 判断用户是否已经登录了。 */ private boolean isValidated(HttpServletRequest request) { HttpSession session = request.getSession(); if (session.getAttribute("user") != null) return true; else return false; } /** * 将请求导向指定的页面。 */ private void gotoPage(String targetURL, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { RequestDispatcher rd; rd = request.getRequestDispatcher(targetURL); rd.forward(request, response); } }
7)项目结构: