项目预览图片:

文章最后有对应的介绍和更多截图
等待资源审核,审核后公布代码链接

资源连接:https://download.csdn.net/download/justleavel/21922817
资源连接:https://download.csdn.net/download/justleavel/21922817
文章末尾见更多图片 数据库在文章末尾

1:首先创建po类

与数据库一一对应
lombok生成get set方法

package com.ftzlover.demo.po;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {private Integer userId; // 用户IDprivate String uname; // 用户名称private String upwd; // 用户密码private String nick; // 用户昵称private String head; // 用户头像private String mood; // 用户签名
}

2:创建底层UserDao

这里就是所有创建好的层

3:创建UserService(一般都会调用UserDao)

 private UserDao userDao = new UserDao();

4:写web层UserSrevlet

1:首先需要写@WebServlet("/user")在顶端,

2:接下来让其调用service层private UserService userService = new UserService();

3:然后让后让这个类继承 HttpServlet

public class UserServlet extends HttpServlet {

4:重写方法

 @Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

4:创建vo层并在里面创建ResultInfo类用于封装返回数据

1:创建状态码code 提示信息 返回对象

@Getter
@Setter
public class ResultInfo<T> {private Integer code; // 状态码 成功=1,失败=0private String msg; // 提示信息private T result; // 返回的对象(字符串、JavaBean、集合、Map等)}

5:开始从Dao开始写

