MVC模式(跟着敲小白也能看得懂的案例)
程序员文章站
2022-04-19 17:37:37
...
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>
上一篇: Sqoop Export HDFS
推荐阅读