MVC原理及案例分析

MVC原理及案例分析

关于MVC

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


以简单的登录功能为案例,简单分析MVC的具体实现

项目执行的流程

在这里插入图片描述


项目文件中各个层次的作用

在这里插入图片描述

具体代码实现:

在这里插入图片描述

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!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>登录</title>
</head>
<body><form action="LoginServlet" method="post">用户名:<input type="text" name="uname"><br/>密码:&nbsp;&nbsp;&nbsp;<input type="password" name="upwd"><br/><input type="submit" value="登录"></form>
</body>
</html>

Welcome.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!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>登陆成功!!
</body>
</html>

LoginServlet.java

package org.zxm.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 org.zxm.Dao.LoginDao;
import org.zxm.entity.Login;//控制器层,用于接收view层的请求,并分发给Model处理
public class LoginServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//post请求方式设置编码request.setCharacterEncoding("UTF-8");//接受用户名和密码String name = request.getParameter("uname");String pwd = request.getParameter("upwd");//封装Login login = new Login(name,pwd);//将用户名和密码传递到登录功能里面(LoginDao)//调用模型层的登录功能int result = LoginDao.login(login);if(result > 0) {//重定向response.sendRedirect("Welcome.jsp");}else {response.sendRedirect("login.jsp");}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

LoginDao.java

/*** */
package org.zxm.Dao;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import org.zxm.entity.Login;/*** @author 11441*模型层,用于处理登录(查询数据库)*/
public class LoginDao {//用于登录的login方法//在方法参数中传入login类型public static int login(Login login) {//登录成功与否的标识//boolean flag = false;int flag = -1;	//-1系统异常 0:用户名或密码有误 1:登陆成功int result = -1;Connection connection = null;PreparedStatement prepareStatement = null;ResultSet rs = null;try {//加载驱动Class.forName("com.mysql.jdbc.Driver");//获取连接connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test1", "root", "root");//访问数据库String sql = "select count(*) from login where username = ? and pwd = ?";prepareStatement = connection.prepareStatement(sql);prepareStatement.setString(1, login.getUsername());prepareStatement.setString(2, login.getPwd());rs = prepareStatement.executeQuery();if(rs.next()) {result = rs.getInt(1);}if(result  > 0) {//登陆成功return 1;}else {//登陆失败,用户名或密码有误return 0;}} catch (ClassNotFoundException e) {e.printStackTrace();//登陆失败,系统异常return -1;} catch (SQLException e) {e.printStackTrace();//登陆失败,系统异常return -1;} catch (Exception e) {e.printStackTrace();//登陆失败,系统异常return -1;}finally {try {if(rs != null) rs.close();if(prepareStatement != null)  prepareStatement.close();if(connection != null) connection.close();} catch (SQLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}	}
}

Login.java

/*** */
package org.zxm.entity;/*** @author 11441**/
public class Login {private int id;private String username;private String pwd;public Login(String username, String pwd) {this.username = username;this.pwd = pwd;}public Login() {}public Login(int id, String username, String pwd) {this.id = id;this.username = username;this.pwd = pwd;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}
}

总结:

MVC模式的优点:

  1. 按照M:Model V:View C:Controller进行分层,有利于代码的维护,提高了代码重用率,更好的实现开发中的分工
  2. 有益于后期代码的维护,降低了成本

MVC模式的缺点:

  1. 增加了复杂性
  2. 运行效率降低

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能的鱼与熊掌:精度与可解释性

来源&#xff1a;陈德旺科学网博客链接地址&#xff1a;http://blog.sciencenet.cn/blog-57940-1270913.html 人工智能自1956年诞生之日&#xff0c;就肩负用计算机程序模拟人类&#xff08;或生物体&#xff09;智能的初心与使命&#xff0c;从而理解智能的工作原理与运作机制…

MVC与三层架构的联系及三层架构实现学生注册功能

MVC与三层架构的联系及三层架构实现学生注册功能 三层架构的逻辑关系&#xff1a; MVC和三层架构的联系&#xff1a; 三层架构实现学生注册功能的逻辑&#xff1a; 学生注册页面&#xff1a; 输入学生信息&#xff1a; 完成学生注册: 代码实现&#xff1a; add.jsp <% …

MVC5+EF6 入门完整教程11--细说MVC中仓储模式的应用

MVC5EF6 入门完整教程11--细说MVC中仓储模式的应用 原文:MVC5EF6 入门完整教程11--细说MVC中仓储模式的应用摘要&#xff1a; 第一阶段1~10篇已经覆盖了MVC开发必要的基本知识。 第二阶段11&#xff5e;20篇将会侧重于专题的讲解&#xff0c;一篇文章解决一个实际问题。 根据…

Java Web实现信息管理

Java Web实现信息管理 前言&#xff1a; 大二上学期刚学完Oracle&#xff0c;老师就要求用Java语言操作Oracle&#xff0c;当时真的是懵了。回顾自己前两年的生活&#xff0c;大一上学期学习C语言&#xff0c;下学期学习Java&#xff0c;当时教课老师是学硬件的。课上讲一些理…

计算机科学界至今未解决的四大难题

作者&#xff1a;Shalitha Suranga译者&#xff1a;弯月 责编&#xff1a;张文出品&#xff1a;CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;在现实生活中&#xff0c;很多难题的解决方案都用到了计算机科学的基础理论。例如&#xff0c; Git 分布式版本控制系统建立…

按字编址与按字节编址

