Servlet—实现简单的用户登录等功能
不同功能业务放在不同层下,实现功能业务和代码逻辑分开
1、entity层(创建表对应的实体类)
public class User { //自己根据表属性创建需要的成员变量
private int user_id;
private String user_name;
private String password;
... //这里省略getters,setters方法
}
dao层(规定业务有哪些功能)
1、接口
package dao;
import entity.User;
public interface UserDao {
//注册
boolean createUser(String username,String password);
//登录
boolean login(String username,String password);
//查询用户名是否存在
boolean queryUserByName(String username);
//登录方法
boolean queryUserNamePwd(String username,String password);
//修改密码
boolean changePwd(String username,String oldPassword,String newPassword);
//删除用户
boolean deleteUser(String username,String password);
}
2、实现类
package dao.impl;
import dao.UserDao;
import entity.User;
import java.sql.SQLException;
public class UserDaoImpl extends BaseDaoImpl implements UserDao {
private final String DRIVER = "com.mysql.jdbc.Driver";
private final String URL = "jdbc:mysql://192.168.XXX.XXX:3306/bank"; //注意这里改成你的
private final String USERNAME = "root";
private final String PASSWORD = "root";
@Override
public boolean createUser(String username,String password) {
getConn(DRIVER,URL,USERNAME,PASSWORD);
String sql = "insert into user (user_name,password)values(?,?)";
return update(sql,username,password);
}
@Override
public boolean login(String username, String password) {
return false;
}
@Override
public boolean queryUserByName(String username) {
String sql = "select * from user where user_name=?";
getConn(DRIVER,URL,USERNAME,PASSWORD);
query(sql,username);
try {
if(getRs().next()){
return true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
@Override
public boolean queryUserNamePwd(String username, String password) {
String sql = "select user_name,password from user where user_name=? and password=? limit 1";
getConn(DRIVER,URL,USERNAME,PASSWORD);
query(sql,username,password);
try {
if(getRs().next()){
return true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
@Override
public ArrayList<User> queryAll() {
return null;
}
@Override
public boolean changePwd(String username, String oldPassword,String newPassword) {
getConn(DRIVER,URL,USERNAME,PASSWORD);
String sql1 = "select * from user where user_name=? and password = ?";
query(sql1,username,oldPassword);
try {
if(getRs().next()){
String sql2 = "update user set password = ? where user_name = ?";
update(sql2,newPassword,username);
return true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
@Override
public boolean deleteUser(String username, String password) {
getConn(DRIVER,URL,USERNAME,PASSWORD);
String sql = "delete from user where user_name = ? and password = ? limit 1";
return update(sql,username,password);
}
}
service层(实现业务代码功能)
1、接口
package service;
import entity.User;
public interface UserService {
boolean register(String username, String password,String cfmPwd);
boolean login(String username, String password);
boolean modify(String username, String oldPassword,String newPassword);
boolean delete(String username, String password);
}
2、实现类
package service.Impl;
import dao.UserDao;
import dao.impl.UserDaoImpl;
import entity.User;
import service.UserService;
/**
* @Author shall潇
* @Date 2021/3/9
* @Description 业务代码放在 service层
*/
public class UserServiceImpl implements UserService {
UserDao dao = new UserDaoImpl();
@Override
public boolean register(String username, String password, String cfmPwd) { //注册
if(null==username || null==password)
return false;
boolean exists = dao.queryUserByName(username);
if(exists) //如果用户名已存在,不允许创建
return false;
if(!password.equals(cfmPwd))
return false;
if("马化腾".equals(username)) //实际这里应该是白名单
return false;
return dao.createUser(username,password);
}
@Override
public boolean login(String username, String password) { //登录
if(null==username || null==password)
return false;
return dao.queryUserNamePwd(username,password);
}
@Override
public boolean modify(String username, String oldPassword,String newPassword) { //修改密码
if(null==username || null==oldPassword |null == newPassword)
return false;
return dao.changePwd(username,oldPassword,newPassword);
}
@Override
public boolean delete(String username, String password) { //注销
if(null==username || null==password)
return false;
return dao.deleteUser(username,password);
}
}
Servlet层(前后台传递数据)
package servlet;
import service.Impl.UserServiceImpl;
import service.UserService;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Author shall潇
* @Date 2021/3/9
* @Description
*/
public class UserServlet extends HttpServlet {
UserService service = new UserServiceImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
if("create".equals(req.getParameter("type"))){
create(req,resp);
}else if("login".equals(req.getParameter("type"))){
login(req,resp);
}else if("updatepwd".equals(req.getParameter("type"))){
update(req,resp);
}else if("delete".equals(req.getParameter("type"))){
delete(req,resp);
}
}
void create(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
String user = req.getParameter("user");
String pwd = req.getParameter("pwd");
String cfmPwd = req.getParameter("cfmPwd");
boolean isSuccess = service.register(user, pwd, cfmPwd);
if(isSuccess){ //注册成功跳转到登录页面
req.getRequestDispatcher("/login/home.jsp").forward(req,resp);
}else {
//req.getRequestDispatcher("/login/createUser.jsp").forward(req,resp);
resp.sendRedirect("/login/createUser.jsp");
}
}
void login(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
String user = req.getParameter("user");
String pwd = req.getParameter("pwd");
boolean isSuccess = service.login(user, pwd);
if(isSuccess){ //登录成功跳转
resp.sendRedirect("/login/Login.jsp");
}else {
req.getRequestDispatcher("/login/home.jsp").forward(req,resp);
}
}
void update(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
String user = req.getParameter("username");
String oldpwd = req.getParameter("oldpassword");
String newpwd = req.getParameter("newpassword");
boolean isSuccess = service.modify(user,oldpwd,newpwd);
if(isSuccess){
resp.sendRedirect("/login/home.jsp");
}else {
req.getRequestDispatcher("/login/updatepwd.jsp").forward(req,resp);
}
}
void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String user = req.getParameter("user");
String pwd = req.getParameter("pwd");
boolean isSuccess = service.delete(user,pwd);
if(isSuccess){
req.getRequestDispatcher("login/createUser.jsp").forward(req,resp);
}else {
resp.sendRedirect("/login/delete.jsp");
}
}
}
前台各个界面
注册界面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册页面</title>
<style>
#warp{text-align:center}
</style>
</head>
<body background="wallhaven-zxqwmg.jpg">
<div id="warp">
<form action="/doCreate" >
<h1>欢迎来到注册界面</h1>
<hr/>
<p><input type="text" name="type" value="create" hidden></p>
<p>用户名<input type="text" name="user"></p>
<p>密    码<input type="password" name="pwd"></p>
<p>确认密码<input type="password" name="cfmPwd"></p>
<p><input type="submit" value="注册"></p>
</form>
</div>>
</body>
</html>
登录页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录首页</title>
<style>
#warp{text-align:center}
</style>
</head>
<body background="wallhaven-zxqwmg.jpg">
<div id="warp">
<form action="/Login">
<h1>欢迎来到登录页面</h1>
<p><input type="text" name="type" value="login" hidden></p>
<p>用户名<input type="text" name="user"></p>
<p>密    码<input type="password" name="pwd"></p>
<p><input type="submit"></p>
</form>
</div>
</body>
</html>
登录成功界面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录成功页面</title>
<style>
#warp{text-align:center}
</style>
</head>
<body background="wallhaven-zxqwmg.jpg">
<h1>欢迎登录!!!</h1>
<div id="warp">
<a href="updatepwd.jsp" >修改密码</a>
<a href="delete.jsp" >注销</a>
<%--<a href="updatepwd.jsp" >查询所有用户</a>--%>
</div>
</body>
</html>
修改密码界面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>修改密码</title>
<style>
#warp{text-align:center}
</style>
</head>
<body>
<div id="warp">
<form action="/Login">
<h1>修改密码页面</h1>
<p><input type="text" name="type" value="updatepwd" hidden></p>
<p>用户名<input type="text" name="username"></p>
<p>原密码<input type="text" name="oldpassword"></p>
<p>新密码<input type="password" name="newpassword"></p>
<p><input type="submit"></p>
</form>
</div>
</body>
</html>
注销界面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注销页面</title>
<style>
#warp{text-align:center}
</style>
</head>
<body>
<div id="warp">
<form action="/doCreate">
<h1>用户注销页面</h1>
<p><input type="text" name="type" value="delete" hidden></p>
<p>用户名<input type="text" name="user"></p>
<p>密    码<input type="password" name="pwd"></p>
<p><input type="submit"></p>
</form>
</div>
</body>
</html>
【注意:还包括之前文章写的BaseDao接口和BaseImpl实现类和db.properties文件等,在这里就不一一写出了,想要看可以翻看之前的博客,或者直接下载这个工程(已经上传)】