需求:
登录功能 
登录页面输入用户名和密码, 到数据库进行验证 ,如果成功跳转到success.html页面,失败跳转到error.html页面
数据库 mysql,数据表 t_user表【表中的字段 :name 用户名,pwd 密码】
实现:
mysql 存储数据建表 
jdbc操作java代码连接查询数据库里对应的字段
servlet将 html和java连接起来,用login来登录转发到成功或者失败页面。
实现步骤:
jdbc 
依赖 jar包,数据库连接的util DBUtil数据库连接工具类
mysql 连接
db.properties 数据库连接配置
核心代码实现:(DAO层)
sql语句 查询:String sql = "select * from t_user  where name=? and pwd =? ";
创建一个实体类和数据库表对应,dao层 用户名和密码验证,返回一个结果 对象 
servlet调用DAO层:如果用户存在 ,不为空,跳转到ok.html页面 ;如果不存在,对象为空, 登录失败 error.html

前台页面:
login.html【登录界面】

 <!DOCTYPE html>
<html>
<head>
<title>login.html</title>
<meta charset="utf-8">
<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body>
<form action="UserLogin">
用户名:<input type="text" name="uname" id="uname" /><br>
密码:<input type="password" name="pwd" id="pwd" /><br>
<input value="登录" type="submit"/>
</form>
</body>
</html>

success.html【登录成功界面】

 <!DOCTYPE html>
<html>
<head>
<title>success.html</title>
<meta charset="utf-8">
<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body>
This is 登录成功 page.看到女神<br>
<div>
<img src="imges/success.jpg" width="800px" height="500px"/>
</div>
</body>
</html>

error.html【登录失败界面】

 <!DOCTYPE html>
<html>
<head>
<title>error.html</title>
<meta charset="utf-8">
<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body>
This is 登录失败 page.一直在转悠转悠 <br>
<div>
<img src="imges/error.gif" />
</div>
</body>
</html>

entity层【实体类】

 package boom.servlet.entity;
/**
* 实体类
* @author Administrator
*
*/
public class T_user {
// 对应着数据库表的字段
private int id;
private String name;
private String pwd;
// 无参构造方法
public T_user() {
}
// 有参构造方法
public T_user(int id, String name, String pwd) {
super();
this.id = id;
this.name = name;
this.pwd = pwd;
}
// getter setter
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
// 重写toString
@Override
public String toString() {
return "T_user [id=" + id + ", name=" + name + ", pwd=" + pwd + "]";
} }

util层【封装的JDBC数据库连接】

 package boom.servlet.util;

 import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* 连接数据库的工具类
