浅谈MVC设计模式(示例)
时间:2022-07-25
本文章向大家介绍浅谈MVC设计模式(示例),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
目录
- 什么是MVC?
- MVC模式组成
- Model
- View
- Controller
- 示例
- M层
- DAO数据访问接口
- V层
- login.jsp
- login_success.jsp
- C层
- com.servlet.LoginServlet
- 小结
什么是MVC?
(官方定义出门右转) MVC(Model View Controller)模型-视图-控制器。典型的MVC就是javabean(M)+JSP(V) + servlet(C )的模式,是对DAO模式的进一步解耦合,姑且可以简单认为就是在DAO基础上多了一个servlet(充当控制器),其目的就是为了实现M和V的分离,便于前后并行开发。
MVC模式组成
- Model 模型表示数据处理和业务规则:封装应用程序状态,响应状态查询,包含应用程序相关功能,通知视图改变。
- View 视图是指用户看到并与之交互的界面:解释模型,模型更新请求,发送用户数据给控制器,允许控制器选择视图。
- Controller 控制器接收请求并决定调用哪个模型去处理请求,然后再确定用哪个视图来显示返回的数据:定义应用程序行为,将用户动作映射为模型更新,选择相应的视图。
示例
实现登录
M层
DAO数据访问接口
V层
login.jsp
<%@ page language="java" pageEncoding="gbk"%>
<!DOCTYPE HTML>
<html>
<head>
<meta content="text/html;charset=gbk">
<title>登陆页面</title>
</head>
<body>
<%
// 判断是否有错误信息,如果有则打印
// 如果没有此段代码,则显示时会直接打印null
if(request.getAttribute("err")!=null)
{
%>
<h2><%=request.getAttribute("err")%></h2>
<%
}
%>
<form action="Login" method="post">
用户ID:<input type="text" name="id"/><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="登陆 "/>
<input type="reset" value="重置 "/>
</form>
</body>
</html>
login_success.jsp
<%@ page language="java" contentType="text/html; charset=gbk"
pageEncoding="gbk"%>
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=gbk">
<title>登录成功</title>
</head>
<body>
<%
if(session.getAttribute("uname")!=null)
{
// 用户已登陆
%>
<h2>登陆成功 </h2>
<h2>欢迎 <font color="red" size="12">
<%=session.getAttribute("uname")%>
</font>光临</h2>
<%
}
else
{
// 用户未登陆,提示用户登陆,并跳转
response.setHeader("refresh","3;URL=login.jsp") ;
%>
您还未登陆,请先登陆!!!<br/>
三秒后跳转到登陆页面!!!<br/>
如果没有跳转,请点<a href="login.jsp">这里 </a>!<br/>
<%
}
%>
</body>
</html>
C层
com.servlet.LoginServlet
package com.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.factory.DAOFactory;
import com.vo.Person;
public class LoginServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String path = "login.jsp";
// 1、接收传递的参数
String id = request.getParameter("id");
String password = request.getParameter("password");
// 2、将请求的内容赋值给VO类
Person person = new Person();
person.setId(id);
person.setPassword(password);
try {
// 进行数据库验证
if (DAOFactory.getPersonDAOInstance().login(person)) {
// 如果为真,则表示用户ID和密码合法
// 设置用户姓名到session范围之中
request.getSession().setAttribute("uname", person.getName());
// 修改跳转路径
path = "login_success.jsp";
} else {
// 登陆失败
// 设置错误信息
request.setAttribute("err", "错误的用户ID及密码!!!");
}
} catch (Exception e) {
}
// 进行跳转
request.getRequestDispatcher(path).forward(request, response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
this.doPost(request, response);
}
}
小结
优点:MVC代码重用性高耦合性低,彻底把视图层和业务层分离,可以前后端并行开发。
原创不易,请勿转载(
本不富裕的访问量雪上加霜) 博主首页:https://blog.csdn.net/qq_45034708
- linux 系统监控、诊断工具之 lsof 用法简介
- 关于 SimpleDateFormat 的非线程安全问题及其解决方案
- 关于 WEB/HTTP 调试利器 Fiddler 的一些技巧分享
- Java线程使用技巧学习(一)
- Python FAQ(常见问题解答)(1)
- ElastAlert监控日志告警Web攻击行为
- Java线程使用技巧学习(二)
- 挖洞经验 | 看我如何发现“小火车托马斯”智能玩具APP聊天应用漏洞
- Hive 常见问题与技巧【Updating】
- Hive 基础(1):分区、桶、Sort Merge Bucket Join
- 简化你的 java 字符串操作:Guava 之 CharMatcher 用法简介
- WAF绕过技巧浅谈
- flask 流式响应 RuntimeError: working outside of request context
- shell 学习笔记(19)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法