目录

1.案例:用户登录

1.1用户登录案例需求:

1.2开发步骤

1.2.1创建项目,导入html页面,配置文件,jar包

​编辑1.2.2. 创建数据库环境

1.2.3 创建包cn.itcast.domain,创建类User

1.2.4创建包cn.itcast.util,编写工具类JDBCUtils

1.2.5 创建包cn.itcast.dao,创建类UserDao,提供login方法(操作数据库)

1.2.6编写cn.itcast.web.servlet.LoginServlet类

1.2.7编写FailServlet和SuccessServlet类

1.2.8login.html中form表单的action路径的写法

1.2.9BeanUtils工具类,简化数据封装


1.案例:用户登录

1.1用户登录案例需求:

1.编写login.html登录页面username & password 两个输入框
2.使用Druid数据库连接池技术,操作mysql,day14数据库中user表
3.使用JdbcTemplate技术封装JDBC
4.登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎您
5.登录失败跳转到FailServlet展示:登录失败,用户名或密码错误

1.2开发步骤

1.2.1创建项目,导入html页面,配置文件,jar包

a.新建Java项目

b.添加框架支持(Web应用程序)

c.部署项目

d.导入servlet-api.jar


1.2.2. 创建数据库环境

CREATE DATABASE day14;USE day14;CREATE TABLE USER(id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(32) UNIQUE NOT NULL,PASSWORD VARCHAR(32) NOT NULL);INSERT INTO USER (username,PASSWORD) VALUES("superbaby",123);select * from user;

1.2.3 创建包cn.itcast.domain,创建类User

package cn.itcast.domain;/*** 用户的实体类*/
public class User {private int id;private String username;private String password;private String gender;public void setHehe(String gender){this.gender = gender;}public String getHehe(){return gender;}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;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", gender='" + gender + '\'' +'}';}
}

1.2.4创建包cn.itcast.util,编写工具类JDBCUtils

