<% Cliente currentUser = (Cliente) session.getAttribute("username"); %>
<h2> Username <%= currentUser.getUsername() %></h2>
我想在登录后获取用户的用户名。如何解决或修复 servlet 登录问题?
这是servlet登录,是什么问题让我登录后不保存用户名?
@WebServlet("/Login")
public class Login extends HttpServlet {
private static final long serialVersionUID = 1L;
public Login() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String pass = request.getParameter("password");
try {
Utente utente = (Utente) Query.TrovaCliente(username, pass);
if (utente == null) {
request.getRequestDispatcher("loginError.jsp").forward(request, response);
} else {
HttpSession session = request.getSession();
synchronized (session) {
session.setAttribute("utente", utente);
}
request.getRequestDispatcher("index.jsp").forward(request, response);
}
} catch (SQLException e) {
request.getRequestDispatcher("loginError.jsp").forward(request, response);
e.printStackTrace();
}
}
}
最佳答案
您确定可以将 session 属性“username”强制转换为Cliente
吗?
<% Cliente currentUser = (Cliente) session.getAttribute("username"); %>
<h2> Username <%= currentUser.getUsername() %></h2> // <-- here you get a NullPointer
这意味着 currentUser
为 null
并且您无法对其调用任何函数。
也许您可以先打印出 session 中实际拥有的内容
<h2> session attribute: <%=session.getAttribute("username"); %> </h2>
确保 session 实际上包含您正在查找的属性,并且可以将其转换为 Cliente
对象。
编辑
据我所知,您在 session 中使用键“utente”
设置了整个对象utente
(我猜是您的用户对象)。属性“username”
仍然不存在。
你能做的是
<% Utente currentUser = (Utente ) session.getAttribute("utente"); %>
<h2> Username <%= currentUser.getUsername() %></h2>
如果Utente
类有一个getUsername
方法。
关于java - 登录后Jsp和servlet与用户的getAttribute错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52332563/