本文实现从前端页面-》servlet-》业务逻辑-》数据库全流程打通,利用用户登陆,最简单的实现逻辑,了解,掌握servlet技术。
idea2.3创建web项目并配置本地tomcat地址:https://blog.csdn.net/CSU174712009/article/details/113816885
本文整体目录结构:
包括:javax,mysql,junit
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);
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;
}
}
这里我们编写了一个数据库连接的工具代码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();
}
}
}
数据库连接成功后
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"));
}
}
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");
}
}
}
至此后台的代码已经完成。
设计了3个页面,登陆login、登陆成功success、登陆失败error
login
用户登录
用户登录
其中,表单登陆是提交到的路径是action="/login" ,提交方式为method="post" 。
成功和失败都是初始的html页面
Title
登录成功
在我们创建的web项目中自动生成的web.xml文件中添加前后端的映射关系
其中前端我们是通过表单