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 <% …

【剑指offer】面试题23:链表中环的入口节点

一个链表中包含环&#xff0c;请找出该链表的环的入口结点 代码&#xff1a; package offer; class Node3 { int val; Node3 next null; Node3(int val) { this.val val; } } public class ti23 { public static Node3 FindInterNode(Node…

(4.14)向上取整、向下取整、四舍五入取整的实例

Sql Server 里的向上取整、向下取整、四舍五入取整的实例&#xff01; 2012年12月31日 07:33:43 阅读数&#xff1a;102170 【四舍五入取整截取】select round(54.56,0) 【向下取整截取】 SELECT FLOOR(54.56) 【向上取整截取】 SELECT CEILING(13.15)以下转自&#xff1a;…

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;当时教课老师是学硬件的。课上讲一些理…

【剑指offer】面试题25:合并两个排序的链表(Java 实现)

题目&#xff1a;输入两个递增排序的链表&#xff0c;合并这两个链表并使新链表中的结点仍然是按照递增排序的。 代码&#xff1a; package offer; class Node5 { int val; Node5 next null; Node5(int val) { this.val val; } } public class…

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

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

PHP正则匹配到2个字符串之间的内容,匹配HTML便签内容

PHP正则匹配到2个字符串之间的内容 $preg /xue[\s\S]*?om/i; preg_match_all($preg,"学并思网址xuebingsi.com",$res); var_dump($res[0][0]); 匹配HTML便签内容 假如需要匹配下面HTML字符串里面的第三个<img> 把它替换掉,或者删除掉这样个需求 $string <p…

【剑指offer】面试题24:反转链表(Java 实现)

输入一个链表&#xff0c;反转链表后&#xff0c;输出新链表的表头。 代码&#xff1a; package offer; class Node4 { int val; Node4 next null; Node4(int val) { this.val val; } } public class ti24 { public static Node4 ReverseL…

按字编址与按字节编址

按字编址与按字节编址 要清楚按字编址和按字节编址的区别&#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%的…

English trip -- VC(情景课)5 Around Town

Around Town 城市周围 Talk about the picture 看图说话 sentences Where are you&#xff1f; Im in the Meten classroom. What do you do? I study English at the school. I eat dinner at the restaurant I go shopping at the supermarket Do you study English at th…

CPU组成结构

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

【剑指offer】面试题26: 树的子结构(Java)

输入两棵二叉树A&#xff0c;B&#xff0c;判断B是不是A的子结构。&#xff08;ps&#xff1a;我们约定空树不是任意一个树的子结构&#xff09; 代码&#xff1a; package offer; class TreeNode { int val; TreeNode left null; TreeNode right null; Tr…

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

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

win10安装RabbitMQ

安装Erlang 去官网下载Erlang的最新版本&#xff1a;https://www.erlang.org/downloads 我这里下载的是OTP 21.0.1 Windows 64-bit Binary File。 下载下来点击一步步进行安装&#xff0c;我的安装位置是D:\Program Files\erl10.0.1 安装好之后&#xff0c; 添加环境变量ERLANG…

总结下载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 年可能出现的变化。经…