java web 注册保护_简易的JavaWeb登录注册功能

文件目录结构

e1dd8658c6e8170cbcc96512f910c796.png

在需要创建子文件夹的文件夹上面右键,选择New,平移过去,选择Directory

02084ec017198122f384e0302eb1a4c9.png

项目准备工作:

导包,数据库驱动,剩下两个包可以在tomcat安装目录,apache-tomcat-8.5.54\webapps\examples\WEB-INF\lib

数据库语句,建库,建表,插入测试数据

CREATE DATABASE USER

CREATE TABLE tbl_emp(

id INT(11) PRIMARY KEY AUTO_INCREMENT,

username VARCHAR(255) NOT NULL,

PASSWORD VARCHAR(255) NOT NULL,

email VARCHAR(255) NOT NULL

)

INSERT INTO tbl_emp(username,PASSWORD,email) VALUES('aaa','111','aaaa'),

('sss','222','dddd'),('ddd','222','dddd'),('fff','222','ffff'),('ggg','222','gggg')

web.xml 配置servlet

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"

version="4.0">

UserServlet

com.yuanwu.servlet.UserServlet

UserServlet

/action

1、User.java【JavaBean】

package com.yuanwu.bean;

/**

* @Author YuanWu

* @ClassName User

* @Date 2020/10/24

**/

public class User {

private int id;

private String username;

private String password;

private String email;

public User() {

}

public User(int id, String username, String password, String email) {

this.id = id;

this.username = username;

this.password = password;

this.email = email;

}

@Override

public String toString() {

return "User{" +

"id=" + id +

", username='" + username + '\'' +

", password='" + password + '\'' +

", email='" + email + '\'' +

'}';

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = 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;

}

}

2、UserDao.java

【dao层以及dao层实现类】是和数据库直接打交道的,sql语句,预编译等等

package com.yuanwu.dao;

import com.yuanwu.bean.User;

import java.util.List;

public interface UserDao {

//查询所有

public List getAddSave();

//登录,

public User getByIdAndUserName(String email,String userName);

//注册

public boolean insertAll(User user);

//先把要修改的id,查询出来

public User updateBySave(User user);

//根据id修改

public User updateByIdSave(Integer id);

//删除

public boolean delByIdSave(Integer id);

}

2、1,UserDaoImpl.java

【实现接口】

package com.yuanwu.dao.Impl;

import com.yuanwu.bean.User;

import com.yuanwu.dao.UserDao;

import com.yuanwu.util.DBUtil;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

/**

* @Author YuanWu

* @ClassName UserDaoImpl

* @Date 2020/10/24

**/