按字编址与按字节编址 要清楚按字编址和按字节编址的区别&#xff0c;先要知道 比特(bit)&#xff0c;字节(byte)&#xff0c;字(word) 之间的关系。 在计算机系统中&#xff0c;总线以固定大小的一块数据进行传输&#xff0c;这一块的数据也称为字(word)&#xff0c;如今的计…

2021年AI关键趋势,AI芯片初创公司可能发生并购

来源&#xff1a;雷锋网作者&#xff1a;包永刚编译&#xff1a;雷锋网人工智能&#xff08;AI&#xff09;和机器学习仍然是技术决策者、行业人士和投资者关注的重点。标普全球市场财智&#xff08;S&P Intelligence&#xff09;2020 7月发布的调查显示&#xff0c;有58%的…

CPU组成结构

CPU组成结构 CPU总体构图 CPU中央处理器&#xff08;Central Processing Unit&#xff09; CPU的结构框图&#xff1a;CPU内部由ALU&#xff08;算术逻辑单元&#xff09;、CU&#xff08;控制器&#xff09;、寄存器&#xff08;PC、IR、PSW、DR、通用寄存器等&#xff09;、…

每一个科学家的内心都住着一位哲学家(节选)

来源&#xff1a;腾讯大学&#xff08;ID: tencent_university)作者&#xff1a;张首晟&#xff08;斯坦福大学&#xff09;不少科学家的哲学造诣都很高。在哲学中&#xff0c;有着正负对立的世界观&#xff1a;有阴必有阳、有正必有负、有天使就会有魔鬼。这种哲学观念是如何在…

总结下载Spring Framework的jar包

总结下载Spring Framework的jar包 下载官网&#xff1a;Spring官网

ros2中gazebo安装的注意事项

Install From source&#xff08;推荐安装Fortress版本&#xff0c;好像很方便&#xff09; ROS Be sure youve installed ROS Humble (at least ROS-Base). More ROS dependencies will be installed below. Gazebo Install either Edifice, Fortress, or Garden.(没有har…

谷歌对2021年的六个预测:数据和云技术的革命即将到来

来源&#xff1a;AI前线作者&#xff1a;Debanjan Saha译者&#xff1a;平川策划&#xff1a;钰莹预测是充满挑战的&#xff0c;因为具体的预测取决于特定的时间框。但从云应用方面表现出的趋势来说&#xff0c;我们 2020 年看到的一些事情可能预示着 2021 年可能出现的变化。经…

Vue笔记:webpack项目vue启动流程

VUE启动流程 1. package.json 在执行npm run dev的时候&#xff0c;会在当前目录中寻找 package.json 文件, 有点类似 Maven 的 pom.xml 文件&#xff0c;包含项目的名称版本、项目依赖等相关信息。 { # 版本信息"name": "kitty-ui","version":…

哈工大等实现人工肌肉重大突破登上 Science!多国科学家联合实现全新驱动机理...

来源&#xff1a;雷锋网2021 年&#xff0c;机器人已经「成精」了&#xff0c;公然吵架、组团热舞再也不是人类专属。然鹅在很多人心里&#xff0c;机器人还是僵硬、机械甚至冰冷的。即便如此&#xff0c;技术日新月异&#xff0c;柔性机器人快速发展&#xff0c;我们对机器人的…

WOJ 18 动态无向图

一开始我是不会写的&#xff0c;后来点开了题解&#xff1a; 无话可说……那就写吧……然而第一发跑成暴力分&#xff0c;后来加了一个优化&#xff1a;就是在询问里面提到过的边都不用再加了。 然后……然后就过了呀…… 其实还有面向数据的编程的骚操作……既然卡过了那也没什…

AI如何帮助我们理解意识——麻省理工最新大脑研究

来源&#xff1a;ScienceAI编辑&#xff1a;文龙麻省理工学院和麻省总医院的一组研究人员最近发表了一项将社会意识与单个神经元活动联系起来的研究。据悉&#xff0c;这是首次在单神经元级别下找到「心智理论」的证据。测量大量的神经元是神经学的基础。即使是普通的核磁共振成…

计算机操作系统——处理机调度算法

计算机操作系统——处理机调度算法 一、处理机调度的层次和调度算法的目标 1.处理及调度的层次 高级调度&#xff1a;&#xff08;周期较长&#xff0c;大约几分钟一次&#xff09; 又称为长程调度或作业调度 调度对象&#xff1a;作业 功能&#xff1a;根据算法决定将外存中…

宇宙即计算~一种新科学:斯蒂芬·沃尔夫勒姆

编辑 &#xff1a;Gemini来源&#xff1a;人机与认知实验室斯蒂芬沃尔夫勒姆这个名字&#xff0c;在中文世界里可能远谈不上家喻户晓&#xff1b;但他的英文名Stephen Wolfram恐怕反而却要熟悉得多。他是Mathematica软件的发明者和首席设计师&#xff0c;被广泛地认为是当今科学…

maven安装与项目创建

maven安装与项目创建 Maven是一个软件项目管理和理解工具。基于项目对象模型的概念&#xff0c;Maven可以管理项目的根据一条中心信息构建、报告和记录。 文件 最新的文件可以在https://maven.apache.org/.找到 系统需求 JDK: 1.7或更高版本(这是为了执行Maven -它仍然允许…

windows 安装zip 压缩

* 到sourceforge上下载 zip-3.0-bin.zip https://sourceforge.net/projects/gnuwin32/files/zip/3.0/zip-3.0-bin.zip/download?use_mirrorjaist 或者http://pan.baidu.com 链接: https://pan.baidu.com/s/1HObxhQUdbsl8J-B-IeeRUg 密码: 9922 * 解压 * 把bin目录下面的exe文件…