前言:学习了jdbc和servlet的使用,我们可以做一个简单的账户密码的登陆项目,实现的效果是在网页端输入账号密码然后提交给servlet,然后由servlet通过jdbc把接受来的数据传递给数据库进行验证,传递回结果进行判断!
-------实现步骤--------
1、创建数据库和表
create database day09;
use day09;
create table user(
id int primary key auto_increment,
username varchar(20),
password varchar(20),
email varchar(20),
name varchar(20),
sex varchar(10),
birthday date,
hobby varchar(50)
);
insert into user values (null,'tom','123','[email protected]','tom','1','1988-01-01',null);
2、创建项目
3、创建网页页面。注意:给用户名和密码添加name属性,修改表单的action属性,添加method属性
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>WEB01</title>
</head>
<body>
<form action="http://localhost:8080/Day0903/login" method="post">
<input type="text" id="username" placeholder="请输入用户名" name="username"> <br>
<input type="password" id="inputPassword3" placeholder="请输入密码" name="password"> <br>
<input type="submit" width="100" value="登录" name="submit"> <br>
</form>
<hr>
</body>
</html>
4、导入jar包
5、导入工具类和配置文件
6、创建servlet(LoginServlet: 路径 /login),接受用户名和密码,调用service层(UserService)完成登录操作,提示信息
7、UserService-->login(username,password)-->调用dao
8、dao:通过用户名和密码查询数据库
------代码实现-----
配置文件:
<servlet>
<description></description>
<display-name>LoginServlet</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.fly.web.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>ShowServlet</display-name>
<servlet-name>ShowServlet</servlet-name>
<servlet-class>com.fly.web.servlet.ShowServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ShowServlet</servlet-name>
<url-pattern>/show</url-pattern>
</servlet-mapping>
java代码层:
UserDao:
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import com.fly.domain.User;
import com.fly.utils.DataSourceUtils;
public class UserDao {
public User getUserByUsernameAndPwd(String username, String password) throws SQLException {
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "select * from user where username = ? and password = ?";
User user = qr.query(sql, new BeanHandler<>(User.class), username, password);
return user;
}
}
User:
public class User {
/*id int primary key auto_increment,
username varchar(20),
password varchar(20),
email varchar(20),
name varchar(20),
sex varchar(10),
birthday date,
hobby varchar(50)*/
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
}
UserService:
import java.sql.SQLException;
import com.fly.dao.UserDao;
import com.fly.domain.User;
public class UserService {
public User login(String username, String password) throws SQLException {
// 调用dao
UserDao dao = new UserDao();
return dao.getUserByUsernameAndPwd(username, password);
}
}
DataSourceUtils:
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class DataSourceUtils {
private static ComboPooledDataSource ds=new ComboPooledDataSource();
/**
* 获取数据源
* @return 连接池
*/
public static DataSource getDataSource(){
return ds;
}
/**
* 获取连接
* @return 连接
* @throws SQLException
*/
public static Connection getConnection() throws SQLException{
return ds.getConnection();
}
/**
* 释放资源
*
* @param conn
* 连接
* @param st
* 语句执行者
* @param rs
* 结果集
*/
public static void closeResource(Connection conn, Statement st, ResultSet rs) {
closeResultSet(rs);
closeStatement(st);
closeConn(conn);
}
/**
* 释放连接
*
* @param conn
* 连接
*/
public static void closeConn(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
}
/**
* 释放语句执行者
*
* @param st
* 语句执行者
*/
public static void closeStatement(Statement st) {
if (st != null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
st = null;
}
}
/**
* 释放结果集
*
* @param rs
* 结果集
*/
public static void closeResultSet(ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null;
}
}
}
LoginServlet:
import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fly.domain.User;
import com.fly.service.UserService;
public class LoginServlet extends HttpServlet {
@Override
public void init() throws ServletException {
// 获取全局管理者
ServletContext context = getServletContext();
// 初始化次数
context.setAttribute("count", 0);
System.out.println("初始化次数成功");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 0.设置编码
response.setContentType("text/html;charset=utf-8");
// 1.接受用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
// 2.调用userservice 里的login(username,password) 返回值:User user
User user = null;
try {
user = new UserService().login(username, password);
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("网络异常,请稍后再试!");
}
// 3.判断user是否为空
if (user == null) {
// 3.1若为空 写"用户名和密码不匹配"
response.getWriter().print("用户名和密码不匹配,3秒之后跳转");
// 案例2-定时跳转
response.setHeader("refresh", "3;url=/Day0903/index.html");
} else {
// 3.2若不为空 写"xxx:欢迎回来"
response.getWriter().print(user.getUsername() + ":欢迎回来");
// 4获取全局管理者
ServletContext context = this.getServletContext();
// 5获取总次数
Integer cishu = (Integer) context.getAttribute("count");
// 6.将次数+1
cishu++;
// 7.将次数再次放入域对象中
context.setAttribute("count", cishu);
}
}
}
ShowServlet:
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ShowServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 0.设置编码
response.setContentType("text/html;charset=utf-8");
// 1.获取全局管理者
ServletContext context = this.getServletContext();
// 2.获取登录的次数
Integer cishu = (Integer) context.getAttribute("count");
// 3.在页面上打印总次数
response.getWriter().print("登录成功的总次数为:" + cishu);
}
}
运行截图:
正确的登陆:
错误的登陆: