什么是MVC?

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

换句话说:

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
  通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。
  通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。
  通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

MVC是一个框架模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的MVC就是JSP + servlet + javabean的模式

Model:常用javabean去实现,通过各种类来对数据库的数据进行获取,并封装在对象当中。

View:常用JSP来实现,通过可直接观察的JSP页面来展示我们从数据库中获取的数据。

Controller:常用servlet来实现,通过servlet来获取经过javabean包装过的对象(已存入数据库中的数据),然后再发送数据传输到JSP界面。

这里可能有人会想知道,javabean是什么:

JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,long和class方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制发现和操作这些JavaBean 的属性。

JavaBean一般由三部分组成:

1.属性

2.方法

3.事件

实际上JavaBean是一种Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称bean。由于javabean是基于java语言的,因此javabean不依赖平台,具有以下特点:
1. 可以实现代码的重复利用
2. 易编写、易维护、易使用
3. 可以在任何安装了Java运行环境的平台上的使用,而不需要重新编译
总结:
粗俗的讲,javabean就是一个简单的类,但是这个类要有set()、get()方法,还有类中的属性都要是私有化的(private),方法是公有化的(public),还有就是要有一个无参的构造方法,如果你要设置了带参数的构造方法,那么请把无参的构造方法重新写一次,因为默认的构造方法会被带参数的构造方法覆盖掉。
根据经典模式(JSP + servlet + javabean)来举范例:
场景:我们把数据库中的表的信息显示在JSP页面上。
这是数据库的数据:

我们需要创建一个动态网页项目(Dynamic Web project ),然后倒入两个jar包进去这个项目中。

倒入项目的2种方法:

1.设置成maven工程,在pom.xml文件中倒入jar包的<dependency></dependency>

<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version>
</dependency><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.39</version>
</dependency>

2.下载jar包,然后倒入到WebContent/WEB-INF/lib目录下(不要导错地方)

msyql-connector-java-5.1.39.jar:连接数据库使用的。

点击打开链接

jstl-1.2.jar:用于在jsp页面进行数据库的数据迭代输出。

点击打开链接

关于什么是jstl,还有它的用法,博主推荐一下这篇博文:

点击打开链接

Model(模型)

(创建两个包,一个model包用于建立连接数据库和获取数据,一个modelUser包用于建立存放数据的对象User)

MysqlConnection.java:

package com.ricky.model;import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;public class MysqlConnection {/*** 连接MySQL数据库,返回一个连接* @return*/public static Connection getConnectiion() {Connection conn=null;Properties p=new Properties();try {p.load(new FileInputStream("E:/码神/mvc/src/jdbc.properties"));Class.forName("com.mysql.jdbc.Driver");conn=DriverManager.getConnection(p.getProperty("ip"), p.getProperty("username"), p.getProperty("password"));System.out.println(p.getProperty("ip"));} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return conn;}
}

GetUser.java:

package com.ricky.model;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;import com.ricky.modelUser.User;public class GetUser {/*** 用于从数据库获取信息,然后把信息存放在一个一个User对象中* @return 返回一个装User对象的链表*/public static List<User> getUserList() {List<User> userList=new ArrayList<User>();Connection conn=MysqlConnection.getConnectiion();Statement stat=null;ResultSet rs=null;try {stat=conn.createStatement();rs=stat.executeQuery("select * from user");while(rs.next()){String id=rs.getString("id");String username=rs.getString("username");String password=rs.getString("password");System.out.println(id+" "+username+" "+password);User user=new User(id,username,password);userList.add(user);}} catch (SQLException e) {e.printStackTrace();}finally{try {rs.close();stat.close();conn.close();} catch (SQLException e) {e.printStackTrace();}}return userList;}
}

User.java:

package com.ricky.modelUser;public class User {private String id;private String username;private String password;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public User(String id,String username,String password){this.id=id;this.username=username;this.password=password;}
}

View(视图)

(创建一个简单的jsp页面来显示数据)

这里需要在jsp文件中引用jstl(上面有篇博文有详细介绍用法):

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

userList.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><table><tr><th>序号</th><th>id</th><th>username</th><th>password</th></tr><c:forEach items="${userList }" var="user" varStatus="st"><tr><td><c:out value="${st.index+1 }"></c:out></td><td><c:out value="${user.id }"></c:out></td><td><c:out value="${user.username }"></c:out></td><td><c:out value="${user.password }"></c:out></td></tr></c:forEach></table>
</body>
</html>

Controller(控制器)

(创建userServlet来接受数据库的数据对象User,控制数据对象输出到jsp页面)

userServlet.java:

