Servlet教程(四) 基于Servlet的MVC设计模式

Servlet教程(四) 基于Servlet的MVC设计模式

什么是MVC

在程序设计中,我们把采用模型(Model)、视图(View)、视图(Controller)三层分离的设计方式称为MVC设计模式。

MVC设计模式由以下三部分组成:

  • 模型(Model):对应的组件是JavaBean(Java类)。
    模型可以分为业务逻辑和数据模型,它们代表应用程序的业务逻辑和状态。
  • 视图(View):对应的组件是JSP或HTML文件。
    视图提供了可交互的客户界面,向客户显示模型数据。
  • 控制器(Controller):对应的组件是Servlet。
    控制器响应客户的请求,根据客户的请求来操作模型,并且把模型的响应结果由视图展示给客户。

MVC设计模型的优点和好处

  1. 各司其职、互不干涉
    如果某一层的需求发生了变化,就只需要更改相应层中的代码,而不会影响到其他层。
  2. 有利于在开发中的分工
    由于按层把系统分开,那么就能更好地实现开发中的分工。
    网页设计人员可以开发JSP页面,对于业务熟悉的开发人员可以开发模型中相关业务处理的方法,而其他开发人员可开发控制器,以进行程序控制。
  3. 有利于组件的重用
    如控制层可独立成一个通用的组件,视图层也可做成通用的操作界面。把显示与数据分离,这样就增加了各个模块的可重用性。

Servlet的MVC编程模式

由Servlet接收客户端请求,调用相应的模型处理业务逻辑和数据,再由Servlet根据处理的结果,选择相应的JSP或HTML文件响应客户端。
以一个加法计算器的例子,说明一下MVC的编程模式:

项目结构

这里写图片描述

核心控制器 PlusServlet.java
package com.etc.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.etc.model.PlusModel;
import com.etc.service.PlusService;

public class PlusServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // ### 控制器得到请求参数
        String a = request.getParameter("a");
        String b = request.getParameter("b");

        // ### 请求参数,字符串转为整数
        int inta = Integer.valueOf(a);
        int intb = Integer.valueOf(b);

        // ### 初始化Model
        PlusModel model = new PlusModel();
        model.setA(inta);
        model.setB(intb);

        // ### 调用Service业务逻辑
        new PlusService().doit(model);

        // ### 向View(JSP)传递Model
        request.setAttribute("model", model);

        // ### 控制器跳转到View
        request.getRequestDispatcher("/result.jsp").forward(request, response);
    }

}
JSP视图 success.jsp
<%@ page language="java" import="java.util.*,com.etc.model.*" %>
<html>
  <head></head>
  <body>
    <%-- 得到控制台Servlet传递的Model  --%>
    <% PlusModel model = (PlusModel)request.getAttribute("model"); %>

    <%-- 显示结果  --%> 
    <%=model.getA() %>+<%=model.getB() %> =<%=model.getResult() %>
  </body>
</html>
模型类,PlusModel
package com.etc.model;

public class PlusModel {
    private int a;
    private int b;
    private int result;

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public int getB() {
        return b;
    }

    public void setB(int b) {
        this.b = b;
    }

    public int getResult() {
        return result;
    }

    public void setResult(int result) {
        this.result = result;
    }

}

简单的加法业务 PlusService

package com.etc.service;

import com.etc.model.PlusModel;

public class PlusService {
    public void doit(PlusModel model) {
        model.setResult(model.getA() + model.getB());
    }
}

运行成功

这里写图片描述这里写图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值