servlet实现用户登陆
本文实现从前端页面-》servlet-》业务逻辑-》数据库全流程打通,利用用户登陆,最简单的实现逻辑,了解,掌握servlet技术。
idea2.3创建web项目并配置本地tomcat地址:https://blog.youkuaiyun.com/CSU174712009/article/details/113816885
本文整体目录结构:

1.导入项目所需要的jar包
包括:javax,mysql,junit

2.数据库创建和测试数据
CREATE DATABASE `test` DEFAULT CHARSET=utf8mb4;
USE test;
CREATE TABLE `user`(
id INT(12) NOT NULL,
`name` VARCHAR(20) NOT NULL,
pwd VARCHAR(20) NOT NULL,
PRIMARY KEY(id)
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
INSERT INTO `user` VALUES
(1,'李四',123456);
3.pojo也就是过去的bean
package com.ycw.express.section2.pojo;
public class User {
private int id;
private String uname;
private String password;
public void setId(int id) {
this.id = id;
}
public void setUname(String uname) {
this.uname = uname;
}
public void setPassword(String password) {
this.password = password;
}
public String getUname() {
return uname;
}
public String getPassword() {
return password;
}
}
4.jdbc连接数据库
这里我们编写了一个数据库连接的工具代码JDBCUtil代码如下:
package com.ycw.express.section2.Util;
import java.sql.*;
public class JDBCUtil {
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8";
String user = "root";
String password = "qq783339536";
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,user,password);
}
/**
* 关闭数据库连接资源
* @param conn
* @param pstate
* @param rs
*/
public static void close(Connection conn, PreparedStatement pstate, ResultSet rs){
try {
if (rs != null){
rs.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
if (pstate != null){
pstate.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
if (conn != null){
conn.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
数据库连接成功后
5.编写jdbc需要的sql,也就是dao层
package com.ycw.express.section2.dao;
import com.ycw.express.section2.Util.JDBCUtil;
import com.ycw.express.section2.pojo.User;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserLoginDao {
JDBCUtil jdbcUtil = new JDBCUtil();
User user = new User();
//通过用户名+密码都正确则返回该user对象
public User findByUAndP(String username, String password) throws SQLException {
Connection conn = jdbcUtil.getConnection();
String sql = "select * from users where uname = ? and upassword = ?";
PreparedStatement pstate = conn.prepareStatement(sql);
pstate.setString(1,username);
pstate.setString(2,password);
ResultSet rs = pstate.executeQuery();
while (rs.next()){
user.setId(rs.getInt("id"));
user.setUname(rs.getString("uname"));
user.setPassword(rs.getString("upassword"));
return user;
}
jdbcUtil.close(conn,pstate,rs);
return null;
}
}
测试是否成功。
通过测试会对象地址,不存在则会返回null。
package com.ycw.express.section2.dao;
import org.junit.Test;
import java.sql.SQLException;
public class UserLoginDaoTest {
@Test
public void findByUAndPTest() throws SQLException {
UserLoginDao userLoginDao = new UserLoginDao();
System.out.println(userLoginDao.findByUAndP("admin", "1"));
}
}
6.创建servelt实现业务逻辑判断
package com.ycw.express.section2.servlet;
import com.ycw.express.section2.dao.UserLoginDao;
import com.ycw.express.section2.pojo.User;
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 UserLoginServlet 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 {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println("username = " + username + " password = " + password);
UserLoginDao userLogin = new UserLoginDao();
User user = new User();
try {
user = userLogin.findByUAndP(username,password);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
if (user != null){
// req.getRequestDispatcher("/success.html").forward(req,resp);
resp.sendRedirect("/success.html");
}else {
// req.getRequestDispatcher("/error.html").forward(req,resp);
resp.sendRedirect("/error.html");
}
}
}
至此后台的代码已经完成。
7.创建html页面
设计了3个页面,登陆login、登陆成功success、登陆失败error
login
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
<style>
h1{
text-align: center;
margin: 100px auto;
}
.login{
text-align: center;
width: 100%;
margin: 40px auto;
/*background-color: orangered;*/
}
</style>
</head>
<body>
<h1>用户登录</h1>
<div class = "login">
<form action="/login" method="post">
用户:<input type="text" name="username"/><br/><br/>
密码:<input type="password" name="password"/><br/><br/>
<input type="submit" value="提交"/> <input type="reset" value="重置"/>
</form>
</div>
</body>
</html>
其中,表单登陆是提交到的路径是action="/login" ,提交方式为method="post" 。
成功和失败都是初始的html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>登录成功</h1>
<!-- <h1>登录失败</h1> -->
</body>
</html>
8.添加前后端映射关系
在我们创建的web项目中自动生成的web.xml文件中添加前后端的映射关系
其中前端我们是通过表单<form action="/login" method="post">提交到login中;
而我们后端servelt接收请求的doGet和doPost是在UserLoginServlet中。
所以在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_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>bb</servlet-name>
<servlet-class>
com.ycw.express.section2.servlet.UserLoginServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>bb</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
其中<servlet-class>表示配置了后端的UserLoginServlet,<url-pattern>配置了前端的/login,<servlet-name>bb</servlet-name>表示前后端的一个映射联系,其中bb名字可以随意取,保证在web.xml中唯一即可。在前端发送登陆请求后,会通过该文件的映射关系找到对应的servlet进行处理。
至此整个登陆的业务逻辑代码已经实现。
本文详细介绍了如何从创建Web项目开始,通过Servlet实现用户登录功能的完整流程,包括数据库连接、DAO层设计、Servlet业务逻辑以及前端HTML页面的创建。通过这个示例,读者可以学习和理解Servlet的基础应用。
480

被折叠的 条评论
为什么被折叠?



