一、什么是MVC

  MVC即Model-View-Controller(模型-视图-控制器)是一种软件设计模式,最早出现在Smalltalk语言中,后被Sun公司推荐为Java EE平台的设计模式。

  MVC把应用程序分成了上面3个核心模块,这3个模块又可被称为业务层-视图层-控制层。顾名思义,它们三者在应用程序中的主要作用如下:

  业务层:负责实现应用程序的业务逻辑,封装有各种对数据的处理方法。它不关心它会如何被视图层显示或被控制器调用,它只接受数据并处理,然后返回一个结果。

  视图层:负责应用程序对用户的显示,它从用户那里获取输入数据并通过控制层传给业务层处理,然后再通过控制层获取业务层返回的结果并显示给用户。

  控制层:负责控制应用程序的流程,它接收从视图层传过来的数据,然后选择业务层中的某个业务来处理,接收业务层返回的结果并选择视图层中的某个视图来显示结果。

  可以用下图来表示MVC模式中三者之间的关系:

  MVC是一种设计思想,它并没有统一的标准,其中一种MVC思想的典型实现为JavaBean(模式)+jsp(视图)+servlet(控制器),而我喜欢将JavaBean中的业务逻辑再单独列出来,形成service(模式)+JavaBean(数据集)+jsp(视图)+servlet(控制器)的结构,下面我们来实现它。

二、MVC实现

  在这里,我将应用MVC设计模式,实现用户在前台中输入一段文字,后台获取并拼接上字符串“——ysy”,再送回前台显示的一个简单的应用程序。具体效果如图:

1、视图层

  1. <%@ page language="java" contentType="text/html; charset=utf-8"
  2. pageEncoding="utf-8"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta charset="utf-8">
  7. <title>test</title>
  8. </head>
  9. <body>
  10. <form action="./test.do" method="post">
  11. 输入你想说的话~
  12. <input type="text" name="input"/>
  13. <input type="submit" value="提交" />
  14. <br/>
  15. <%
  16. String s = (String)request.getAttribute("outPut");   <!--从request域中获取结果-->
  17. if(s != null){                         <!--如果有结果,显示结果-->
  18. %>
  19. <%=s %>
  20. <%
  21. }
  22. %>
  23. </form>
  24. </body>
  25. </html>

2、控制层

  servlet的编写:

  1. package servlet;
  2.  
  3. import java.io.IOException;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9.  
  10. import bean.TestBean;
  11. import service.TestService;
  12.  
  13. @WebServlet("/test.do")                                    //通过注释配置servlet
  14. public class TestServlet extends HttpServlet {
  15. private static final long serialVersionUID = 1L;
  16.  
  17. public TestServlet() {
  18. super();
  19. }
  20.  
  21. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  22. doPost(request, response);
  23. }
  24.  
  25. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  26.  
  27. request.setCharacterEncoding("utf-8");                     //设置字符集,防止中文乱码
  28.  
  29. TestBean testBean = new TestBean();                       //获取数据集对象
  30. TestService testService = new TestService();                 //获取业务层对象
  31.  
  32. String s =request.getParameter("input");                    //获取视图层提交的数据
  33.  
  34. testBean.setInput(s);                               //将数据存入数据集中
  35. s = testService.change(testBean);                         //调用业务层,传入数据,接收返回结果
  36. request.setAttribute("outPut", s);                        //将结果存入request域中
  37. request.getRequestDispatcher("test.jsp").forward(request, response);   //跳转到视图层
  38. }
  39.  
  40. }

  如果不想使用注释来配置servlet,还可以通过web.xml进行配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  3.   <display-name>Java_Web</display-name>
  4.   <welcome-file-list>
  5.     <welcome-file>index.html</welcome-file>
  6.     <welcome-file>index.htm</welcome-file>
  7. 7    <welcome-file>index.jsp</welcome-file>
  8. 8    <welcome-file>default.html</welcome-file>
  9.     <welcome-file>default.htm</welcome-file>
  10. 10    <welcome-file>default.jsp</welcome-file>
  11. 11  </welcome-file-list>
  12.  
  13. 13  <servlet>               //通过配置文件配置servlet
  14. 14    <servlet-name>test</servlet-name>
  15. 15    <servlet-class>servlet.TestServlet</servlet-class>
  16. 16  </servlet>
  17. 17  <servlet-mapping>
  18. 18    <servlet-name>test</servlet-name>
  19. 19    <url-pattern>/test.do</url-pattern>
  20. 20  </servlet-mapping>
  21.  
  22. </web-app>

3、数据集

  1. package bean;
  2.  
  3. public class TestBean {
  4. private String input;
  5.  
  6. public String getInput() {
  7. return input;
  8. }
  9.  
  10. public void setInput(String input) {
  11. this.input = input;
  12. }
  13.  
  14. }

4、业务层

  1. package service;
  2.  
  3. import bean.TestBean;
  4.  
  5. public class TestService {
  6. public String change(TestBean testBean) {
  7.  
  8. String s = testBean.getInput();       //从数据集中获取数据
  9.  
  10. if(s != null && s != "") {         //如果有数据,则拼接字符串
  11. s += "——ysy";
  12. }
  13. return s;
  14. }
  15. }

