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/>&nbsp;&nbsp;&nbsp;&nbsp;碼:<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>&nbsp;&nbsp;碼:<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)項目結構:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM