JSP+Servlet+Javabean+数据库(JDBC)实现MVC模式下的登录注册 - Go语言中文社区

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


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

在这里插入图片描述

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"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
<style>
	*{margin:0px;padding:0px;}
	#main{margin:100px auto;text-align:center;width:80%;height:auto;background-color:aqua;}
	.form{margin:0 auto;width:80%;heigth:auto;background-color:blue;padding-top:30px;padding-bottom:30px;}
	#username,#password{width:300px;height:20px;margin-bottom:10px;}
	.go{margin-left:32px;width:300px;margin-top:10px;padding-top:5px;padding-bottom:5px;}
</style>
</head>
<body>
<div id="main">
	<div class="form">
		<form action="LoginServlet" method="post" id="login_form">
			<h1>登录界面</h1><br/>
			<label>账号</label>
			<input type="text" name="username" id="username"/><br/>
			<label>密码</label>
			<input type="text" name="password" id="password"/><br/>
			<input class="go" type="submit" value="登   录"/><br/>
			<input class="go" type="button" value="注   册" onclick="window.location.href='register.jsp'"/>
		</form>
	</div>
</div>
</body>
</html>

register.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>
<form action="RegisterServlet" method="post">
		<h1>注册界面</h1><br/>
			<label>账号</label>
			<input type="text" name="username" id="username"/><br/>
			<label>密码</label>
			<input type="text" name="password" id="password"/><br/>
			<input class="go" type="submit" value="提  交"/><br/>
			 
</form>
</body>
</html>

message.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>
			<% 
				Object msg = session.getAttribute("message");//创建信息对象,并获取当前session会话的message属性
			   		if(msg!="" && msg!=null){ 			//判断信息对象是否为空
			%>
				<script>
					alert("<%=msg%>");
					window.location.href="login.jsp";//确定后,跳转到登录页面
				</script>
			<%		
			   			}	
			%>
</body>
</html>

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

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/WhenTheWindBlows/article/details/87273144
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-28 01:53:21
  • 阅读 ( 787 )
  • 分类:前端

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