package com.ricky.controller;import java.io.IOException;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.ricky.model.GetUser;
import com.ricky.modelUser.User;/*** Servlet implementation class userServlet*/
@WebServlet("/userServlet")
public class userServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public userServlet() {super();}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {List<User> userList=GetUser.getUserList();//设置一个userList属性传到下面的jsp页面request.setAttribute("userList", userList);request.getRequestDispatcher("/userList.jsp").forward(request, response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

运行userServlet:

浅谈什么是MVC设计模式相关推荐

  1. 理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式丨C++后端开发丨Linux服务器开发丨web服务器

    理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式 1. 开闭.单一职责.里氏替换.接口隔离等设计原则 2. 随处可见的模板方法 3. nginx中核心设计模式 责任链模式 4. 责 ...

  2. 浅谈Laravel中的设计模式(四) Contract 契约模式

    阅读时长:3分钟 技术预备:熟悉Laravel的使用 契约模式(Contract) 一.首先什么是契约模式呢? 学过Java的童鞋一定知道interface.抽象类之类的概念. 主要就是为了具有相同操 ...

  3. python mvc web_浅谈python_web的MVC和MTV

    一.作者感悟 之前学了java,可以简单的用ssm框架写点网页,后来入黑盒测试,自学了python,但说实话我更比较喜欢java那种规规矩矩,现在只是自己 写个脚本爬虫更多的会用python灵活 二. ...

  4. 【转载】浅谈 flash 中的设计模式:模版

    文章来之:http://blog.zol.com.cn/822/article_821479.html 我们开发过程中肯定会希望这次做的东西下次还能用,于是我们提出了面向对象的开发方法,就是把开发过程 ...

  5. 浅谈spring中的设计模式(转)

    工厂模式 BeanFactory,从xml或者注解加载BeanDefinition,然后实例化对象,其中AbstractAutowiredCapableBeanFactory实现了主要的逻辑 单例模式 ...

  6. 浅谈MVVM和MVC模式

    首先MVVM呢,我们可以理解为MVC的优化版,Angular就是基于MVC模式的框架,而VUE是基于MVVM模式的框架,是MVC模式的优化版,也是小白最容易上手的一个框架.  MVC模式: (Augl ...

  7. final类是否可以被代理_浅谈Java【代理设计模式】——看这篇文章就懂了

    什么是代理模式 为其他对象提供一种代理以控制对这个对象的访问. 为什么使用代理模式 中介隔离:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的 ...

  8. 浅谈javaweb三大框架和MVC设计模式

    浅谈javaweb三大框架和MVC设计模式 转载自:http://blog.csdn.net/sunpeng19960715/article/details/50890705 小序:博主以前在学jav ...

  9. 浅谈开发中的MVVM模式及与MVP和MVC的区别

    2019独角兽企业重金招聘Python工程师标准>>> 我记得前段时间分享了一篇文章< 浅谈Andorid开发中的MVP模式>(点击可跳转),反响不错,为了进一步介绍MV ...

最新文章

  1. Linux下的mysql设置表不区分大小写
  2. 世界上最好的光刻机为什么来自荷兰?【物联网智商精选】
  3. spring事务管理一:关于事务管理的接口
  4. mysql 8.0 慢查询_MySQL慢查询分析
  5. cad 打开硬件加速卡_CAD卡顿?电脑带不动?几个简单实用的方法,解决CAD运行卡顿问题...
  6. iOS 九宫格手势密码
  7. C语言在linux终端下实现2048小游戏:第二版
  8. [BZOJ2282]消防
  9. 使用util.js处理表格
  10. 计算机论文对比实验怎么做,如何查找别人论文(计算机类文献)中实验部分的代码?...
  11. 在点光源的基础上利用光域网来分布光的传播范围及方向_daiding
  12. 软件工程基础-个人项目-数独的生成与求解
  13. ECharts常用图表(柱状图)
  14. drozer 找不到java_自己安装drozer时出现各种问题的解决
  15. linux 的 绘画软件,Drawing Linux(简单画图工具)
  16. android画布橡皮,Android画板开发之橡皮擦功能
  17. c datetime 格式化
  18. 中国顶级黑客,你所不知的内幕
  19. k8s访问外部mysql_Kubernetes连接外部数据源
  20. 数据中心双活该如何构建

热门文章

  1. 微信小程序后台服务怎么搭建
  2. 手工实现LinkedList2_get查询_节点遍历
  3. 尚策解读天猫入驻趋势:从消费大数据观测电商现状
  4. 一串代码让你成为机房最靓的仔
  5. 分享八个我常用的资源网站
  6. 百度编辑器ueditor工具栏
  7. CSGO游戏辅助的现实教程-自瞄
  8. 我国防疫数据报告,2022年广东花费711亿,北京人均支出第一
  9. 【chrome】“您的连接不是私密连接”的解决方法
  10. 在macOS上使用网易mumu模拟器和触动精灵