社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
目录结构如下图:
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(只显示是否登录成功,略)
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!