需求:
登录功能 
登录页面输入用户名和密码, 到数据库进行验证 ,如果成功跳转到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. 手把手教你如何玩转Solr(包含项目实战)

    一:Solr简介       Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引 ...

  2. Visual Studio Code 帮助查看器,指定的用于安装帮助内容的位置无效,或者您无权访问该位置

    今天有个C# 类库文件里面的属性想要了解下,想到了Vs的帮助文档,其实也就是微软的MSDN:提示帮助查看器,指定的用于安装帮助内容的位置无效,或者您无权访问该位置: 最近两天vs也没有更新,并且也没有 ...

  3. flask(1.1)装饰器装饰多个视图函数出现的问题

    目录 1.装饰器装饰多个视图函数出现的问题 2.使用装饰器修复技术解决该问题 1.装饰器装饰多个视图函数出现的问题 代码实例: from flask import Flask, request, re ...

  4. Leetcode之动态规划(DP)专题-309. 最佳买卖股票时机含冷冻期(Best Time to Buy and Sell Stock with Cooldown)

    Leetcode之动态规划(DP)专题-309. 最佳买卖股票时机含冷冻期(Best Time to Buy and Sell Stock with Cooldown) 股票问题: 121. 买卖股票 ...

  5. Go语言中数组的内部实现和基础功能

    数组的内部实现和基础功能 因为数组是切片和映射的基础数据结构.理解了数组的工作原理,有助于理解切片和映射提供的优雅和强大的功能. 内部实现 在Go语言里,数组是一个长度固定的数据类型,用于存储一段具有 ...

  6. Archlinux开启ssh服务命令

    Archlinux开启ssh服务命令: systemctl enable sshd.service 开机启动 systemctl start sshd.service 立即启动 systemctl r ...

  7. 解决mac启动springboot项目很慢的问题

    1.打开终端输入: hostname 查看电脑名称 2.输入命令修改hosts文件 sudo vi /etc/hosts 3. 在127.0.0.1和::1后边分别增加你的电脑名称 127.0.0.1 ...

  8. layui 实现图片上传和预览

    [学习笔记] 图片不自动上传并在表单提交时再上传,看代码. 附上表单页面 前台实现 <#--图片名--><input id="fileName" type=&qu ...

  9. [HAOI2010]软件安装 题解

    题面 这道题比较显然地,是一道树形背包: 但是会有环,怎么办呢? 缩点!tarjan缩点! 然后在新图上跑树形背包就可以AC了 #include <bits/stdc++.h> #defi ...

  10. 更改:把redis替换成kafka

    之前的流程是:filebeat,redis,logstash,elasticsearch 现在的流程是:filebeat,Kafka(zookeeper),logstash,elasticsearch ...