JavaWeb学习-MVC基础开发系列-1-MVC简介开发环境准备

这篇来学习下MVC模型和分层思想,然后准备开发环境,后面我们来练习用户注册和登录的开发练习。

 

1 MVC模型

在软件开发行业,MVC几乎人人都知道这个模型,这里我们来看看JavaWeb开发中的MVC模型

JavaWeb MVC = JSP +Servlet + JavaBean

M: Model模型,主要就是javaBean|四种作用域
V:View 师徒,就是JSP页面
C:Controller 控制器, 就是只Servlet

分层思想

上面MVC模型中Servlet这层太大,为了方便开发和高内聚,低耦合,我们需要对servlet层分层。

 

2.开发环境准备

2.1数据库和表创建

我们先在本地安装一个mysql服务器,然后启动服务,用一个图形化界面工具(小海豚)去连接数据库,然后执行下面命令去创建一个数据库和创建一个users表。

//创建数据库,名称为j2ee
CREATE DATABASE j2ee;

//使用j2ee数据库,多个数据库情况下,需要先切换进入到该数据库,才能操作sql
USE j2ee;

//创建一个用户表
CREATE TABLE users(
	id INT PRIMARY KEY AUTO_INCREMENT,
	username VARCHAR(50) NOT NULL,
        password VARCHAR(50),
	email VARCHAR(200),
	birthday DATE
)

暂时就是一个空表,到这里数据库环境已经准备好了,接下来去Eclipse上创建项目和配置。

 

2.2 Eclipse web项目创建

我们在Eclipse上创建一个动态web项目。

然后接下来,我们提交准备一些jar包放在WEB-INF/lib目录下,至少我们知道需要用到mysql-connect-xx.jar包。一般来说,我们知道jar包文件名称,我们就可以去maven仓库下载:https://mvnrepository.com/

接下来创建包结构,分层思想

com.anthony.domain
com.anthony.dao
com.anthony.dao.impl
com.anthony.service
com.anthony.service.impl
com.anthony.utils
com.anthony.exception
com.anthony.web.servlet

基本上项目结构层次都提前创建好了,接下来就是添加代码。

2.3 编写实体类Bean类代码

一般来说Java中说的Bean类就写在domain包下,这个实体类对象会在每个层中用到。

在domain包下创建一个User.java类,代码如下。

package com.anthony.domain;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {
	
	private String username;
	private String password;
	private String email;
	private Date birthday;
	private int id;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	
}

注意上面写的private几个属性,应该和你数据库建表的字段保持一样,这个是规范,方便以后反射用到。上面建议添加实现序列化,如果后面session需要钝化,就需要这里实现序列化。

 

2.4 在dao包下写一个接口

在dao(Data Access Object)包下写一个处理用户的接口,例如添加用户,修改用户,删除用户。

package com.anthony.dao;

import com.anthony.domain.User;

public interface UserDao {
	
	/**
	 * 添加用户信息
	 * @param user
	 * @throws Exception
	 */
	public void addUser(User user) throws Exception;

}

注意上面是定义一个接口,具体实现类,我们在dao.impl包中写。

 

2.5 在dao.impl下写一个实现类

上面我们写了一个接口,并写了一个添加用户的方法,现在我们写一个具体实现这个接口的类。

package com.anthony.dao.impl;

import com.anthony.dao.UserDao;
import com.anthony.domain.User;

public class UserDaoImpl implements UserDao {
	
	public void addUser(User user) throws Exception {
		
	}

}

写道这里,我们少了DBUtil.java这个工具类去操作数据库,所以,我们接下来先写DBUtil.java类。

 

2.6 实现DBUtil.java类

这个类就封装sql操作,包括读取数据库的配置文件。

先写一个数据库配置文件,在src下新建一个dbinfo.properties文件,配置信息如下。

classDriver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/j2ee
user=root
password=123456

然后在utils包下新建一个DBUtils.java,代码如下

package com.anthony.utils;
 
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
 
public class DBUtils {
	private static String classDriver;
	private static String url;
	private static String user;
	private static String password;
	
	static {
		Properties pro = new Properties();
		InputStream in = DBUtils.class.getResourceAsStream("/dbinfo.properties");
		try {
			pro.load(in);
			classDriver = pro.getProperty("classDriver");
			url = pro.getProperty("url");
			user = pro.getProperty("user");
			password = pro.getProperty("password");
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			Class.forName(classDriver);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	//得到连接的方法
	public static Connection getConnection() throws Exception{
		return DriverManager.getConnection(url, user, password);
	}
	
	//关闭资源方法
	public static void close(Connection conn, Statement stmt, ResultSet rs) {
		if(rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			rs = null; //赶紧垃圾回收
		}
		if(stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			stmt = null;
		}
		if(conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			conn = null;
		}
	}
}

然后我们再次回到UserDaoImpl.java

package com.anthony.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.text.SimpleDateFormat;

import com.anthony.dao.UserDao;
import com.anthony.domain.User;
import com.anthony.utils.DBUtils;

public class UserDaoImpl implements UserDao {
	
	public void addUser(User user) throws Exception {
		Connection conn = null;
		PreparedStatement ps = null;
		
		try {
			conn = DBUtils.getConnection();
			ps = conn.prepareStatement("INSERT INTO users(username,password,email,birthday) VALUES(?,?,?,?)");
			ps.setString(1, user.getUsername());
			ps.setString(2, user.getPassword());
			ps.setString(3, user.getEmail());
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			String date = sdf.format(user.getBirthday());
			ps.setString(4, date);
			//执行sql语句,这里是注册,插入数据
			int i = ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBUtils.close(conn, ps, null);
		}
		
	}

}

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值