案例需求:
在网站的首页上,登录的链接,点击登录的链接,可以跳转到登录的页面.在登录的页面中输入用户名和密码点击登录的案例.完成登录的功能。
需求分析:
实现步骤
-
创建数据库表
-
在WEB-INF下创建一个登录页面login.html(action提交的路径为action = “ / 模块的名称 / Servlet的路径 ”,再创建form表单)
-
创建WEB项目
- 添加必要的jar(在web文件夹下的WEB-INF创建一个lib的文件夹,存放那三个jar包),配置文件(在src文件夹下存放C3P0连接池、在src文件夹下的创建一个utils包,用于存放C3P0的工具类)
- 创建User实体类(跟数据库中相对应)
- 创建自己的包(存放servlet)
-
编写页面
-
编写服务器Servlet
方法: String getParameter("表单的name属性值") 返回值String,表单填写内容
创建数据库表
-- 创建数据库web02
CREATE DATABASE web02;
-- 使用数据库web02
USE web02;
-- 创建表user 字段:主键,用户名,密码
CREATE TABLE USER (
-- 主键
uid INT PRIMARY KEY AUTO_INCREMENT,
-- 用户名
username VARCHAR(50),
-- 密码
PASSWORD VARCHAR(50)
);
-- user表插入初始化数据
INSERT INTO USER VALUES(NULL,'tom','123'),(NULL,'jerry','456');
-- 登录使用用户名和密码作为条件查询
SELECT * FROM USER WHERE username='tom' AND PASSWORD = '123'; -- 登录成功
SELECT * FROM USER WHERE username='tom' AND PASSWORD = '456'; -- 登录失败
/*
dbutils 使用哪个结果集
BeanHandler 查询结果一个JavaBean
BeanListHandler 查询结果集是多个JavaBean,存储List集合
ScalarHandler 单项值查询
ColumnListHandler 查询一个列数据存储集合List<Object>
*/
创建User实体类(javabean)
package com.ccc.domain;
public class User {
private int uid;
private String username;
private String password;
@Override
public String toString() {
return "User{" +
"uid=" + uid +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
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;
}
}
添加c3p0数据连接池,并修改jdbc路径(web02)。添加c3p0工具类
在web.xml文件中配置路径
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.ccc.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/mmm</url-pattern>
</servlet-mapping>
</web-app>
编写页面login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录案例</title>
</head>
<body>
<!--
action提交服务器的路径
/web项目某块名/servlet访问的虚拟路径(浏览器输入的地址)
-->
<form method="post" action="/web02_login/mmm">
用户名:<input type="text" name="username" placeholder="请输入用户名"/><br />
密码:<input type="password" name="password" placeholder="请输入密码"/><br />
<input type="submit" value="登录"/>
</form>
</body>
</html>
编写服务器Servlet
package com.ccc.servlet;
import com.ccc.domain.User;
import com.ccc.utils.C3P0UtilsXML;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取表单提交的数据
String username = request.getParameter("username");
String password = request.getParameter("password");
//此处可以加一条输出语句,在控制台输出,用于前期检验是否能获取到username和password
//System.out.println(username + "\t" + password);
// 作为数据表查询条件
//创建dbutils工具的 核心类对象 QueryRunner
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
//拼写登录查询的SQL
String sql = "select * from user where username=? and password=?";
User user = null;
try {
//执行查询语句,获取查询后的结果集BeanHandler
user = qr.query(sql,new BeanHandler<User>(User.class),username,password);
}catch (Exception ex){ex.printStackTrace();}
//查询后的结果集进行判断
//条件不匹配,查询不到任何数据,返回null
if(user==null){
//查询不到数据,登录失败
response.getWriter().print("login error");
}else {
//查询数据匹配,登录成功
response.getWriter().print("login success");
}
}
}
当搭建完成之后,运行TomCat,浏览器跳转会跳转到一个页面。此时在地址栏最后面加上虚拟前面设置的地址mmm,就能出现登录的界面。