MVC基础

  • Post author:
  • Post category:其他


一、简介

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协调。



版权声明:本文为sssxlxwbwz原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。