1. 程式人生 > >深入淺出Java MVC(Model View Controller) ---- (JSP + servlet + javabean例項)

深入淺出Java MVC(Model View Controller) ---- (JSP + servlet + javabean例項)

DRP中終於接觸到了MVC,感觸是確實這樣的架構系統靈活性不少,現在感觸最深的就是使用tomcat作為伺服器釋出比IIS好多了,起碼釋出很簡單,使用起來方便。

    首先來簡單的學習一下MVC的基礎知識,MVC全名是Model View Controller,是模型(model)-檢視(view)-控制器(controller)的縮寫,一種軟體設計典範,用一種業務邏輯和資料顯式分離的方法組織程式碼,將業務邏輯被聚集到一個部件裡面,在介面和使用者圍繞資料的互動能被改進和個性化定製的同時而不需要重新編寫業務邏輯。

概覽


    MVC被獨特的發展起來用於對映傳統的輸入、處理和輸出功能在一個邏輯的圖形化使用者介面的結構中,

MVC是分層的思想的體現,但是區別於三層設計模式(區別以後再和大家分享)。


   MVC是一個框架模式,它強制性的使應用程式的輸入、處理和輸出分開。使用MVC應用程式被分成三個核心部件:模型、檢視、控制器。它們各自處理自己的任務。最典型的MVC就是JSP + servlet + javabean的模式。

例項解析

UML圖:大家熟悉MVC的呼叫流程邏輯


第一:JSP:由頁面指令和HTML組成的查詢介面query_condention.jsp,也就是咱們現在的html頁和asp頁面類似。

[html] view plain copy print?在CODE上檢視程式碼片派生到我的程式碼片
  1. <
    spanstyle="font-family:FangSong_GB2312;font-size:18px;"><%@ page language="java"contentType="text/html;charset=GBK"%>
  2. <html>
  3.     <head>
  4.         <title>學生資訊</title>
  5.     </head>
  6.     <body>
  7.         <formaction="SearchStudentServlet"method="post">
  8.             出生日期:<
    inputtype="text"name="beginDate"><inputtype="text"name="endDate">
  9.             <inputtype="submit"value="查詢學生">
  10.         </form>
  11.     </body>
  12. </html></span>

第二:控制層 SearchStudentServlet用來接受客戶的請求,來處理流程,呼叫Model(StudentManager.java),轉發到要請求的後臺伺服器的student_list.jsp頁面

[html] view plain copy print?在CODE上檢視程式碼片派生到我的程式碼片
  1. <spanstyle="font-family:FangSong_GB2312;font-size:18px;">import java.text.*;  
  2. import java.util.*;  
  3. import java.io.*;  
  4. import javax.servlet.http.*;  
  5. import javax.servlet.*;  
  6. import com.bjpowernode.exam.model.*;  
  7. import com.bjpowernode.exam.manager.*;  
  8. public class SearchStudentServlet extends HttpServlet {  
  9.     public void doGet(HttpServletRequest request, HttpServletResponse response)   
  10.     throws ServletException, IOException {  
  11.         doPost(request, response);  
  12.     }  
  13.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  14.     throws ServletException, IOException {  
  15.         String sBeginDate = request.getParameter("beginDate");  
  16.         String sEndDate = request.getParameter("endDate");  
  17.         Date beginDate = new Date();  
  18.         Date endDate = new Date();  
  19.         try {  
  20.             beginDate = new SimpleDateFormat("yyyy-MM-dd").parse(sBeginDate);  
  21.             endDate = new SimpleDateFormat("yyyy-MM-dd").parse(sEndDate);  
  22.          }catch(Exception e) {  
  23.             e.printStackTrace();           
  24.          }     
  25.         StudentManager studentManager = new StudentManagerImpl();  
  26.         List<Student>studentList = studentManager.findStudentList(beginDate, endDate);  
  27.         //將學生列表設定到requet範圍中  
  28.         //request.setAttribute("student_list", studentList);  
  29.         //轉發,轉發是在伺服器端轉發的,客戶端是不知道的  
  30.         //request.getRequestDispatcher("/student_list.jsp").forward(request, response);  
  31.         //將studentList放到session中  
  32.         HttpSession session = request.getSession();  
  33.         session.setAttribute("student_list", studentList);  
  34.         //重定向,不會共享request  
  35.         //以下寫法錯誤,該 "/"代表了8080埠  
  36.         //response.sendRedirect("/student_list.jsp");  
  37.         response.sendRedirect(request.getContextPath() + "/student_list.jsp");  
  38.     }  
  39. }</span>

