一、简介
MVC的全名是
Model View Controller
,是
模型(model)-视图(view)-控制器(controller)
的缩写,
其核心是业务逻辑和表示要清晰的分离
。
在web应用中,
模型 – 视图 – 控制器(MVC)
就是把业务逻辑从servlet中抽取出来,放到一个模型中(模型即可重用的普通Java类)
,模型是业务数据(如购物车状态等)和处理该数据的方法的组合。
二、简单示例
2.1 Model
在MVC中,模型(Model)是指应用的后台,
主要是业务功能的编写
。大多数情况下,其是普通的Java代码,根本不知道自己会被Servlet调用,不能把模型限制为只能由web应用使用,对他来说,被谁调用,没什么区别。
模型可能会非常复杂,涉及到业务逻辑即数据库操作等
。如下是一个简单的Model。其只实现了一个简单的功能,根据不同的颜色,提供可供选择的产品。
/**
* Model
*/
public class BeerExpert {
public List getBrands(String color){
List brands = new ArrayList();
if(color.equals("amber")){
brands.add("Jack Amber");
brands.add("Red Moose");
}else{
brands.add("Jail pale ale");
brands.add("Gout Stout");
}
return brands;
}
}
2.2 View
首先,编写一个简单的
页面
,该页面用于选择啤酒的特性,并将选择结果提交给服务器。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Beer Selection Page</title>
</head>
<body>
<h1 align="center">Beer Selection Page</h1>
<form method="post" action="SelectBeer.do">
Select beer characteristics
Color:
<select name="color" size="1">
<option value="light">light</option>
<option value="amber">amber</option>
<option value="broen">brown</option>
<option value="dark">dark</option>
</select>
<br><br>
<center>
<input type="submit">
</center>
</form>
</body>
</html>
在有了一个啤酒特性选择页面之后,再编写一个JSP页面,如下所示,该页面根据客户提交的啤酒特性,给出一些建议。
<%@ page import="java.util.List" %>
<%@ page import="java.util.Iterator" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>Beer Recommondations JSP</h1>
<p>
<%
List styles = (List) request.getAttribute("styles"); //从Servlet获取到专家的回答
Iterator it = styles.iterator();
while(it.hasNext()){
out.print("<br> try"+it.next());
}
%>
<br><br>
<center>
Email:
<%
String email = (String)request.getAttribute("adminEmail");
out.print(email);
%>
<br>
MainEmail:-
<%
//String mainEmail =
%>
</center>
</body>
</html>
2.3
Controller
控制器由servlet担任
,其主要用于
接受用户的请求并调用模型和视图去完成用户的需求
,控制器本身不输出任何东西和做任何处理。
它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据
。
/**
* Servlet,负责接收请求并响应
*/
public class BeerSelect extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String color = request.getParameter("color"); //从客户的Post请求中获取到参数
BeerExpert be = new BeerExpert(); //获取到模型
List result = be.getBrands(color);
String adEmail = getServletConfig().getInitParameter("adminEmail");
//将模型(专家)返回的结果附加到请求中,
request.setAttribute("styles",result);
request.setAttribute("adminEmail",adEmail);
//利用RequestDispatcher对象,将请求转发给另外一个Servlet或JSP页面
RequestDispatcher view = request.getRequestDispatcher("result.jsp"); //为JSP实例化一个请求分派器
//使用请求分派器,要求容器准备好JSP,并向JSP发送请求和响应
view.forward(request,response);
}
}
三、结束
MVC的思想非常重要,从上面简单的例子中,我们可以体会到,业务逻辑和显示层完全解耦,Model根本就不知道JSP的存在,这两者由Controller协调。