三、MVC框架模式的优势

  1、有利于代码的复用

  2、有利于开发人员分工

  3、有利于降低程序模块间的耦合,便于程序的维护与扩展。

MVC设计模式思想及简单实现的更多相关文章

  1. 请求转发:MVC设计模式、细节、请求域属性的编程实例、请求重定向和请求转发的区别

      请求转发:MVC设计模式.细节.请求域属性的编程实例.请求重定向和请求转发的区别 MVC设计模式将一次请求的响应过程分成三个功能模块(一般称之为层)来协同完成,这三个模块分别是Model(模型层) ...

  2. 传智播客JavaWeb day07、day08-自定义标签(传统标签和简单标签)、mvc设计模式、用户注册登录注销

    第七天的课程主要是讲了自定义标签.简单介绍了mvc设计模式.然后做了案例 1. 自定义标签 1.1 为什么要有自定义标签 前面所说的EL.JSTL等技术都是为了提高jsp的可读性.可维护性.方便性而取 ...

  3. [原创]java WEB学习笔记19:初识MVC 设计模式:查询,删除 练习(理解思想),小结 ,问题

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  4. ASP.NET Core MVC 设计模式 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core MVC 设计模式 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core MVC 设计模式 上一章节中,我们提到 ASP.NET Co ...

  5. 基于MVC设计模式的Web应用框架:struts2的简单搭建(一)

    Struts2的初步介绍 Struts2是apache项目下的一个web 框架,普遍应用于阿里巴巴.京东等互联网.政府.企业门户网站.虽然之前存在了很大的安全漏洞,在2013年让苹果.中国移动.中国联 ...

  6. 面向对象设计思想和MVC设计模式

    虽然之前学习Java时有接触过面向对象的设计思想,但因当时Java没学好.所以导致这两天讲php的面向对象设计时,感到没有头绪,这也反应了我练习少和逻辑能力的不足.而MVC设计思想 面向对象就是要将系 ...

  7. 谈谈JAVA工程狮面试中经常遇到的面试题目------什么是MVC设计模式

    作为一名java工程狮,大家肯定经历过很多面试,但每次几乎都会被问到什么是MVC设计模式,你是怎么理解MVC的类似这样的一系列关于MVC的问题. [出现频率] [关键考点] MVC的含义 MVC的结构 ...

  8. 侃侃前端MVC设计模式

    前言 前端的MVC,近几年一直很火,大家也都纷纷讨论着,于是乎,抽空总结一下这个知识点.看了些文章,结合实践略作总结并发表一下自己的看法. 最初接触MVC是后端Java的MVC架构,用一张图来表示之— ...

  9. iOS中MVC设计模式

    在组织大型项目的代码文件时,我们常用MVC的思想.MVC的概念讲起来非常简单,就和对象(object)一样.但是理解和应用起来却非常困难.今天我们就简单总结一下MVC设计理念. MVC(Model V ...

随机推荐

  1. 一文读懂 Spring Boot、微服务架构和大数据治理三者之间的故事

    微服务架构 微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物.互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况 ...

  2. esayui扩展验证方法

    下面是关于平时中积累的esayui扩展验证方法仅作记录:       /**************************************************************** ...

  3. 原生 JavaScript 实现扫雷

    学习了这么长时间的 JS,不能光看不练,于是就写了个小游戏练习一下.因为自己还是个菜鸟,所以有错误的话还请各位大佬多多指点,谢谢啦~ 如果感兴趣的话可以试试:Demo 项目地址:game-mineSw ...

  4. linux定时任务cron配置

    实现linux定时任务有:cron.anacron.at,使用最多的是cron任务 名词解释 cron--服务名:crond--linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与 ...

  5. GO安全并发之无锁原子操作

    声明:本文是<Go并发编程实战>的样章,禁止以任何形式转载此文. 摘要: 我们已经知道,原子操作即是进行过程中不能被中断的操作.也就是说,针对某个值的原子操作在被进行的过程当中,CPU绝不 ...

  6. Spring Webflux: Kotlin DSL [片断]

    原文链接:https://dzone.com/articles/spring-webflux-kotlin-dsl-snippets 作者:Biju Kunjummen 译者:Jackie Tang ...

  7. Java基础系列--冒泡排序

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9064218.html 1.算法简介 冒牌排序是很耳熟的排序方式,虽然它使用的很少,但是经 ...

  8. 报错 'dict' object has no attribute 'has_key'

    has_key方法在python2中是可以使用的,在python3中删除了. 比如: if dict.has_key(word): 改为: if word in dict:

  9. EF生成模型出现异常:表“TableDetails“中列“IsPrimaryKey”的值为DBNull解决方法

    Entity Framework连接MySQL时:由于出现以下异常,无法生成模型:"表"TableDetails"中列"IsPrimaryKey"的值 ...

  10. APNs 推送原理及问题

    http://bbs.csdn.net/topics/390461996 在 iOS 平台上,大部分应用是不允许在后台运行并连接网络的.在应用没有被运行的时候,只能通过 Apple Push Noti ...