* @author Administrator
*
*/
public class DBUtil {
private static String driver;
private static String url;
private static String username;
private static String password; static {
// 创建properties对象获取属性文件的内容
Properties p = new Properties();
// 获取属性配置文件的读取流对象
InputStream is = DBUtil.class.getResourceAsStream("/db.properties");
try {
// 加载属性配置文件
p.load(is);
// 获取jdbc参数
driver = p.getProperty("driver");
url = p.getProperty("url");
username = p.getProperty("username");
password = p.getProperty("password");
// 加载驱动
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // 获取Connection对象
public static Connection getConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
} // 封装获取PreparedStatement对象
public static PreparedStatement getPreparedStatement(String sql,
Connection conn) { PreparedStatement ps = null;
try {
ps = conn.prepareStatement(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ps; } // 封装获取Statement对象
public static Statement getStatement(Connection conn) {
Statement stmt = null;
try {
stmt = conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
return stmt; } // 关闭资源
//父类可以调用 子类继承过的父类方法
public static void closeAll(ResultSet rs, Statement ps, Connection conn) {
try {
if(rs!=null ){
rs.close();
}
} catch (SQLException e1) {
e1.printStackTrace();
}
try {
if(ps!=null ){
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 封装DML
public static int executeDML(String sql, Object... objs) {
// 创建连接对象
Connection conn = getConnection();
// 创建sql命令对象
PreparedStatement ps = DBUtil.getPreparedStatement(sql, conn);
// 给占位符赋值
try {
conn.setAutoCommit(false);
for (int i = 0; i < objs.length; i++) {
ps.setObject(i + 1, objs[i]);
}
int i = ps.executeUpdate();
conn.commit();
return i;
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} finally {
// 关闭资源
DBUtil.closeAll(null, ps, conn);
}
// 返回结果
return -1;
}
// 测试数据库是否连接成功
public static void main(String[] args) {
Connection conn = DBUtil.getConnection();
System.out.println(conn);
}
}

dao层【user实现类】

 package boom.servlet.dao;

 import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import boom.servlet.entity.T_user;
import boom.servlet.util.DBUtil; /**
* 登录查询实现类
* @author Administrator
*select * from t_user where name='admin' and pwd='admin'
*/
public class UserDaoImpl {
// 返回对象
public T_user getUser(String name,String pwd){
String sql = "select * from t_user where name=? and pwd =? ";
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
T_user user= null;
//1.创建连接
conn = DBUtil.getConnection();
try {
//2.获取预处理块对象 preparestatement
ps = conn.prepareStatement(sql);
//3.绑定参数
ps.setString(1, name);
ps.setString(2, pwd);
//4.执行SQL语句 5.获取结果集
rs = ps.executeQuery();
//6.遍历结果集存放到 user对象中
while(rs.next()){
int id = rs.getInt("id");
String name2 = rs.getString("name");
String pwd2 = rs.getString("pwd");
//将数据放到对象中
user = new T_user(id,name2,pwd2);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
//7.关闭资源
DBUtil.closeAll(rs, ps, conn);
}
return user;
}
}

servlet层【获取前端页面登录验证】

 package boom.servlet.servlet;

 import java.io.IOException;

 import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import boom.servlet.dao.UserDaoImpl;
import boom.servlet.entity.T_user;
/**
* 获取前端页面登录验证
* @author Administrator
*
*/
public class UserLogin extends HttpServlet {
@Override
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 1、获取login用户提交的数据【账户,密码】
String uname = request.getParameter("uname");
String pwd = request.getParameter("pwd");
// 2、调用业务逻辑层。简化后调用dao层
UserDaoImpl daoImpl = new UserDaoImpl();
T_user user = daoImpl.getUser(uname, pwd);
String path = "/login.html";
if (user != null) {
path = "/success.html";
} else {
path = "/error.html";
}
// 3 根据dao的查询结果 ,跳转到成功或失败页面
request.getRequestDispatcher(path).forward(request, response); }
}

test层【测试dao层是否连接成功】

 package boom.servlet.test;

 import boom.servlet.dao.UserDaoImpl;
import boom.servlet.entity.T_user; /**
* 测试dao层
* @author Administrator
*
*/
public class TestUserDao {
public static void main(String[] args) {
UserDaoImpl daoImpl = new UserDaoImpl();
T_user user = daoImpl.getUser("boom", "123");
if(user != null){
System.out.println("登录成功");
}else{
System.out.println("登录失败");
}
}
}

数据库配置文件【db.properties】

演示界面:

Servlet登录小案例的更多相关文章

  1. Servlet入门小案例

    案例一:tomcat9.jdk1.8 1.eclipse创建web项目 1)创建一个Dynamic web project,名字为Servlet_hjh 2)在src下创建一个包,为com.hjh.d ...

  2. Session小案例------完成用户登录

    Session小案例------完成用户登录     在项目开发中,用户登陆功能再平常只是啦,当用户完毕username和password校验后.进入主界面,须要在主界面中显示用户的信息,此时用ses ...

  3. JSP +MySQL实现网站的登录与注册小案例

    为了练手,我就自己试着做了一个网站的登录与注册的小案例.由于没有做美化处理,所以界面并不是很好看. 网站实现的功能如下: 用户首次注册功能 用户登录功能 项目目录展示: 下面我将会分模块展示 注册模块 ...

  4. 《java入门第一季》之类小案例(模拟用户登录)

    首先是做一个用户登录的小案例.在此基础上加入其它逻辑. import java.util.Scanner; /* * 模拟登录,给三次机会,并提示还有几次.如果登录成功,就可以玩猜数字小游戏了. * ...

  5. Servlet 实现訪问量的统计小案例

    今天学习了Servlet的基础知识,学习了一个统计訪问量的小案例,记录一下 package cn.selevet_01; import java.io.IOException; import java ...

  6. WEB 小案例 -- 网上书城(四)

    针对于这个小案例我们今天讲解结账操作,也是有关这个案例的最后一次博文,说实话这个案例的博文写的很糟糕,不知道该如何去表述自己的思路,所以内容有点水,其实说到底还是功力不够. 处理思路 点击结账,发送结 ...

  7. session的两个小案例

    学完了session,写两个小案例加深一下对session的巩固. 1. 用户登陆案例 登陆html页面提交后,将参数带给处理登陆的servlet,该servlet将获得登陆的用户名和密码,并将这些信 ...

  8. 黑马day14 踢人小案例

    本案例介绍: 使用监听器来实现踢人小案例,仅仅有管理员才有踢人的功能. 1.搭建开发环境,导入本案例须要的jar包.以及一个准备好的数据库工具类:提供数据源的方法...当中我已经在数据库中加入了三个用 ...

  9. JavaWeb_(Struts2框架)Ognl小案例查询帖子

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...

随机推荐

  1. android stdio 首次安装配置

    http://www.cnblogs.com/smyhvae/p/4390905.html 不启用 加快模拟器调试 这个玩意儿打开老是报什么 android 1.0的问题 导致编译不起来 直接关了 S ...

  2. 转载:深入理解Spring MVC 思想

    原文作者:赵磊 原文地址:http://elf8848.iteye.com/blog/875830 目录  一.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.sp ...

  3. SpringBoot: 4.SpringBoot整合listener(转)

    整合方式一:通过注解扫描完成 Listener 组件的注册 1.编写listener package com.bjsxt.listener; import javax.servlet.ServletC ...

  4. 关于Bootstrap Table使用生成冻结窗格的表格

    参考资料 : <JS组件系列——Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案> <http://issues.wenzhixin.net.cn/bootst ...

  5. PJzhang:如何缓解Mimikatz从Windows2008 R2内存中读取域控密码?

    猫宁!!! 参考: https://xz.aliyun.com/t/4180 https://www.anquanke.com/post/id/156299 https://www.cnblogs.c ...

  6. 配置nova服务使用ceph作为后端存储

    在ceph监视器上执行 1.创建pool池 为nova服务创建pool池(因为我只有一个OSD节点,所以要将副本数设置为1) ceph osd pool create nova-vms 32 ceph ...

  7. mysql数据库之函数、流程控制

    函数 注意与存储过程的区别,mysql内置的函数只能在sql语句中使用! 参考博客:http://www.cnblogs.com/linhaifeng/articles/7495918.html#_l ...

  8. BTree B+Tree

    简介 B 树是为了磁盘或其它存储设备而设计的一种多叉平衡查找树.(相对于二叉,B树每个内结点有多个分支,即多叉)B树又可以写成B-树/B-Tree,并不是B“减”树,横杠为连接符,容易被误导首先我们介 ...

  9. git 命令 git diff 查看 Git 区域文件的具体改动

    查看 Git 区域文件的具体改动 git diff git status 只能让我们知道文件在 Git 区域内的改动状态,但如果我们想查看某个文件内具体改了什么(也可以理解为在不同 Git 区域中的差 ...

  10. C# String与Byte数组的转换

    string转byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBytes(str); byte[] byteArray = Enc ...