欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-19 17:37:37
...

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

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

下面我将通过一个超级简单的案例对 MVC 进行讲解:本案例实现了用户的登录功能。输入用户名和验证码,通过查询数据库判断是否正确,对用户进行提示。
本例中用到 Sql Server 数据库
MVC模式(跟着敲小白也能看得懂的案例)
在大家自己跟着案例写代码的时候,最好是写完 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>

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

相关标签: 网页设计