一、Java Web中的MVC

1、在Java  Web开发中使用JDBC,应遵循MVC的设计思想,使Web程序拥有一定健壮性、可扩展性。

2、MVC(Model-View-Controller)是一种程序设计理念,该理念将软件分为3层结构,分别为模型层、视图层和控制层。

1)模型层泛指程序中的业务逻辑,用于处理真正的业务操作;

2)视图层指程序与用户相交互的界面,对用户呈现出视图,但不包含业务逻辑;

3)控制层是对用户各种请求的分发处理,将指定请求分配给指定业务逻辑进行处理。

java中的mvc是哪三层 java mvc_java中的mvc是哪三层

图一  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);
	}
}


2、截图

java中的mvc是哪三层 java mvc_java中的mvc是哪三层_02

图二  数据库test中的表info信息


java中的mvc是哪三层 java mvc_bc_03

图三 登陆页面


java中的mvc是哪三层 java mvc_java_04

图四 登陆成功后的页面