public class UserDaoImpl implements UserDao {

List userList = new ArrayList<>();

@Override

public List getAddSave() {

Connection conn = DBUtil.getConn();

String sql = "select Id,username,password,email from tbl_emp";

try {

PreparedStatement pstm = conn.prepareStatement(sql);

ResultSet rs = pstm.executeQuery();

while (rs.next()){

User user = new User();

user.setId(rs.getInt("id"));

user.setUsername(rs.getString("username"));

user.setPassword(rs.getString("password"));

user.setEmail(rs.getString("email"));

userList.add(user);

}

return userList;

} catch (Exception e) {

e.printStackTrace();

}finally {

DBUtil.getClose();

}

return null;

}

@Override

public User getByIdAndUserName(String email, String userName) {

String sql = "select * from tbl_emp where email=? and username=?";

User user = null;

try {

Connection conn = DBUtil.getConn();

PreparedStatement pstm = conn.prepareStatement(sql);

pstm.setString(1,email);

pstm.setString(2,userName);

ResultSet rs = pstm.executeQuery();

while (rs.next()){

user = new User();

user.setId(rs.getInt("Id"));

user.setPassword(rs.getString("password"));

user.setEmail(rs.getString("email"));

user.setUsername(rs.getString("userName"));

}

} catch (Exception e) {

e.printStackTrace();

} finally {

DBUtil.getClose();

}

return user;

}

@Override

public boolean insertAll(User user) {

boolean flag = false;

String sql = "insert into tbl_emp(username,password,email) values(?,?,?)";

Connection conn = DBUtil.getConn();

try {

PreparedStatement pstm = conn.prepareStatement(sql);

pstm.setString(1, user.getUsername());

pstm.setString(2, user.getPassword());

pstm.setString(3, user.getEmail());

if (pstm.executeUpdate() >1){

flag = true;

}

} catch (Exception e) {

e.printStackTrace();

} finally {

DBUtil.getClose();

}

return flag;

}

@Override

public User updateBySave(User user) {

String sql = "UPDATE tbl_emp SET username=?,PASSWORD=?,email=? WHERE Id=?";

Connection conn = DBUtil.getConn();

try {

PreparedStatement pstm = conn.prepareStatement(sql);

pstm.setString(1, user.getUsername());

pstm.setString(2,user.getPassword());

pstm.setString(3, user.getEmail());

pstm.setInt(4, user.getId());

pstm.executeUpdate();

System.out.println("成功");

} catch (Exception e) {

e.printStackTrace();

}finally {

DBUtil.getClose();

}

return user;

}

@Override

public User updateByIdSave(Integer id) {

String sql = "select * from tbl_emp where Id=?";

Connection conn = DBUtil.getConn();

User user = null;

try {

PreparedStatement pstm = conn.prepareStatement(sql);

pstm.setInt(1,id);

ResultSet rs = pstm.executeQuery();

while (rs.next()){

user = new User();

user.setId(rs.getInt("ID"));

user.setUsername(rs.getString("username"));

user.setPassword(rs.getString("password"));

user.setEmail(rs.getString("email"));

}

} catch (Exception e) {

e.printStackTrace();

}finally {

DBUtil.getClose();

}

return user;

}

@Override

public boolean delByIdSave(Integer id) {

String sql = "delete from tbl_emp where Id=?";

int row = 0;

boolean flag = false;

Connection conn = DBUtil.getConn();

try {

PreparedStatement pstm = conn.prepareStatement(sql);

pstm.setInt(1, id);

row = pstm.executeUpdate();

if (row > 0){

flag = true;

}

} catch (SQLException e) {

e.printStackTrace();

}finally {

DBUtil.getClose();

}

return flag;

}

}

servlet

【相当于控制层controller】用户通过selvlet增删改查数据库,

BaseServlet.java

通过反射来减少if else的重复代码,

不过最好是所有的方法都用public修饰,可能会出现反射不到方法,出现异常

解决代码冗余,工具类

package com.yuanwu.servlet;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.lang.reflect.Method;

/**

* @Author YuanWu

* @ClassName BaseServlet

* @Date 2020/10/24

**/

public class BaseServlet extends HttpServlet {

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

String action = req.getParameter("action");

System.out.println(action);

try {

Method method = this.getClass().getDeclaredMethod(action,HttpServletRequest.class,HttpServletResponse.class);

method.invoke(this,req,resp);

} catch (Exception e) {

e.printStackTrace();

}

}

}

UserServlet.java

这里有点问题,请求转发不能填写jsp文件名,只能填写请求方法action?action=querySave,不然的话查询所有的页面查询不到,有点问题,暂时没想到解决办法。可能学习的知识不够全面,学漏了;

package com.yuanwu.servlet;

import com.yuanwu.bean.User;

import com.yuanwu.dao.Impl.UserDaoImpl;

import com.yuanwu.dao.UserDao;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.util.List;

/**

* @Author YuanWu

* @ClassName UserServlet

* @Date 2020/10/24

**/

