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) 编辑 收藏