一、Java Web中的MVC
1、在Java Web开发中使用JDBC,应遵循MVC的设计思想,使Web程序拥有一定健壮性、可扩展性。
2、MVC(Model-View-Controller)是一种程序设计理念,该理念将软件分为3层结构,分别为模型层、视图层和控制层。
1)模型层泛指程序中的业务逻辑,用于处理真正的业务操作;
2)视图层指程序与用户相交互的界面,对用户呈现出视图,但不包含业务逻辑;
3)控制层是对用户各种请求的分发处理,将指定请求分配给指定业务逻辑进行处理。
图一 Java Web中的MVC
客户端通过JSP页面与程序进行交互,对于数据的增、删、改、查请求由Servlet对其进行分发处理,如Servlet接受到添加数据请求,就会分发给增加数据的JavaBean对象,而真正的数据库操作是通过JDBC封装的JavaBean进行实现。
二、举例
1、代码
1)视图层
index.jsp 用户登陆页面,登录信息提交到名为UserServlet的Servlet进行处理。
<%@ page language="java" pageEncoding="utf-8"%>
<html>
<head>
<title>index.jsp</title>
</head>
<body>
<form action="UserServlet" method="post">
用户名: <input type="text" name="user"> <br>
密码: <input type="password" name="pass"> <br>
<input type="submit" value="login">
</form>
</body>
</html>
weclome.jsp页面,登陆成功页面
<%@ page language="java" pageEncoding="utf-8"%>
<html>
<head>
<title> welcome.jsp </title>
</head>
<body>
<h1> 欢迎进入 寒leng的锋 网页 </h1>
</body>
</html>
2)模型层
创建类DatabaseConnection以获取Connection对象来操作数据库
package cn.jdbc;
import java.sql.*;
public class DatabaseConnection {
private static String url="jdbc:mysql://localhost:3306/test"; //Mysql数据库连接的URL,调用的数据库为test
private static String user="root"; //Mysql登陆用户名
private static String pass="123456"; //Mysql登陆密码
private Connection conn;
public DatabaseConnection() {
try {
Class.forName("com.mysql.jdbc.Driver"); //加载数据库驱动,注册到驱动管理器
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
this.conn = DriverManager.getConnection(url, user, pass); //通过驱动管理器获取数据库的连接Connection
} catch (SQLException e) {
e.printStackTrace();
}
}
public Connection getConnection() {
return this.conn;
}
}
创建JavaBean类Info用于创建用户名密码对象
package cn.jdbc;
public class Info {
private String user;
private String pass;
public Info(String user, String pass) {
super();
this.user = user;
this.pass = pass;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
}
创建类UserDao用于逻辑处理。
package cn.jdbc;
import java.sql.*;
public class UserDao {
private DatabaseConnection dbc;
private Connection conn;
public UserDao() {
dbc = new DatabaseConnection();
conn = dbc.getConnection(); //调用DatabaseConnection类的对象获取Connection对象
}
//判断用户名密码是否正确
public boolean userIsTrue(Info info) throws SQLException {
String user1 = info.getUser();
String pass1 = info.getPass();
String sql = "select * from info where user=? and pass=?"; //查询的sql语句
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, user1);
ps.setString(2, pass1);
ResultSet rs = ps.executeQuery();
while(rs.next()) {
return true;
}
return false;
}
}
3)控制层
接受登录页面提交的用户名密码信息又分发给JavaBean对象进行逻辑处理。
package cn.servlet;
import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.jdbc.*;
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public UserServlet() {
super();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String user1 = request.getParameter("user"); //接收用户名
String pass1 = request.getParameter("pass"); //接受密码
Info info = new Info(user1, pass1); //创建JavaBean类Info的对象
UserDao ud = new UserDao();
String path = "";
try {
//判断用户名密码是否正确
if(ud.userIsTrue(info)) {
path = "welcome.jsp"; //若正确跳入welcome.jsp页面
}
else {
path = "index.jsp"; 若错误跳入index.jsp页面
}
} catch (SQLException e) {
e.printStackTrace();
}
//跳转页面至path指定页面,此跳转方式为服务器跳转
request.getRequestDispatcher(path).forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
图二 数据库test中的表info信息
图三 登陆页面
图四 登陆成功后的页面