以下为部分代码,也不知道该传些什么,所以用简单方法怎么获取登录的id号啊
评论类
package mywebtest.controller;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.*;//WebServlet地址
import jakarta.servlet.http.*;//继承HttpServlet
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@WebServlet("/details")
public class DetailsServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String JDBC_DRIVER="com.mysql.jdbc.Driver";
private static final String DB_URL="jdbc:mysql://localhost:3306/we?useUnicode=true&characterEncoding=utf-8&sslMode=DISABLED&serverTimezone=UTC";
private static final String DB_USER="root";
private static final String DB_PASSWORD="666666";
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//req.getParameter()将details.html的参数获取出来
String content=req.getParameter("content");//获取传入内容的参数
//不行。。。user user = (user) req.getSession().getAttribute("user");
//Integer id= user.getId();//获取数据库用户的id
//String username =user.getUsername();//获取数据库用户的账号名字
//也不行。。。Principal principal = req.getUserPrincipal();
/*getUserPrincipal()返回一个java.security.Principal对象,
该对象包含当前授权用户的名称使用request.getUserPrincipal().getName()得到用户名
没有通过认证就没有返回值,是用户登录后才有值的,通过了JAAS认证,也就是登录*/
// if (principal != null) {
//userId = principal.getName();
// }
//设置字符集
resp.setCharacterEncoding("UTF-8");
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html; charset=UTF-8");
if(content==null){//如果输入内容为空,则返回评论输入页面
try{
req.getRequestDispatcher("/details.html").forward(req,resp);
}catch (ServletException e) {
e.printStackTrace();
}
}
// 数据库操作
Connection conn=null;
PreparedStatement pstmt=null;
try{
try{
Class.forName(JDBC_DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
conn= DriverManager.getConnection(DB_URL,DB_USER,DB_PASSWORD);
//准备SQL语句****非空字段赋初始值
String sql="INSERT INTO user(id,content,username)VALUES(?,?,?)";
try{
pstmt=conn.prepareStatement(sql);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
pstmt.setString(1, id);
pstmt.setString(2,content);
pstmt.setString(3,username);
int affectedRows = pstmt.executeUpdate();
//pstmt.executeUpdate(); 是一个 Java 代码行,它的作用是执行一个 SQL 数据库更新操作,并返回【更新的】行数。
if (affectedRows > 0) {
resp.getWriter().println("评论成功!");
} else {
resp.getWriter().println("评论为空,请重新评论。");
}
} catch (SQLException e) {
e.printStackTrace();
resp.getWriter().println("发生错误:" + e.getMessage());
} finally {
// 关闭资源
try {
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) { /* ignored */ }
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) { /* ignored */ }
}
}
}
登录类
package mywebtest.controller;
import mywebtest.service.UserService;
import mywebtest.service.impl.UserServiceImpl;
import mywebtest.utils.LoginResponse;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
//登录
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private UserService userService = new UserServiceImpl();
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取login.index里的登录参数请求参数
String username = request.getParameter("name");
String password = request.getParameter("password");
System.out.println(username + " " + password);
// 处理登录逻辑
LoginResponse loginResponse = userService.login(username, password);
//Response对请求的参数做出响应
//设置字符集
/* response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");*/
if(loginResponse.getCode() == 400){
request.setAttribute("usernameError", "用户名错误");
System.out.println("用户名错误400");
request.getRequestDispatcher("/login.jsp").forward(request, response);
} else if(loginResponse.getCode() == 401){
request.setAttribute("passwordError", "密码错误");
System.out.println("密码错误401");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}else if (loginResponse.getCode() == 200) {
request.getRequestDispatcher("/index.html").forward(request, response);
System.out.println("登录成功200");
}
}
}
UserServiceImpl.java
package mywebtest.service.impl;
import mywebtest.dao.UserDao;
import mywebtest.dao.impl.UserDaoImpl;
import mywebtest.pojo.user;
import mywebtest.service.UserService;
import mywebtest.utils.LoginResponse;
public class UserServiceImpl implements UserService {
private UserDao userDao = new UserDaoImpl();
@Override
public LoginResponse login(String username, String password) {
//查询数据库
user user = this.userDao.findUserByUsername(username);
//统一响应结果
LoginResponse loginResponse = new LoginResponse();
//查询结果为空
if (user == null) {
loginResponse.setCode(400);
}else{
//查询结果不为空判断密码
//判断密码正确
if (user.getPassword().equals(password)){
loginResponse.setCode(200);
loginResponse.setUser(user);
}else{
//密码错误
loginResponse.setCode(401);
}
}
return loginResponse;
}
}
UserService.java
package mywebtest.service;
import mywebtest.utils.LoginResponse;
public interface UserService {//interface接口
LoginResponse login(String username, String password);
UserDao.java
package mywebtest.dao.impl;
import mywebtest.dao.UserDao;
import mywebtest.pojo.user;
import mywebtest.utils.JdbcUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDaoImpl implements UserDao {//创建UserDao类,用于添加,查找,修改和删除用户
@Override
public user findUserByUsername(String username) {//通过username查找用户
try {
Connection connection = JdbcUtil.getConnection();
//Connection connection = DruidDataSoureceUtil.getConnection();
String sql = "select * from user where username = " + "'" + username + "'";
PreparedStatement satement = null;//PreparedStatement 是 JDBC 中的一个接口,用于执行预编译的 SQL 语句。
satement = connection.prepareStatement(sql);
System.out.println(sql);
ResultSet resultSet = null;
resultSet = satement.executeQuery();
if (resultSet.next()) {
String name = resultSet.getString("username");
String password = resultSet.getString("password");
user user = new user();
user.setUsername(name);
user.setPassword(password);
return user;
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}
}
😭