浅谈MVC设计模式(示例)

295 阅读2分钟

目录

什么是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代码重用性高耦合性低,彻底把视图层和业务层分离,可以前后端并行开发。

原创不易,请勿转载本不富裕的访问量雪上加霜
博主首页:blog.csdn.net/qq_45034708
如果文章对你有帮助,记得关注点赞收藏❤