在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頁面類似。
- <span style="font-family:FangSong_GB2312;font-size:18px;"><%@ page language="java" contentType="text/html;charset=GBK"%>
- <html>
- <head>
- <title>學生信息</title>
- </head>
- <body>
- <form action="SearchStudentServlet" method="post">
- 出生日期:<input type="text" name="beginDate">至<input type="text" name="endDate">
- <input type="submit" value="查詢學生">
- </form>
- </body>
- </html></span>
第二:控制層 SearchStudentServlet用來接受客戶的請求,來處理流程,調用Model(StudentManager.java),轉發到要請求的後臺服務器的student_list.jsp頁面
- <span style="font-family:FangSong_GB2312;font-size:18px;">import java.text.*;
- import java.util.*;
- import java.io.*;
- import javax.servlet.http.*;
- import javax.servlet.*;
- import com.bjpowernode.exam.model.*;
- import com.bjpowernode.exam.manager.*;
- public class SearchStudentServlet extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doPost(request, response);
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- String sBeginDate = request.getParameter("beginDate");
- String sEndDate = request.getParameter("endDate");
- Date beginDate = new Date();
- Date endDate = new Date();
- try {
- beginDate = new SimpleDateFormat("yyyy-MM-dd").parse(sBeginDate);
- endDate = new SimpleDateFormat("yyyy-MM-dd").parse(sEndDate);
- }catch(Exception e) {
- e.printStackTrace();
- }
- StudentManager studentManager = new StudentManagerImpl();
- List<Student> studentList = studentManager.findStudentList(beginDate, endDate);
- //將學生列表設置到requet範圍中
- //request.setAttribute("student_list", studentList);
- //轉發,轉發是在服務器端轉發的,客戶端是不知道的
- //request.getRequestDispatcher("/student_list.jsp").forward(request, response);
- //將studentList放到session中
- HttpSession session = request.getSession();
- session.setAttribute("student_list", studentList);
- //重定向,不會共享request
- //以下寫法錯誤,該 "/"代表了8080端口
- //response.sendRedirect("/student_list.jsp");
- response.sendRedirect(request.getContextPath() + "/student_list.jsp");
- }
- }</span>
第三 :student_list.jsp頁面接收數據形成html,返回到瀏覽器,渲染在界面上
- <span style="font-family:FangSong_GB2312;font-size:18px;"><%@ page language="java" contentType="text/html;charset=GBK"%>
- <%@ page import="java.util.*"%>
- <%@ page import="java.text.*"%>
- <%@ page import="com.bjpowernode.exam.model.*"%>
- <%@ page import="com.bjpowernode.exam.manager.*"%>
- <html>
- <head>
- <title>學生信息</title>
- <style type="text/css">
- /*表格寬度爲1px,實線,黑色*/
- table{
- border:1px solid black;
- border-collapse:collapse;
- }
- td {
- border:1px solid black;
- border-collapse:collapse;
- }
- </style>
- </head>
- <body>
- <table border="1">
- <tr>
- <td>學生代碼</td>
- <td>姓名</td>
- <td>性別</td>
- <td>出生日期</td>
- <td>聯繫電話</td>
- <td>家庭住址</td>
- <td>班級名稱</td>
- <td>年齡</td>
- </tr>
- <%
- //List<Student> studentList = (List)request.getAttribute("student_list");
- List<Student> studentList = (List)session.getAttribute("student_list");
- for (Iterator<Student> iter=studentList.iterator(); iter.hasNext();) {
- Student student = iter.next();
- %>
- <tr>
- <td><%=student.getStudentId()%></td>
- <td><%=student.getStudentName()%></td>
- <td><%=student.getSex()%></td>
- <td><%=new SimpleDateFormat("yyyy-MM-dd").format(student.getBirthday())%></td>
- <td><%=student.getContactTel()%></td>
- <td><%=student.getAddress()%></td>
- <td><%=student.getClasses().getClassesName()%></td>
- <%
- long b = 1000L*60L*60L*24L*365L;
- long a = System.currentTimeMillis() - student.getBirthday().getTime();
- %>
- <td><%=a/b%></td>
- </tr>
- <%
- }
- %>
- </table>
- </body>
- </html></span>
第四:xml配置Servlet:
- <span style="font-family:FangSong_GB2312;font-size:18px;"><?xml version="1.0" encoding="ISO-8859-1"?>
- <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
- version="2.4">
- <servlet>
- <servlet-name>SearchStudentServlet</servlet-name>
- <servlet-class>SearchStudentServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>SearchStudentServlet</servlet-name>
- <url-pattern>/SearchStudentServlet</url-pattern>
- </servlet-mapping>
- </web-app></span>
第五:顯示查詢結果
總結
以上query_condention.jsp(輸入查詢條件)、SearchStudentServlet.java(請求控制Control分)+student_list.jsp(界面顯示)的組合相當於三層中的U層,都與界面的顯示相關,而StudentManager.java纔是進入業務處理相當於三層的B層。故,我們可以簡單理解成,MVC就是java基於U層的又一個細化,將界面顯示和請求處理做了進一步細化分工。
MVC被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中,MVC是分層的思想的體現,但是區別於三層設計模式(區別以後再和大家分享)。
知識的聯繫促使學習這塊知識難度不大,更加容易的上手,編制知識網顯得格外重要啊!
接下來和大家推出《深入淺出Java》系類博客,共同學習、提高,敬請期待!