MVC模式(跟着敲小白也能看懂的MVC案例)

MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使 MVC 设计模式被分成三个核心层:视图层、控制层、模型层。它们各自处理自己的任务,各层的任务如下:

  • 视图层(View):此层主要是负责接收 Servlet传递的内容,并且调用JavaBean,将内容显示给用户。
    使用:HTML,CSS,JS,JSP 等实现
  • 控制层(Controller):此层由 Servlet 实现,负责所有的用户请求参数,判断请求参数是否合法,根据请求的类型调用 JavaBean 执行操作并将最终的处理结果交由显示层进行显示。
  • 模型层(Model):某个功能。完成一个个独立的业务操作组件,一般都是以 JavaBean 的形式进行定义的。
  • 在这里插入图片描述
    JavaBean 的目的是为了将可以重复使用的代码进行打包。

下面我将通过一个超级简单的案例对 MVC 进行讲解:本案例实现了用户的登录功能。输入用户名和验证码,通过查询数据库判断是否正确,对用户进行提示。
本例中用到 Sql Server 数据库
在这里插入图片描述
在大家自己跟着案例写代码的时候,最好是写完 login.jsp 之后先写 Login.java ,然后写 LoginDao.java,最后再写 LoginServlet.java,这样更容易理解本案例。

login.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>

	<form action="LoginServlet" method="post">
		用户名:<input type="text" name="uname"><br>
		密码:<input type="password" name="upwd"><br>
			<input type="submit" value="登录">
	</form>
	
</body>
</html>

填写用户名和密码,提交表单到 Servlet(控制层)。

LoginServlet.java:

package org.lanqiao.servlet;

// Con层 接收view请求 分发给model处理
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.lanqiao.dao.LoginDao;
import org.lanqiao.entity.Login;

public class LoginServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String uname = request.getParameter("uname");
		String upwd = request.getParameter("upwd");
		Login loin = new Login(uname, upwd);	//放用户信息JavaBean
		
		// 调用model层的登录功能 在con进行页面分发
		int result = LoginDao.login(loin);
		if(result == 1) {
			// 登录成功
			response.sendRedirect("welcome.jsp");
		} else {
			// 登陆失败 重新登录
			response.sendRedirect("login.jsp");
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

控制层基层了HttpServlet,重写了doGet()和doPost()方法,这里先调用Login JavaBean,构造了用户信息;然后调用 LoginDao.login(loin),将用户信息的JavaBean传到 LoginDao,通过返回值进行新的页面分发。

LoginDao.java:

package org.lanqiao.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.lanqiao.entity.Login;

//model层 用于处理登录(查询数据)
public class LoginDao {
	
	public static int login(Login login) {
		int flag = -1;	// -1 代表系统异常 0代表密码有错 1登录成功
		int result = -1;
		Connection connection = null;
		PreparedStatement pst = null;
		ResultSet rs = null;
		try {
			Class.forName("org.gjt.mm.mysql.Driver");
			connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/login", "root", "root");
			String sql = "select count(*) from login where uname = ? and upwd = ?";
			pst = connection.prepareStatement(sql);
			pst.setString(1, login.getUname());
			pst.setString(2, login.getUpwd());
			rs = pst.executeQuery();
			if(rs.next()) {
				result = rs.getInt(1);
			} if(result > 0) {
				flag = 1;
			} else {
				flag = 0;	// 用户名或密码有错误
			}
		} catch (ClassNotFoundException e) {	
			e.printStackTrace();
			flag = -1;	// 系统异常
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
				try {
					if(rs != null) rs.close();
					if(pst != null) pst.close();
					if(connection != null) connection.close();
				} catch (SQLException e) {
					e.printStackTrace();
				} catch(Exception e) {
					e.printStackTrace();
				}
		}
		return flag;
	}
}

其实就是千篇一律的工作,建立驱动连接数据库,通过获得的用户信息进行查询,判断是否存在这个用户,返回一个 int 型值。

Login.java:

package org.lanqiao.entity;

public class Login {
	private int id;
	private String uname;
	private String upwd;
	public Login() {
		super();
	}
	public Login(String uname, String upwd) {
		super();
		this.uname = uname;
		this.upwd = upwd;
	}
	public Login(int id, String uname, String upwd) {
		super();
		this.id = id;
		this.uname = uname;
		this.upwd = upwd;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getUpwd() {
		return upwd;
	}
	public void setUpwd(String upwd) {
		this.upwd = upwd;
	}
	
}

这个是用户信息的 JavaBean,在上边两个文件里都有使用,如其中的Login方法,进行对 JavaBean 的构造。

welcome.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	登录成功!
</body>
</html>

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值