MVC (
Model View Controler) 本來是存在于Desktop程序中的,M是指的是數據模型,V是指的是用戶界面,C則是控制器。使用MVC的目的是將M和V的實現代碼分離,從而使同一個程序可以使用不同的表現形式。比如說一批統計數據你可以分別用柱狀圖,餅狀圖來表示。C存在的目的是確保M和V的同步,一旦M改變了,V應該同步更新。
MVC構架為:
說明:
模型——視圖——控制器(MVC)是Xerox PARC在很在代為編程的語言Smalltalk--80發明的一種軟件設計模式,至今運用仍為廣泛。最近幾年被推薦為Sun公司J2EE平臺設計模式,并且受到越來越多的使用 ColdFusion 和 PHP 的開發者的歡迎。模型-視圖-控制器模式是一個有用的工具箱,它有很多好處,但也有一些缺點。
MVC如何工作
MVC是一個設計模式,他是強制的使用程序的輸入,處理和輸出分開。使用MVC應用程序分成了三個核心部件:模型,視圖,控制器。他們各自處理自己的任務。
模型
模型表示企業數據和業務規則。在MVC的三個部件中,模型擁有最多的處理任務。例如它可能用象EJBs和ColdFusion Components這樣的構件對象來處理數據庫。被模型返回的數據是中立的,就是說模型與數據格式無關,這樣一個模型能為多個視圖提供數據。由于應用于模型的代碼只需寫一次就可以被多個視圖重用,所以減少了代碼的重復性。
視圖
視圖是用戶看到并與之交互的界面。如何處理應用程序界面變得越來越有挑戰性。MVC一個大的好處是他能為你的應用程序處理很多不同的視圖。在視圖中其實沒有真正的處理發生,不管這些數據是聯機存儲的還是一個雇員列表,作為視圖來講,它只是作為一種輸出數據并允許用戶操縱的方式。
控制器
控制器接受用戶的輸入并調用模型和視圖去完成用戶的需求。所以當單擊Web頁面中的超鏈接和發送HTML表單時,控制器本身不輸出任何東西和做任何處理。它只是接收請求并決定調用哪個模型構件去處理請求,然后用確定用哪個視圖來顯示模型處理返回的數據。
MVC并不適合小型甚至中等規模的應用程序,花費大量時間將MVC應用到規模并不是很大的應用程序通常會得不償失。但是MVC設計模式是一個很好創建軟件的途徑,它所提倡的一些原則,像內容和顯示互相分離可能比較好理解。但是如果你要隔離模型、視圖和控制器的構件,你可能需要重新思考你的應用程序,尤其是應用程序的構架方面。如果你肯接受MVC,并且有能力應付它所帶來的額外的工作和復雜性,MVC將會使你的軟件在健壯性,代碼重用和結構方面上一個新的臺階。
這里我做了個比較簡單的程序其中使用了MVC思想:
在這里創建了一個實體的類,也就是M(model),即User類:
package com.bx.jstl;
public class User {
private int id; //聲明了兩給屬性;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后在此編寫了一個類JSTLServlet 是繼承了類HttpServlet類的:
package com.bx.JSServlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.bx.jstl.User;
public class JSTLServlet extends HttpServlet{
public void doGet(HttpServletRequest request , HttpServletResponse response)
throws IOException , ServletException
{
List<User> list = new ArrayList<User>();
for(int i = 0 ; i < 8 ; i++)
{
User u = new User();
u.setId(i);
u.setName("name"+i);
list.add(u);
}
request.setAttribute("UserList", list);
request.getRequestDispatcher("/c_forEach.jsp").forward(request, response);
}
}
現在我們應該來配置WEB.xml了,這是每個Web項目都做的一步,如下所示:
<servlet>
<servlet-name>JSTLServlet</servlet-name>
<servlet-class>com.bx.JSServlet.JSTLServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JSTLServlet</servlet-name>
<url-pattern>/jstl</url-pattern>
</servlet-mapping>
下面我們建立一個c_forEach.jsp,在其body中的編寫代碼如下:
<table>
<tr><th>ID</th><th>index</th><th>count</th><th>isFirst?</th><th>isLast</th></tr>
<c:forEach var="user" items="${UserList}" varStatus="status">
<tr>
<td>
${user.id}
</td>
<td>
${user.name}
</td>
<td>
${status.index}
</td>
<td>
${status.count}
</td>
<td>
${status.first}
</td>
<td>
${status.last}
</td>
</tr>
</c:forEach>
</table>
現在我們開啟comcat 運行此項目,在瀏覽器中輸入:
http://localhost:8080/JSP_JSTL_Project/jstl
得到網頁為:
posted on 2010-12-11 17:45
龍ぜ殘劍 閱讀(1371)
評論(2) 編輯 收藏