在数据库里面创建一个student表:
注意在动态项目的lib目录要自己创建
登陆前端页面
登陆功能使用post请求,这样可以使你提交表单数据不会在浏览器地址栏中显示
Login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login01</title>
</head>
<body>
<form action="/request/loginServlet" method="post">
<table border="1" cellspacing="0">
<tr>
<td><label for="id1">用户名:</label></td>
<td> <input id="id1" type="text" name="username" placeholder="请输入用户名"></td>
</tr>
<tr>
<td><label for="id2">密 码:</label></td>
<td> <input id="id2" type="password" name="password" placeholder="请输入密码"></td>
</tr>
<tr>
<!--两种提交方式-->
<!--<td colspan="2" align="center"><input type="submit" value="登陆"></td>-->
<td align="center" colspan="2" > <input type="button" value="登陆按钮" onclick="this.form.submit()"> </td>
</tr>
</table>
</form>
</body>
</html>
Domin包下创建一个User用户类:
package com.xxx.domain;
public class User {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
在dao包下创建UserDao类
package com.xxx.dao;
import com.xxx.Utils.JdbcUtilsDruid;
import com.xxx.domain.User;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class UserDao {
public User login(User user){
User user1 = null;
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
connection = JdbcUtilsDruid.getConnection();
String sql = "select * from student where name = ?and pass = ?";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1,user.getName());
preparedStatement.setString(2,user.getPassword());
resultSet = preparedStatement.executeQuery();
while (resultSet.next()){
user1 = new User();
user1.setName(resultSet.getString("name"));
user1.setPassword(resultSet.getString("pass"));
}
} catch (Exception e) {
e.printStackTrace();
}finally {
//关闭连接
JdbcUtilsDruid.closeAll(resultSet,preparedStatement,connection);
}
return user1;
}
}
在service包下创建UserService类:
public class UserService {
private UserDao userDao = new UserDao();
public User login(User user){
return userDao.login(user);
}
}
在servlet包下创建LoginServlet类
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
// System.out.println("哈哈哈哈"+username+"\t"+password);
User user = new User();
user.setName(username);
user.setPassword(password);
UserService userService = new UserService();
User login = userService.login(user);
if(login!=null){
//System.out.println("成功");
//用键值对存储登陆成功的用户对象
req.setAttribute("user",login);
//跳转到登陆成功的servlet
req.getRequestDispatcher("/successServlet").forward(req,resp);
}else {
//跳转到登陆失败的servlet
req.getRequestDispatcher("/failServlet").forward(req,resp);
//System.out.println("失败");
}
}
}
在servlet包下创建SuccessServlet类
@WebServlet("/successServlet")
public class SuccessServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// resp.setCharacterEncoding("GBK");这种也可以
//设置中文显示
resp.setContentType("text/html;charset=utf-8");
//获取到登陆成功的用户对象
User user = (User)req.getAttribute("user");
System.out.println("用户名:"+user.getName());
System.out.println("密码:"+user.getPassword());
//在网页输出登陆成功用户的姓名
resp.getWriter().print("登陆成功,欢迎"+user.getName()+"同学");
//resp.getWriter().write("登陆成功,欢迎"+username+"同学");对应GBK的那种
}
}
在servlet包下创建FailServlet类
@WebServlet("/failServlet")
public class FailServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//System.out.println("失败了,请重新登陆");
resp.setCharacterEncoding("GBK");
resp.getWriter().write("失败了,请重新登陆");
}
}
JDBC工具类:
使用了阿里的jdbc连接池技术要导入jar包
Jar包,mysql jar包和阿里连接池jar包,和阿里配置文件我都放在百度网盘里
链接:https://pan.baidu.com/s/1vfPPy7Rm6e9hrBLYQiC8gA
提取码:dlwf
public class JdbcUtilsDruid {
private static DataSource ds;//定义连接池对象
static {
Properties properties = new Properties();//创建配置文件对象
InputStream resourceAsStream = JdbcUtilsDruid.class.getClassLoader().getResourceAsStream("druid.properties");
try {
properties.load(resourceAsStream);
//通过工厂创建的方法创建连接池对象,配置文件中连接数据库的信息都在连接池对象里面
ds = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
//获取连接
public static Connection getConnection() throws Exception{
return ds.getConnection();
}
//关闭资源
public static void closeAll(AutoCloseable ... all){
for(AutoCloseable a:all){
if(a!=null){
try {
a.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
配置文件:
配置文件的位置在src下面
文件名及文件类型druid.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/zang?useUnicode=true&characterEncoding=utf8
username=root
password=root
initialSize=5
maxActive=10
maxWait=3000