JSP+Servlet+Javabean+数据库(JDBC)实现MVC模式下的登录注册

目录结构如下图:
M:模型层,bean下的所有实体类(User)。
V:视图层,jsp页面(图略)。
C:控制层,controller,主要是一些servlet。
其中控制层中,调用service层的业务方法,而业务方法中具体的数据操作则是靠调用dao层的数据库操作方法实现。
狭义理解:服务层和数据访问层在大的范围上,属于C:控制层的范畴,但有区别。
【注意事项】本例连接的是oracle数据库,需要在项目的bin文件夹下中添加odbc.jar包,并buildPath.(添加至项目,默认是到了根目录下,在服务器上运行,可能报空指针异常,可以在tomcat安装的bin目录下添加驱动包)

JSP+Servlet+Javabean+数据库(JDBC)实现MVC模式下的登录注册_第1张图片

bean

package bean;
public class User {
private String username;
private String password;
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 User() {
	super();
}
public User(String username, String password) {
	super();
	this.username = username;
	this.password = password;
}
}

controller层
LoginServlet
核心doget()方法

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//request获取前台页面的输入信息
	String username = request.getParameter("username");
	String pass = request.getParameter("password");
	//创建一个User实例,接受前台获取的数据为参数
	User user = new User(username,pass);
	//创建服务对象,调用登录方法
	IUserService userService = new UserServiceImpl();
	//将User实例作为userService的login方法的参数,判断该user实例是否存在数据库中。(返回值)
	if(userService.login(user)!=null) {
		//重定向至成功页面
		response.sendRedirect("success.jsp");
	}else {
		//重定向至失败页面
		response.sendRedirect("fail.jsp");
	}
}

RegisterServlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//获取前台页面输入的数据
	String username = request.getParameter("username");
	String pass = request.getParameter("password");
	String message="";//提示信息
	User user = new User(username,pass);//实例化注册对象,并传入参数
	IUserService userService = new UserServiceImpl();
	HttpSession session=request.getSession();//创建一个session会话,获取当前会话
	//判断注册方法是否返回结果是否为true
	if(userService.registerUser(user)) {
		message = "注册成功!";
		session.setAttribute("message", message);//设置提示信息内容
		response.sendRedirect("message.jsp");//重定向至信息提示页面
	}else {
		message = "注册失败,请重新注册!";
		session.setAttribute("message", message);
		response.sendRedirect("message.jsp");
	}
}

dao层
IUserDao 接口

package dao;
import bean.User;
public interface IUserDao {
	//登录
	User find(User user);
	//注册
	boolean registerUser(User user);
}

UserDaoImpl

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import bean.User;
import utils.DB_Connection;
public class UserDaoImpl implements IUserDao{
		//初始化预编译对象,结果集,数据库连接
		PreparedStatement pstm = null;
		ResultSet rs = null;
		Connection conn = null;
		//工具包中的数据库连接方法
		DB_Connection db = new DB_Connection();
	@Override
	//登录
	public User find(User user) {
		//获取连接
		conn = db.getConnection();
		String sql = "select * from users where username=? and password=?";
	try {
		//	预编译sql
		pstm = conn.prepareStatement(sql);
		//赋值占位符
		pstm.setString(1, user.getUsername());
		pstm.setString(2, user.getPassword());
		//更新结果集
		rs = pstm.executeQuery();
		while(rs.next()) {
			//查到该对象,则直接返回对象,否则是null
			return user;
		}
	} catch (SQLException e) {
		e.printStackTrace();
	}finally {
		//释放资源
		release();
	}
	
	return null;
}

	@Override
	//注册
	public boolean registerUser(User user) {
		//获取连接
		conn = db.getConnection();
		String sql = "insert into users(username,password) values(?,?)";
	try {
		//	预编译sql
		pstm = conn.prepareStatement(sql);
		//赋值占位符
		pstm.setString(1, user.getUsername());
		pstm.setString(2, user.getPassword());
		//更新数据库
		pstm.executeUpdate();
		//注册完毕,返回true
		return true;
	} catch (SQLException e) {
		e.printStackTrace();
	}
	
	return false;
}
	//先后释放结果集,预编译,数据库连接资源
	public void release() {
	if(rs!=null) {
		try {
			rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	if(pstm!=null) {
		try {
			pstm.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	if(conn!=null) {
		try {
			conn.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
}

service服务层
IUserService

package service;
import bean.User;
public interface IUserService {
//登录
User login(User user);
//注册
boolean registerUser(User user);
}

UserServiceImpl

package service;
import bean.User;
import dao.IUserDao;
import dao.UserDaoImpl;
public class UserServiceImpl implements IUserService{
IUserDao userDao = new UserDaoImpl();
@Override
public User login(User user) {
	
	return userDao.find(user);
}
@Override
public boolean registerUser(User user) {
	
	return userDao.registerUser(user);
}
}

utils包
数据库连接工具类

package utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DB_Connection {
private static String DRIVER = "oracle.jdbc.OracleDriver";//驱动文件
private static String URL = "jdbc:oracle:thin:@localhost:1521:orcl";//数据库本地访问地址
private static String USER = "888";//数据库账号
private static String PASS = "888";//数据库密码
Connection connection = null;//声明数据库连接对象,并初始化
public Connection getConnection() {
	try {
		//加载驱动
		Class.forName(DRIVER);
		//获取数据库连接
		connection = DriverManager.getConnection(URL, USER, PASS);
	} catch (ClassNotFoundException | SQLException e) {
		e.printStackTrace();
	}
	return connection;
	
}
}

视图层View
login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>




登录页面



登录界面





register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>




Insert title here


注册界面





message.jsp
显示注册信息提示弹框

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>




Insert title here


			<% 
				Object msg = session.getAttribute("message");//创建信息对象,并获取当前session会话的message属性
			   		if(msg!="" && msg!=null){ 			//判断信息对象是否为空
			%>
				
			<%		
			   			}	
			%>


success.jsp/fail.jsp(只显示是否登录成功,略)

你可能感兴趣的:(oracle,java,jsp)