package cn.itcast.util;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import javax.xml.crypto.Data;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;/*** JDBC工具类 使用Durid连接池*/
public class JDBCUtils {private static DataSource ds ;static {try {//1.加载配置文件Properties pro = new Properties();//使用ClassLoader加载配置文件,获取字节输入流InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");pro.load(is);//2.初始化连接池对象ds = DruidDataSourceFactory.createDataSource(pro);} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}/*** 获取连接池对象*/public static DataSource getDataSource(){return ds;}/*** 获取连接Connection对象*/public static Connection getConnection() throws SQLException {return  ds.getConnection();}
}

配置文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///day14
username=root
password=root
initialSize=5
maxActive=10
maxWait=3000

1.2.5 创建包cn.itcast.dao,创建类UserDao,提供login方法(操作数据库)

package cn.itcast.dao;import cn.itcast.domain.User;
import cn.itcast.util.JDBCUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;/*** 操作数据库中User表的类*/
public class UserDao {//声明JDBCTemplate对象共用private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());/*** 登录方法* @param loginUser 只有用户名和密码* @return user包含用户全部数据,没有查询到,返回null*/public User login(User loginUser){try {//1.编写sqlString sql = "select * from user where username = ? and password = ?";//2.调用query方法User user = template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),loginUser.getUsername(), loginUser.getPassword());return user;} catch (DataAccessException e) {e.printStackTrace();//记录日志return null;//当sql语句执行失败,不会报错,而是返回null}}
}

1.2.6编写cn.itcast.web.servlet.LoginServlet类

由于导入servlet.api.jar的包,可以使用快捷创建servlet类

package cn.itcast.web.servlet;import cn.itcast.dao.UserDao;
import cn.itcast.domain.User;
import org.apache.commons.beanutils.BeanUtils;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.设置编码req.setCharacterEncoding("utf-8");/* //2.获取请求参数String username = req.getParameter("username");String password = req.getParameter("password");//3.封装user对象User loginUser = new User();loginUser.setUsername(username);loginUser.setPassword(password);*///2.获取所有请求参数Map<String, String[]> map = req.getParameterMap();//3.创建User对象User loginUser = new User();//3.1使用BeanUtils封装try {BeanUtils.populate(loginUser,map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//4.调用UserDao的login方法UserDao dao = new UserDao();User user = dao.login(loginUser);//5.判断userif(user == null){//登录失败req.getRequestDispatcher("/failServlet").forward(req,resp);}else{//登录成功//存储数据req.setAttribute("user",user);//转发req.getRequestDispatcher("/successServlet").forward(req,resp);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req,resp);}
}

1.设置编码可以防止中文乱码

2.获取所有请求参数,封装到map集合

3.创建User对象

3.1使用BeanUtils.populate()将用户输入的信息(map集合)封装到loginUser对象中

4.通过反射获得login方法,将loginUser传到方法中,通过JdbcTemplate中的方法queryForObject,返回一个user对象,该对象是数据库中的信息,或者由于数据库不匹配返回null。

5.判断user,利用getRequestDispatcher进行转发到其他页面。

1.2.7编写FailServlet和SuccessServlet类

package cn.itcast.web.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/failServlet")
public class FailServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//给页面写一句话//设置编码response.setContentType("text/html;charset=utf-8");//输出response.getWriter().write("登录失败,用户名或密码错误");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}
package cn.itcast.web.servlet;import cn.itcast.domain.User;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/successServlet")
public class SuccessServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取request域中共享的user对象User user = (User) request.getAttribute("user");//if语句防止空指针异常if(user != null){//给页面写一句话//设置编码response.setContentType("text/html;charset=utf-8");//输出response.getWriter().write("登录成功!"+user.getUsername()+",欢迎您");}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}

1.2.8login.html中form表单的action路径的写法

action="/day14_test/loginServlet"

虚拟目录+Servlet的资源路径

1.2.9BeanUtils工具类,简化数据封装

BeanUtils工具类用于封装JavaBean的
1. JavaBean:标准的Java类
要求:
1. 类必须被public修饰
2. 必须提供空参的构造器
3. 成员变量必须使用private修饰
4. 提供公共setter和getter方法
功能:封装数据

2. 概念
成员变量:
属性:setter和getter方法截取后的产物
例如:getUsername() --> Username--> username

3. 方法:
setProperty()
getProperty()
populate(Object obj , Map map):将map集合的键值对信息,封装到对应的JavaBean对象中.

用户登录模块---Druid+JDBC+Servlet相关推荐

  1. 小程序登录本地服务器,微信小程序实现用户登录模块服务器搭建

    我选用的是node.js来搭建服务器,没有安装的小伙伴可以参考我的node.js其他博客. 服务器安装与配置 初始化项目,将会自动创建package.json配置文件. npm init -y 安装E ...

  2. java 用户登录模块_Java SSH框架系列:用户登录模块的设计与实现思路

    1.简介 用户登录模块,指的是根据用户输入的用户名和密码,对用户的身份进行验证等.如果用户没有登录,用户就无法访问其他的一些jsp页面,甚至是action都不能访问. 二.简单设计及实现 本程序是基于 ...

  3. 客户关系管理项目——用户登录模块设计

    一 模块需求细化 登录的用户,默认情况有三个不同角色,分别为:系统管理员,前台客服,信息管理员. 用户登录后能够根据其角色来进行相关工作,进行完工作需要能够注销. 细化需求如下: 用户登录之后按角色分 ...

  4. php开发用户登录模块,使用CodeIgniter开发用户登录注册模块

    本文介绍使用CodeIgniter来开发一个用户登录和注册的小模块,有详细的数据库表和ci代码. 1.数据库设计 字段 类型 空 额外 索引 id int(10) 否 auto_increment p ...

  5. ASP.NET用户登录模块代码

