【问题标题】:Java EE App don't print JSP file like jsp, but like HTMLJava EE App 不像 jsp 那样打印 JSP 文件,而是像 HTML
【发布时间】:2019-02-14 11:21:56
【问题描述】:

我有项目 Maven 网络应用程序。我有一些带有 HTML 代码和 JSP 标记的 JSP 文件。我在本地数据库和一些 servlet 中有一个连接。

问题是当我登录到应用程序时,我想为登录的用户打印一条欢迎消息。 这是应该显示欢迎消息的标签:

<div class="hello-text"><h1>Hello <span>${sessionScope.user_name}</span>. This is yours stats:</h1></div>

当我登录时,我仅有的文字是“你好 ${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();
}

}

为什么我没有消息,例如,您好管理员。这是你的统计数据:? 我总是有你好 ${sessionScope.user_name}。这是你的统计数据:...

【问题讨论】:

标签: java jsp servlets jakarta-ee


【解决方案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/等下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2021-02-01
    • 1970-01-01
    相关资源
    最近更新 更多