posts - 26,  comments - 14,  trackbacks - 0
MVC
 

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 龍ぜ殘剑 阅读(1364) 评论(2)  编辑  收藏

FeedBack:
# re: MVC
2010-12-14 17:37 | 雪落无声
例子比较好,有空加我QQ多交流:294956981 ,呵呵!  回复  更多评论
  
# re: MVC
2010-12-14 19:32 | 龍ぜ殘剑
谢谢 好的。我们共同进步吧。。。。@雪落无声
  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
<2010年12月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