    1.验证用户登录:     public static bool ValidateUser(string UserName,string UserPwd)     {         bool Fla ...

  6. Vue项目实战之电商后台管理系统(一) 用户登录模块

    目录 一.项目概述 二.项目初始化 2.1 前端项目初始化步骤 2.2 后台项目的环境安装配置 三.用户登录/登出功能实现 3.1 登录功能概述 3.1.1 登录状态保持 3.1.2 登录逻辑: 3. ...

  7. ajax用户登录模块,ajax用户注册模块

    ajax用户注册模块 内容精选 换一换 用户输入码流给VDEC解码,某些帧或所有帧都没有触发回调函数,用户收不到解码结果.码流中某些帧是坏帧,导致语法解析不出这些帧的含义,或者解码这些帧失败,从而不调 ...

  8. 微信小程序——用户登录模块服务器搭建

    文章目录 服务器安装与配置 代码编写 给大家整理了一下 开启服务器 我选用的是node.js来搭建服务器,没有安装的小伙伴可以参考我的node.js其他博客. 服务器安装与配置 初始化项目,将会自动创 ...

  9. 学生信息管理系统——用户登录模块问题篇

    终于进入了"学生"的优化调试阶段了,这第一个窗体就出了错误,以下是有关这个错误,我的解决办法,这个错误的原因是由于通过ADO控件连接ODBC数据源连接出了问题,导致模块代码产生了错 ...

  10. 【django】用户登录模块实现步骤(二)之QQ登录工具AgentLogin和通过OAuth2.0认证获取openid【33】

    一.QQ登录工具AgentLogin 1.AgentLogin介绍 ⽬前只⽀持 腾讯QQ,微信,微博的第三⽅登录 该⼯具封装了QQ登录时对接QQ互联接⼝的请求操作.可⽤于快速实现QQ登录功能. 2.A ...

最新文章

  1. Hive 基本语法操练(四):Hive 复合类型
  2. 【pmcaff】搞清楚产品经理的6大问题,街边卖煎饼也能火
  3. 服务器可视化_疫情来袭,30分钟学会用python开发部署疫情可视化网站
  4. 面试官:说说一条查询SQL的执行过程?
  5. 最短工期 (25 分)【拓扑排序模板】
  6. 有关循环和判断的几个小问题
  7. 946. 验证栈序列
  8. python @修饰符_Python修饰符,返回替换了一个或多个参数的函数
  9. unbuntu cmake安装mysql_Ubuntu下源码安装MySQL-5.5.25a
  10. vs关于_CRT_SECURE_NO_WARNINGS警告说明
  11. 三桥君:如何把SQL Server的数据库导为sql文件
  12. Windows下Nginx源码编译指南
  13. 卸载掉360之后无法删除360safe文件夹解决办法!
  14. 万万没想到:用理工科思维理解世界-读后感
  15. 观点 | 电动汽车变革进行时,芯片IP供应商扮演着怎样的角色?
  16. Oracle Database 数据库
  17. 如何将png图片转为heif格式
  18. 盘点认证协议 : 普及篇之 OTP 和短信认证方式
  19. 用 kali 工具 apache 搭建简易网站 LAMP
  20. 压力、焦虑还是抑郁? 正确诊断再治疗

热门文章

  1. E. Thematic Contests【dp】
  2. 解决 Ubuntu-MATE 系统中出现 System policy prevents Wi-Fi scans 的问题
  3. python火车票自我编写_自己动手写100行Python代码抢火车票!
  4. xzp android webview,加载gif动态图的三种方式
  5. peoplesoft 日志
  6. 未来几年,谁能拯救手机拍照功能? 1
  7. codeforces 136A(Presents) Java
  8. (25)TracerWarning: Output nr 1. of the traced function does not match the corresponding output of ..
  9. 【SpringBoot系列】最详细demo-- 集成Swagger2
  10. nrf52832 comp for sdk 15.2.0