6.3打卡
第一阶段全部代码
• 所花时间:2
• 代码行数:479
• 博客容量:1
• 代码如下:
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.*;
@WebServlet(name = "LoginServlet", value = "/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
String userId = request.getParameter("userId");
String password = request.getParameter("password");
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/party", "root", "1234");
String sql = "SELECT * FROM user WHERE user_id = ? AND password = ?";
PreparedStatement statement = conn.prepareStatement(sql);
statement.setInt(1, Integer.parseInt(userId));
statement.setString(2, password);
ResultSet resultSet = statement.executeQuery();
if (resultSet.next()) {
// 用户验证成功,将用户ID写入session
HttpSession session = request.getSession();
session.setAttribute("userId", userId);
// 设置cookie保存用户名和密码,以便下次自动登录
// 注意:在实际应用中,自动登录需要更严格的安全措施
response.addCookie(new Cookie("userId", userId));
response.addCookie(new Cookie("password", password));
// 重定向到动物识别页面
response.sendRedirect("animal.jsp");
} else {
// 用户验证失败,返回登录界面,并给出错误提示
response.sendRedirect("index.jsp?loginError=true");
}
// 关闭连接
resultSet.close();
statement.close();
conn.close();
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
// 处理异常情况
response.sendRedirect("index.jsp?loginError=true");
}
}
}
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.MultipartConfig;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.*;
import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
@WebServlet(name = "PublishPostServlet", value = "/PublishPostServlet")
@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 2 MB
maxFileSize = 1024 * 1024 * 10, // 10 MB
maxRequestSize = 1024 * 1024 * 50) // 50 MB
public class PublishPostServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
// 获取表单数据
String title = request.getParameter("title");
String content = request.getParameter("content");
Part filePart = request.getPart("file");
if (filePart == null) {
// 如果没有上传图片,则返回发布失败的提示
PrintWriter out = response.getWriter();
out.println("<script type=\"text/javascript\">");
out.println("alert('帖子发布失败,请选择上传图片!');");
out.println("window.location.href='animal.jsp';");
out.println("</script>");
return;
}
// 获取上传文件名和文件输入流
String fileName = filePart.getSubmittedFileName();
InputStream fileContent = filePart.getInputStream();
// 获取当前日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentDate = sdf.format(new Date());
HttpSession session = request.getSession();
String userIdStr = (String) session.getAttribute("userId");
int userId = Integer.parseInt(userIdStr);
// 连接数据库并插入数据
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/party?useUnicode=true&characterEncoding=UTF-8", "root", "1234");
// 准备插入数据的 SQL 语句
String sql = "INSERT INTO post (title, content, image, user_id, publish_date, likes) VALUES (?, ?, ?, ?, ?, ?)";
PreparedStatement statement = conn.prepareStatement(sql);
// 将数据填充到 SQL 语句中
statement.setString(1, title);
statement.setString(2, content);
statement.setBlob(3, fileContent); // 设置图片数据
statement.setInt(4, userId); // 假设用户ID为1000
statement.setString(5, currentDate);
statement.setInt(6, 0); // 默认点赞数为0
// 执行 SQL 语句
int rowsAffected = statement.executeUpdate();
// 关闭连接
conn.close();
// 根据执行结果返回相应的提示信息
if (rowsAffected > 0) {
// 发布成功时通过弹窗提示
PrintWriter out = response.getWriter();
out.println("<script type=\"text/javascript\">");
out.println("alert('帖子发布成功!');");
out.println("window.location.href='animal.jsp';"); // 发布成功后返回到动物识别页面
out.println("</script>");
} else {
// 发布失败时通过弹窗提示
PrintWriter out = response.getWriter();
out.println("<script type=\"text/javascript\">");
out.println("alert('帖子发布失败,请稍后重试!');");
out.println("window.location.href='animal.jsp';"); // 发布失败后返回到动物识别页面
out.println("</script>");
}
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
// 发布失败时通过弹窗提示
PrintWriter out = response.getWriter();
out.println("<script type=\"text/javascript\">");
out.println("alert('帖子发布失败,请稍后重试!');");
out.println("window.location.href='animal.jsp';"); // 发布失败后返回到动物识别页面
out.println("</script>");
}
}
}
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.MultipartConfig;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import jakarta.servlet.http.Part;
@WebServlet(name = "RegisterServlet", value = "/RegisterServlet")
@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 2 MB
maxFileSize = 1024 * 1024 * 10, // 10 MB
maxRequestSize = 1024 * 1024 * 50) // 50 MB
public class RegisterServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
String introduction = request.getParameter("introduction");
Part avatarPart = request.getPart("avatar");
InputStream avatarStream = null;
// 获取数据库连接
try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/party", "root", "1234")) {
// 插入用户信息
String insertQuery = "INSERT INTO user (username, password, avatar, introduction) VALUES (?, ?, ?, ?)";
try (PreparedStatement statement = connection.prepareStatement(insertQuery, PreparedStatement.RETURN_GENERATED_KEYS)) {
statement.setString(1, username);
statement.setString(2, password);
statement.setString(4, introduction);
// 设置头像参数
if (avatarPart != null && avatarPart.getSize() > 0) {
avatarStream = avatarPart.getInputStream();
statement.setBlob(3, avatarStream);
} else {
statement.setNull(3, java.sql.Types.BLOB);
}
int rowsAffected = statement.executeUpdate();
if (rowsAffected > 0) {
// 注册成功
// 获取生成的用户 ID
try (ResultSet generatedKeys = statement.getGeneratedKeys()) {
if (generatedKeys.next()) {
int userId = generatedKeys.getInt(1);
// 注册成功后将用户ID保存到 session 中
HttpSession session = request.getSession();
session.setAttribute("userId", userId);
// 弹窗提示用户ID
PrintWriter out = response.getWriter();
out.println("<script type=\"text/javascript\">");
out.println("alert('注册成功,您的用户ID是:" + userId + "');");
out.println("window.location.href='animal.jsp';");
out.println("</script>");
return;
}
}
}
}
} catch (SQLException e) {
// 注册失败
e.printStackTrace();
} finally {
if (avatarStream != null) {
avatarStream.close();
}
}
// 注册失败后的处理
PrintWriter out = response.getWriter();
out.println("<script type=\"text/javascript\">");
out.println("alert('注册失败,请稍后重试!');");
out.println("window.location.href='register.jsp';");
out.println("</script>");
}
}
浙公网安备 33010602011771号