JAVA需求:运用servlet实现用户的登录校验案例
项目结构如下:
一.准备工作
jar包 : mysql.jar c3p0.jar (web,jar复制的时候放到WEB-INF/lib)
配置文件: c3p0-config.xml (src下) web.xml
包结构 : com.itheima.web com.itheima.service com.itheima.dao com.itheima.utils
工具类 : C3P0Utils
二.编写Dao
1.创建UserDao接口 ,提供一个抽象方法 loginDao(String username, String password);
2.编写UserDaoImpl 实现类,重写loginDao的方法
具体步骤:
1)获取连接对象
2)创建语句执行对象,预编译sql
3)给sql传递参数
4)执行sql , executeQuery() ==>得到结果集 ResultSet
5)定义count=0;
6)循环遍历ResultSet , 累加count
7)返回count
UserDao接口代码:
package com.it.dao;
import java.sql.SQLException;
public interface UserDao {
public int loginDao(String name,String password) throws SQLException;
}
UserDaoImpl实现类代码:
package com.it.dao;
import com.it.utils.C3P0Utils;
import org.junit.Test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDaoImpl implements UserDao {
@Override
public int loginDao(String username, String password) throws SQLException {
Connection connection = C3P0Utils.getConnection();
PreparedStatement pst = connection.prepareStatement("select * from USER WHERE username = ? AND password = ?");
pst.setString(1,username);
pst.setString(2,password);
ResultSet rs = pst.executeQuery();
int count = 0;
while (rs.next()){
count++;
}
return count;
}
/*
@Test
public void test() throws SQLException {
int count = loginDao("zhangsan","123");
System.out.println(count);
}
*/
}
三.编写Service
1.创建UserService接口 ,提供一个抽象方法 boolean loginService(String username, String password);
2.编写UserServiceImpl 实现类,重写loginDao的方法
具体步骤:
1)创建UserDaoImpl实现类对象
2)调用UserDaoImpl中的loginDao ==> 返回 int count
3)判断count 如果大于0 ,return true ,如果 <=0 返回false
UserService接口代码:
package com.it.service;
import java.sql.SQLException;
public interface UserService {
public boolean loginService(String username,String password) throws SQLException;
}
UserServiceImpl实现类代码:
package com.it.service;
import com.it.dao.UserDao;
import com.it.dao.UserDaoImpl;
import java.sql.SQLException;
public class UserServiceImpl implements UserService {
@Override
public boolean loginService(String username, String password) throws SQLException {
UserDao dao = new UserDaoImpl();
int count = dao.loginDao(username, password);
return count > 0;
}
}
四.编写Web
1.LoginServlet extends HttpServlet ; 重写doGet (调用doPost) 和 doPost
2.内容都写在doPost方法中
具体步骤:
1)获取参数username
2)获取参数password
3)创建UserServiceImpl对象
4)调用serviceLogin(username,password); ===> boolean
5)判断boolean 如果是true, 给浏览器打印登录成功,如果boolean是false,给浏览器打印 登录失败.
6)配置web.xml
LoginServlet 类代码:
package com.it.web;
import com.it.service.UserService;
import com.it.service.UserServiceImpl;
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 {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html; Charset=utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
UserService userService = new UserServiceImpl();
boolean flag = userService.loginService(username, password);
if(flag){
resp.getWriter().print("登录成功!");
}else{
resp.getWriter().print("登录失败!");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
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>LoginServlet</servlet-name>
<servlet-class>com.it.web.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
</web-app>
C3P0Utils类代码:
package com.it.utils;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 1.定义一个成员对象,作为静态连接池对象
* 2.提供一个静态的方法获取连接池对象
* 3.提供一个静态的方法获取Connection连接对象
* 4.提供一个静态的方法关闭资源
*/
public class C3P0Utils {
private static final DataSource dataSourse = new ComboPooledDataSource();
public static DataSource getDataSourse(){
return dataSourse;
}
public static Connection getConnection(){
try {
return dataSourse.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static void closeResource(Connection connection, Statement statement,ResultSet resultSet){
if(resultSet != null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(statement != null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection != null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
c3p0-config.xml配置文件 :
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/servlet_login_demo</property>
<property name="user">root</property>
<property name="password">root</property>
</default-config>
</c3p0-config>
页面:Login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<form action="" method="post">
用户名: <input type="text" name="username"/><br/>
密 码: <input type="password" name="password"/><br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>
数据库:
CREATE DATABASE servlet_login_demo DEFAULT CHARSET ='utf8'
USE servlet_login_demo;
CREATE TABLE `user`(
`uid` INT PRIMARY KEY AUTO_INCREMENT,
`username` VARCHAR(32),
`password` VARCHAR(32)
)
INSERT INTO USER VALUES (1,'zhangsan','123');
SELECT * FROM USER
页面访问:
账号输入:zhangsan
密码输入:123