public class UserServlet extends BaseServlet{

//全部查询

protected void querySave(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

UserDao userDao = new UserDaoImpl();

List list = userDao.getAddSave();

req.setAttribute("list",list);

req.getRequestDispatcher("/list.jsp").forward(req,resp);

}

//登录

protected void loginSave(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

String email = req.getParameter("email");

String name = req.getParameter("username");

UserDao userDao = new UserDaoImpl();

User u = userDao.getByIdAndUserName(email,name);

if (u != null){

req.getSession().setAttribute("user",u);

req.getRequestDispatcher("/action?action=querySave").forward(req,resp);

// resp.sendRedirect("/action?action=querySave");

}else{

// req.getP

req.getSession().setAttribute("msg", "账号或者密码错误,请重新登录");

resp.sendRedirect("/login.jsp");

}

}

//注册

protected void registerSave(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

String username = req.getParameter("username");

String password = req.getParameter("password");

String email = req.getParameter("email");

UserDao userDao = new UserDaoImpl();

User user = new User();

user.setUsername(username);

user.setPassword(password);

user.setEmail(email);

boolean flag = userDao.insertAll(user);

if (flag = true){

//sendRedirect

// resp.sendRedirect("/login,jsp");

req.getRequestDispatcher("/login.jsp").forward(req,resp);

}else {

req.getRequestDispatcher("/register").forward(req,resp);

}

}

//先根据id查询出想要修改的信息

protected void updateByIdSave(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

String id = req.getParameter("id");

UserDao userDao = new UserDaoImpl();

User user = userDao.updateByIdSave(Integer.valueOf(id));

req.setAttribute("userId", user);

req.getRequestDispatcher("/update.jsp").forward(req,resp);

}

//修改

protected void updateByAllSave(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

String id = req.getParameter("id");

String username = req.getParameter("username");

String password = req.getParameter("password");

String email = req.getParameter("email");

UserDao userDao = new UserDaoImpl();

User user = new User();

user.setId(Integer.parseInt(id));

user.setUsername(username);

user.setPassword(password);

user.setEmail(email);

try {

userDao.updateBySave(user);

} catch (Exception e) {

e.printStackTrace();

}

resp.sendRedirect(req.getContextPath()+"/action?action=querySave");

}

//删除

protected void deleteSave(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

String id = req.getParameter("id");

UserDao userDao = new UserDaoImpl();

try {

userDao.delByIdSave(Integer.parseInt(id));

} catch (NumberFormatException e) {

e.printStackTrace();

}

resp.sendRedirect(req.getContextPath()+"/action?action=querySave");

}

}

UBUtil.java

工具类,将数据库连接封装起来,使用的时候,直接类名调用方法即可,因为用static修饰

不同的数据库,数据库驱动不同,数据库连接也不同,使用的时候按照自己数据库的要求填写。

这个数据库连接工具包其实还可以优化,

使用QueryRunner类(org.apache.commons.dbutils.QueryRunner),需要导入commons-dbutils-1.3.jar包,

package com.yuanwu.util;

import java.security.PrivateKey;

import java.sql.*;

/**

* @Author YuanWu

* @ClassName DBUtil

* @Date 2020/10/24

**/

public class DBUtil {

private static Connection conn;

private static PreparedStatement pstm;

private static ResultSet rs;

private static String url = "jdbc:mysql://localhost:3306/user?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8";

public static Connection getConn(){

try {

Class.forName("com.mysql.cj.jdbc.Driver");

conn= DriverManager.getConnection(url, "root", "123456");

} catch (Exception e) {

e.printStackTrace();

}

return conn;

}

public static void getClose(){

try {

if (rs != null){

rs.close();

}

if (pstm != null){

pstm.close();

}

if (conn != null){

conn.close();

}

} catch (SQLException e) {

e.printStackTrace();

}

}

}

index.jsp

这个是测试的,实际使用的时候没用到他

Created by IntelliJ IDEA.

User: Lenovo

Date: 2020/10/24

Time: 19:46

To change this template use File | Settings | File Templates.

--%>

$Title$

查询

--%>

list.jsp

Created by IntelliJ IDEA.

User: Lenovo

Date: 2020/10/24

Time: 20:05

To change this template use File | Settings | File Templates.

--%>

卢本伟NB

Date date = new Date();

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String now = dateFormat.format(date);

%>

当前用户:${sessionScope.user.username},登录时间:

Iduserpasswordemail操作

${user_list.id}${user_list.username}${user_list.password}${user_list.email}

修改

删除

查询的效果图

12f893a83e57f961c82ca4421b641d0d.png

6ea595f8777682689270402880e5d1cc.png

login.jsp

Created by IntelliJ IDEA.

User: Lenovo

Date: 2020/10/24

Time: 20:14

To change this template use File | Settings | File Templates.

--%>

卢本伟NB

登录卢本伟广场

Email address

User Name

Submit

注册

register.jsp

Created by IntelliJ IDEA.

User: Lenovo

Date: 2020/10/24

Time: 21:59

To change this template use File | Settings | File Templates.

--%>

卢本伟NB

注册卢本伟广场

User Name

Pass Word

Email address

Submit

update.jsp

Created by IntelliJ IDEA.

User: Lenovo

Date: 2020/10/25

Time: 17:37

To change this template use File | Settings | File Templates.

--%>

卢本伟NB

id

username

password

email

修改

返回

修改的效果图

5fc349f5132887040e2875be8a1142d7.png

d0bbe49d829d7563572c847342d4d939.png

至此,基本的登录注册【增,查询】就做完了,还有修改、删除,后期有时间了会更新

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值