Java EE App不像jsp那样打印JSP文件,但是像HTML一样

问题描述 投票:0回答:1

我有项目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}。这是你的统计数据:......

java jsp servlets java-ee
1个回答
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 /等下。

© www.soinside.com 2019 - 2024. All rights reserved.