需求:
登录功能 
登录页面输入用户名和密码, 到数据库进行验证 ,如果成功跳转到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. [转]Java Jacob操作Excel

    Jacob项目:https://sourceforge.net/projects/jacob-project/ 转自:https://blog.csdn.net/ZY_extreme/article/ ...

  2. MATLAB学习(十)实现文件、图像读写

    t=1:5; s1=sin(t); s2=cos(t); s=[t;s1;s2]; fid1=fopen('test.dat','wt'); fprintf(fid1,'\nThis is a For ...

  3. YII框架中可以使用foreach遍历对象以及可以使用数组形式直接访问对象的原因

    YII框架中可以使用foreach遍历对象以及可以使用数组形式直接访问对象的原因在YII框架的使用过程中,我们可以使用foreach直接遍历findAll等方法返回的对象的属性为什么呢?其实这与CMo ...

  4. 今天发现一个Window系统服务增删改查神器:NSSM

    官网地址:https://nssm.cc Win10系统下这个:https://nssm.cc/ci/nssm-2.24-101-g897c7ad.zip 官方的帮助,英语的,可以大概看一下: htt ...

  5. K8S知识点总结

    一.K8S介绍: Kubernetes(k8s)是Google开源的容器集群管理系统.在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大规模 ...

  6. 如何让FasterTransformer支持动态batch和动态sequence length

    FasterTransformer 算子 nvidia在开源的FasterTransformer的代码中,提供tensorrt和tensorflow的自定义算子编译和py调用示例,详见FasterTr ...

  7. Linux第三阶段题型测试

    1.如何取得/etiantian文件的权限对应的数字内容,如-rw-r--r--为644,要求使用命令取得644或0644这样的数字. 解答: 1)最土的方法:ls -l /etiantian |cu ...

  8. [转帖]12条用于Linux的MySQL/MariaDB安全最佳实践

    12条用于Linux的MySQL/MariaDB安全最佳实践 2018-01-04 11:05:56作者:凉凉_,soaring稿源:开源中国社区 https://ywnz.com/linuxysjk ...

  9. PHP给图片添加文字水印实例

    PHP给图片添加文字水印实例,支持中文文字水印,是否覆盖原图,自定义设置水印背景色.文字颜色.字体等. 水印类water.class.php var $Path = "./"; / ...

  10. python-day7(正式学习)

    目录 数字类型内置方法 整形内置方法(int) 常用操作+内置方法 是否可变 浮点型内置方法(float) 常用操作+内置方法 是否可变 字符串内置方法 常用操作+内置方法 是否可变 数字类型内置方法 ...