我有项目maven web应用程序。我有一些带有HTML代码和JSP标记的JSP文件。我在本地数据库和一些servlet中有一个连接。
问题是,当我登录到应用程序时,我想为已登录的用户打印欢迎消息。这是应显示欢迎消息的标记:
<div class="hello-text"><h1>Hello <span>${sessionScope.user_name}</span>. This is yours stats:</h1></div>
当我登录时,我唯一的文字是“Hello $ {sessionScope.user_name}。这是你的统计数据:
这是我登录的servlet代码:
@WebServlet("/login")
public class UserLoginServlet extends HttpServlet {
private static final long serialVersionUID = 2717450811223035557L;
private UserRepository userRepository = new UserRepositoryBean();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
String login = req.getParameter("login");
String password = req.getParameter("password");
PrintWriter writer = resp.getWriter();
if (login == null | login.isEmpty() | password == null | password.isEmpty()) {
writer.write("ERROR");
return;
} else {
if (userRepository.validateUser(login, password)) {
HttpSession session = req.getSession();
session.setAttribute("user_name", login);
resp.sendRedirect("profile.jsp");
} else {
req.setAttribute("error", "Invalid login or password. Try again.");
req.getRequestDispatcher("login.jsp").forward(req, resp);
}
}
writer.close();
}
}
为什么我没有消息,例如Hello Admin。这是你的统计数据:?我总是有Hello $ {sessionScope.user_name}。这是你的统计数据:......
sendRedirect不应该被某个页面的其他输出混合。
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String login = req.getParameter("login");
String password = req.getParameter("password");
if (login.isEmpty() || password.isEmpty()) {
resp.setContentType("text/html");
PrintWriter writer = resp.getWriter();
writer.write("ERROR");
return;
}
if (userRepository.validateUser(login, password)) {
HttpSession session = req.getSession();
session.setAttribute("user_name", login);
resp.sendRedirect("profile.jsp");
} else {
req.setAttribute("error", "Invalid login or password. Try again.");
req.getRequestDispatcher("login.jsp").forward(req, resp);
}
}
第一个if
可以通过验证来完成 - 因为空输入经常发生 - 通过一个很好的错误消息重新发布到已经完成输入保存的相同表单。
如果JSP以HTML格式出现,请确保它具有有效的servlet映射。此外,JSP最好不要放在公共目录中,但也可以放在WEB-INF / jsps /等下。