问题描述
我有项目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}。 这是您的统计信息:...
1楼
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 /下。