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)項目結構: