Servlet登录小案例
需求:
登录功能
登录页面输入用户名和密码, 到数据库进行验证 ,如果成功跳转到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登录小案例的更多相关文章
- Servlet入门小案例
案例一:tomcat9.jdk1.8 1.eclipse创建web项目 1)创建一个Dynamic web project,名字为Servlet_hjh 2)在src下创建一个包,为com.hjh.d ...
- Session小案例------完成用户登录
Session小案例------完成用户登录 在项目开发中,用户登陆功能再平常只是啦,当用户完毕username和password校验后.进入主界面,须要在主界面中显示用户的信息,此时用ses ...
- JSP +MySQL实现网站的登录与注册小案例
为了练手,我就自己试着做了一个网站的登录与注册的小案例.由于没有做美化处理,所以界面并不是很好看. 网站实现的功能如下: 用户首次注册功能 用户登录功能 项目目录展示: 下面我将会分模块展示 注册模块 ...
- 《java入门第一季》之类小案例(模拟用户登录)
首先是做一个用户登录的小案例.在此基础上加入其它逻辑. import java.util.Scanner; /* * 模拟登录,给三次机会,并提示还有几次.如果登录成功,就可以玩猜数字小游戏了. * ...
- Servlet 实现訪问量的统计小案例
今天学习了Servlet的基础知识,学习了一个统计訪问量的小案例,记录一下 package cn.selevet_01; import java.io.IOException; import java ...
- WEB 小案例 -- 网上书城(四)
针对于这个小案例我们今天讲解结账操作,也是有关这个案例的最后一次博文,说实话这个案例的博文写的很糟糕,不知道该如何去表述自己的思路,所以内容有点水,其实说到底还是功力不够. 处理思路 点击结账,发送结 ...
- session的两个小案例
学完了session,写两个小案例加深一下对session的巩固. 1. 用户登陆案例 登陆html页面提交后,将参数带给处理登陆的servlet,该servlet将获得登陆的用户名和密码,并将这些信 ...
- 黑马day14 踢人小案例
本案例介绍: 使用监听器来实现踢人小案例,仅仅有管理员才有踢人的功能. 1.搭建开发环境,导入本案例须要的jar包.以及一个准备好的数据库工具类:提供数据源的方法...当中我已经在数据库中加入了三个用 ...
- JavaWeb_(Struts2框架)Ognl小案例查询帖子
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
随机推荐
- 用Python操作Excel,实现班级成绩的统计
本次是在原来有一定格式的Excel文档中补充成绩. 安装的模块:xlwt . xlrd .xlutils xlrd的模块是只用读取xls文件,不能写文件,同理xlwt,只(新建写)不读已有的xls, ...
- Jmeter接口测试 2=> Jmeter工具的介绍
第一节 接口测试流程 参数化:EXCEl文件参数化.数据库参数化.直接代码中配置.配置文件 预处理请求(前置处理):对请求的参数进行预处理.准备,如加密数据.组织测试数据 发起请求:httpclien ...
- Unity3D热更新之LuaFramework篇[04]--自定义UI监听方法
时隔一个多月我又回来啦! 坚持真的是很难的一件事,其它事情稍忙,就很容易说服自己把写博客的计划给推迟了. 好在终于克服了自己的惰性,今天又开始了. 本篇继续我的Luaframework学习之路. 一. ...
- vscode setting.json (@vue/eslint-config-prettier)
{ "workbench.colorTheme": "Default Light+", // 主题 "terminal.integra ...
- pycharm右键运行unittest、pytest文件
在实际学习过程中,有时候会出现右键运行文件,但没有任何结果的情况.这就是没有使用unittest/pytest 的方式运行. 解决方法: 添加好
- 论文阅读 | Tackling Adversarial Examples in QA via Answer Sentence Selection
核心思想 基于阅读理解中QA系统的样本中可能混有对抗样本的情况,在寻找答案时,首先筛选出可能包含答案的句子,再做进一步推断. 方法 Part 1 given: 段落C query Q 段落切分成句 ...
- mysql innodb索引原理
聚集索引(clustered index) innodb存储引擎表是索引组织表,表中数据按照主键顺序存放.其聚集索引就是按照每张表的主键顺序构造一颗B+树,其叶子结点中存放的就是整张表的行记录数据,这 ...
- Min swaps to sort array
Given an array with distinct numbers, return an integer indicating the minimum number of swap operat ...
- 【Python】【demo实验28】【练习实例】【递归函数练习】
原题: 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁.问第三个人,又说比第2人大两岁.问第2个人,说比第一个人大两岁.最后问第一个人,他说是10岁.请 ...
- tp5支付宝和微信支付
一.生成二维码给用户进行扫码支付 1.先在vendor目录下加入支付宝和微信支付的引用 2.付款处调用 /** * 订单支付接口 * * @api {post} {:url('order/pay')} ...