MVC基础

一、简介

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值