 Dao层:(数据访问层:数据库中的增删改查操作)通过用户名查询用户对象, 返回用户对象1. 获取数据库连接2. 定义sql语句3. 预编译4. 设置参数5. 执行查询,返回结果集6. 判断并分析结果集7. 关闭资源
package com.ftzlover.demo.dao;import com.ftzlover.demo.po.User;
import com.ftzlover.demo.util.DBUtil;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;/***  Dao层:(数据访问层:数据库中的增删改查操作)*         通过用户名查询用户对象, 返回用户对象*             1. 获取数据库连接*             2. 定义sql语句*             3. 预编译*             4. 设置参数*             5. 执行查询,返回结果集*             6. 判断并分析结果集*             7. 关闭资源*/
public class UserDao {public User queryUserByName(String userName){//首先创建对象User user = null;Connection connection = null;PreparedStatement preparedStatement = null;  //预编译对象ResultSet resultSet = null;try {// 1. 获取数据库连接connection = DBUtil.getConnetion();// 2. 定义sql语句String sql = "select * from tb_user where uname = ?";// 3. 预编译preparedStatement = connection.prepareStatement(sql);// 4. 设置参数preparedStatement.setString(1, userName);// 5. 执行查询,返回结果集resultSet = preparedStatement.executeQuery();// 6. 判断并分析结果集if (resultSet.next()) {user = new User();user.setUserId(resultSet.getInt("userId"));user.setUname(userName);user.setHead(resultSet.getString("head"));user.setMood(resultSet.getString("mood"));user.setNick(resultSet.getString("nick"));user.setUpwd(resultSet.getString("upwd"));}} catch (Exception e) {e.printStackTrace();} finally {// 7. 关闭资源DBUtil.close(resultSet,preparedStatement,connection);}return  user;}
}

6:开始写service层

package com.ftzlover.demo.service;import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;
import com.ftzlover.demo.dao.UserDao;
import com.ftzlover.demo.po.User;
import com.ftzlover.demo.vo.ResultInfo;
/*Service层:(业务逻辑层:参数判断、业务逻辑处理)1. 判断参数是否为空如果为空设置ResultInfo对象的状态码和提示信息返回resultInfo对象2. 如果不为空,通过用户名查询用户对象3. 判断用户对象是否为空如果为空设置ResultInfo对象的状态码和提示信息返回resultInfo对象4. 如果用户对象不为空,将数据库中查询到的用户对象的密码与前台传递的密码作比较 (将密码加密后再比较)如果密码不正确设置ResultInfo对象的状态码和提示信息返回resultInfo对象5. 如果密码正确设置ResultInfo对象的状态码和提示信息6. 返回resultInfo对象*/
public class UserService {private UserDao userDao = new UserDao();public ResultInfo<User> userLogin(String userName,String userPwd){ResultInfo<User> resultInfo = new ResultInfo<>();// 数据回显:当登录实现时,将登录信息返回给页面显示User u = new User();u.setUname(userName);u.setUpwd(userPwd);// 设置到resultInfo对象中resultInfo.setResult(u);//  1. 判断参数是否为空if (StrUtil.isBlank(userName) || StrUtil.isBlank(userPwd)) {// 如果为空 设置ResultInfo对象的状态码和提示信息resultInfo.setCode(0);resultInfo.setMsg("用户姓名或密码不能为空!");// 返回resultInfo对象return resultInfo;}// 2. 如果不为空,通过用户名查询用户对象User user = userDao.queryUserByName(userName);// 3. 判断用户对象是否为空if (user == null) {// 如果为空,设置ResultInfo对象的状态码和提示信息resultInfo.setCode(0);resultInfo.setMsg("该用户不存在!");// 返回resultInfo对象return resultInfo;}//  4. 如果用户对象不为空,将数据库中查询到的用户对象的密码与前台传递的密码作比较 (将密码加密后再比较)// 将前台传递的密码按照MD5算法的方式加密userPwd = DigestUtil.md5Hex(userPwd);// 判断加密后的密码是否与数据库中的一致if (!userPwd.equals(user.getUpwd())) {// 如果密码不正确resultInfo.setCode(0);resultInfo.setMsg("用户密码不正确!");return resultInfo;}resultInfo.setCode(1);resultInfo.setResult(user);return resultInfo;}
}

7:编写最后的Servelt层

1:用户登陆

package com.ftzlover.demo.web;import com.ftzlover.demo.po.User;
import com.ftzlover.demo.service.UserService;
import com.ftzlover.demo.vo.ResultInfo;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/user")
public class UserServlet extends HttpServlet {private UserService userService = new UserService();@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 接收用户行为String actionName = request.getParameter("actionName");if ("login".equals(actionName)) {// 用户登录userLogin(request, response);}}/*** 用户登录1. 获取参数 (姓名、密码)2. 调用Service层的方法,返回ResultInfo对象3. 判断是否登录成功如果失败将resultInfo对象设置到request作用域中请求转发跳转到登录页面如果成功将用户信息设置到session作用域中判断用户是否选择记住密码(rem的值是1)如果是,将用户姓名与密码存到cookie中,设置失效时间,并响应给客户端如果否,清空原有的cookie对象重定向跳转到index页面* @param request* @param response*/private void userLogin(HttpServletRequest request, HttpServletResponse response) {// 1. 获取参数 (姓名、密码)String userName = request.getParameter("userName");String userPwd = request.getParameter("userPwd");// 2. 调用Service层的方法,返回ResultInfo对象ResultInfo<User> resultInfo = userService.userLogin(userName, userPwd);// 3. 判断是否登录成功if (resultInfo.getCode() == 1) { // 如果成功//  将用户信息设置到session作用域中request.getSession().setAttribute("user", resultInfo.getResult());//  判断用户是否选择记住密码(rem的值是1)String rem = request.getParameter("rem");// 如果是,将用户姓名与密码存到cookie中,设置失效时间,并响应给客户端if ("1".equals(rem)) {// 得到Cookie对象Cookie cookie = new Cookie("user",userName +"-"+userPwd);// 设置失效时间cookie.setMaxAge(3*24*60*60);// 响应给客户端response.addCookie(cookie);} else {// 如果否,清空原有的cookie对象Cookie cookie = new Cookie("user", null);// 删除cookie,设置maxage为0cookie.setMaxAge(0);// 响应给客户端response.addCookie(cookie);}// 重定向跳转到index页面try {response.sendRedirect("index.html");} catch (IOException e) {e.printStackTrace();}} else { // 失败// 将resultInfo对象设置到request作用域中request.setAttribute("resultInfo", resultInfo);// 请求转发跳转到登录页面try {request.getRequestDispatcher("login.jsp").forward(request, response);} catch (ServletException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}}

附件:util层的DBUtil

package com.ftzlover.demo.util;import java.io.InputStream;
import java.sql.*;
import java.util.Properties;public class DBUtil {// 得到配置文件对象private static Properties properties = new Properties();static {try {// 加载配置文件(输入流)InputStream in = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");System.out.println("是否获取到流对象:" + in);System.out.println("流对象:" + properties);// 通过load()方法将输入流的内容加载到配置文件对象中properties.load(in);// 通过配置文件对象的getProperty()方法获取驱动名,并加载驱动Class.forName(properties.getProperty("jdbcName"));} catch (Exception e) {e.printStackTrace();}}public static Connection getConnetion() {Connection connection = null;try {// 得到数据库连接的相关信息String dbUrl = properties.getProperty("dbUrl");System.out.println(dbUrl);String dbName = properties.getProperty("dbName");System.out.println(dbName);String dbPwd = properties.getProperty("dbPwd");System.out.println(dbName);// 得到数据库连接connection = DriverManager.getConnection(dbUrl, dbName, dbPwd);System.out.println(connection);} catch (SQLException throwables) {throwables.printStackTrace();}return connection;}public static void close(ResultSet resultSet,PreparedStatement preparedStatement,Connection connection) {try {// 判断资源对象如果不为空,则关闭if (resultSet != null) {resultSet.close();}if (preparedStatement != null) {preparedStatement.close();}if (connection != null) {connection.close();}} catch (Exception e) {e.printStackTrace();}}}

完成 示例:


十分炫酷的登陆界面加完善的后台登陆界面截图:





数据库代码:新建数据库名叫my 建表名叫tb_user

CREATE TABLE `tb_user` (`userId` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键,自动增长',`uname` varchar(50) NOT NULL COMMENT '用户名',`upwd` varchar(50) DEFAULT NULL COMMENT '密码',`nick` varchar(50) DEFAULT NULL COMMENT '昵称',`head` varchar(100) DEFAULT NULL COMMENT '头像',`mood` varchar(500) DEFAULT NULL COMMENT '心情',PRIMARY KEY (`userId`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

其余的自己填写就好,不懂联系QQ:2831826106

JSP用户登录连接数据库相关推荐

  1. jsp用session判断输入框_[实战小剧场servletamp;jsp] 用户登录及退出功能实现

    项目使用技术:servlet+jsp+mybatis 用户登录: 根据用户名和密码查询用户信息.查到则登录成功,查不到则登录失败. 用户退出: 销毁session 登录思路: 浏览器在登录页面发起登录 ...

  2. html退出登录_[实战小剧场servletamp;jsp] 用户登录及退出功能实现

    项目使用技术:servlet+jsp+mybatis 用户登录: 根据用户名和密码查询用户信息.查到则登录成功,查不到则登录失败. 用户退出: 销毁session 登录思路: 浏览器在登录页面发起登录 ...

  3. Servlet+jsp用户登录加上验证码

    最近公司有个项目被客户拿去进行漏洞扫描,发现用户登录太简单,容易被暴力破解.当然发现的问题很多,什么反射型XSS,存储型XSS,敏感信息泄露等等.但是我们今天不讲这么多,就说说如何修复暴力破解的问题. ...

  4. jsp用户登录验证_Java之使用过滤器进行登录验证

    前言 过滤器是一种 Java 组件,这一点与 Servlet 类似,用于在请求发到 Servlet 之前进行拦截并处理,或者在 Servlet 执行完毕之后,在发送回客户端之前对响应进行拦截并处理. ...

  5. jsp java 登陆_jsp+java servlet实现简单用户登录

    jsp+java servlet实现简单用户登录(使用数据库,包括注册页面) 功能介绍 本项目通过使用jsp和servlet实现简单的用户登录.主要逻辑为:如果用户不存在,则首先进行注册(注册信息同步 ...

  6. jsp java servlet_jsp+java ,servlet如何实现用户登录和注册页面

    jsp+java servlet实现简单用户登录(使用数据库,包括注册页面) 功能介绍 本项目通过使用jsp和servlet实现简单的用户登录.主要逻辑为:如果用户不存在,则首先进行注册(注册信息同步 ...

  7. 用户列表 java_三个jsp页面+Java片段实现的用户登录和用户列表查询[带分页]

    和Servlet功能需求一样 数据库: CREATE DATABASE user; USE user; CREATE TABLE `user` ( `userId` int(11) NOT NULL ...

  8. 使用JSP实现简单的登录注册功能,并且使用Session跟踪用户登录信息

    使用JSP实现简单的登录注册功能,并且使用了Session来跟踪用户的登录信息,这个是用纯JSP来实现此功能的,由于没有连接数据库,所以使用List来模拟数据库. 第一步:创建web项目 如果有不会创 ...

  9. MVC设计模式(JSP实验八) 等差等比数列求和 用户登录注册

    MVC设计模式(JSP实验八) 文章目录 MVC设计模式(JSP实验八) 前言 一.实验题目及要求 第2题 基于MVC模式的用户登录和注册 1 系统模块构成 1.1 会员注册 1.2 会员登录 2.实 ...

最新文章

  1. 一次由于字符集问题引发的MySQL主从同步不一致问题追查
  2. destoon 多表联合查询时出现解析错误,parse_str函数解析错误
  3. React 状态管理库: Mobx
  4. java小程序扑克牌_用Java来写一个模拟斗地主发牌的小程序
  5. Python(10):类
  6. 人力资源管理系统erp
  7. 机器学习实战 KNN实战
  8. 国产数据库的里程碑式新突破:贵阳银行核心系统4.2亿订单采购易鲸捷
  9. python控制电脑音量,声音之控制音量,,
  10. 从零开始的LC刷题(56): Power of Two
  11. git提交错分支怎么办
  12. 第一性原理计算软件攻略-利用VESTA绘制差分电荷密度图解
  13. Linux基础命令---lp打印文件
  14. uni-app的editor的富文本编辑器
  15. 破解花式反爬之大众点评-下
  16. 全民美颜时代中,美颜SDK担任着什么角色?
  17. 根号二用计算机怎么算,Sqrt-如何计算根号2
  18. ELK生态系统——修改es中index的mapping平滑过渡数据
  19. AI美颜SDK功能算法代码解析
  20. 「 科研经验 」思考“工程解决方案”的思维

热门文章

  1. Neo4j 实战篇(一)基于Py2Neo构建电影知识图谱
  2. c# 利用AForge.NET组件操作摄像头
  3. python编写随机获取ip免费调用有道翻译
  4. 网易2018校园招聘题目
  5. PLSQL创建Oracle定时任务,定时执行存储过程
  6. 一阶微分电路和积分电路有何功能
  7. c语言中 dbl2str,c语言中FLT_DIG和DBL_DIG是什么意思?~
  8. Android 4.0 平台特性
  9. 深度篇——人脸识别(一)  ArcFace 论文 翻译
  10. Python中的几种乘法np.dot,np.multiply,*