第三 :student_list.jsp頁面接收資料形成html,返回到瀏覽器,渲染在介面上
[java] view plain copy print?在CODE上檢視程式碼片派生到我的程式碼片
  1. <span style="font-family:FangSong_GB2312;font-size:18px;"><%@ page language="java" contentType="text/html;charset=GBK"%>  
  2. <%@ page import="java.util.*"%>  
  3. <%@ page import="java.text.*"%>  
  4. <%@ page import="com.bjpowernode.exam.model.*"%>  
  5. <%@ page import="com.bjpowernode.exam.manager.*"%>  
  6. <html>  
  7.     <head>  
  8.         <title>學生資訊</title>  
  9.         <style type="text/css">  
  10.          /*表格寬度為1px,實線,黑色*/
  11.            table{  
  12.                 border:1px solid black;     
  13.                 border-collapse:collapse;         
  14.            }  
  15.            td {  
  16.                 border:1px solid black;     
  17.                 border-collapse:collapse;         
  18.            }  
  19.         </style>        
  20.     </head>  
  21.     <body>  
  22.         <table border="1">  
  23.             <tr>  
  24.                 <td>學生程式碼</td>  
  25.                 <td>姓名</td>  
  26.                 <td>性別</td>  
  27.                 <td>出生日期</td>  
  28.                 <td>聯絡電話</td>  
  29.                 <td>家庭住址</td>  
  30.                 <td>班級名稱</td>  
  31.                 <td>年齡</td>  
  32.             </tr>  
  33.             <%  
  34.                 //List<Student>  studentList = (List)request.getAttribute("student_list");
  35.                 List<Student>  studentList = (List)session.getAttribute("student_list");  
  36.                 for (Iterator<Student> iter=studentList.iterator(); iter.hasNext();) {  
  37.                     Student student = iter.next();  
  38.             %>  
  39.             <tr>  
  40.                 <td><%=student.getStudentId()%></td>  
  41.                 <td><%=student.getStudentName()%></td>  
  42.                 <td><%=student.getSex()%></td>  
  43.                 <td><%=new SimpleDateFormat("yyyy-MM-dd").format(student.getBirthday())%></td>  
  44.                 <td><%=student.getContactTel()%></td>  
  45.                 <td><%=student.getAddress()%></td>  
  46.                 <td><%=student.getClasses().getClassesName()%></td>  
  47.                 <%  
  48.                     long b = 1000L*60L*60L*24L*365L;  
  49.                     long a = System.currentTimeMillis() - student.getBirthday().getTime();  
  50.                 %>  
  51.                 <td><%=a/b%></td>  
  52.             </tr>  
  53.             <%  
  54.                 }  
  55.             %>  
  56.         </table>  
  57.     </body>  
  58. </html></span>  
在View的student_list.jsp頁面中是大量的html和java程式碼的混合,在查詢條件介面query_condention.jsp主要是html,因為不涉及後臺資料的互動.

第四:xml配置Servlet:

[html] view plain copy print?在CODE上檢視程式碼片派生到我的程式碼片
  1. <spanstyle="font-family:FangSong_GB2312;font-size:18px;"><?xmlversion="1.0"encoding="ISO-8859-1"?>
  2. <web-appxmlns="http://java.sun.com/xml/ns/j2ee"
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  5.     version="2.4">
  6.     <servlet>
  7.         <servlet-name>SearchStudentServlet</servlet-name>
  8.         <servlet-class>SearchStudentServlet</servlet-class>
  9.     </servlet>
  10.     <servlet-mapping>
  11.         <servlet-name>SearchStudentServlet</servlet-name>
  12.         <url-pattern>/SearchStudentServlet</url-pattern>
  13.     </servlet-mapping>
  14. </web-app></span>

第五:顯示查詢結果


總結

    以上query_condention.jsp(輸入查詢條件)、SearchStudentServlet.java(請求控制Control分)+student_list.jsp(介面顯示)的組合相當於三層中的U層,都與介面的顯示相關,而StudentManager.java才是進入業務處理相當於三層的B層。故,我們可以簡單理解成,MVC就是java基於U層的又一個細化,將介面顯示和請求處理做了進一步細化分工。

    MVC被獨特的發展起來用於對映傳統的輸入、處理和輸出功能在一個邏輯的圖形化使用者介面的結構中,MVC是分層的思想的體現,但是區別於三層設計模式(區別以後再和大家分享)。


    知識的聯絡促使學習這塊知識難度不大,更加容易的上手,編制知識網顯得格外重要啊!

接下來和大家推出《深入淺出Java》系類部落格,共同學習、提高,敬請期待!