一尘不染

如何从servlet发出消息并在jsp中显示

jsp

我正在尝试做一些看起来很小但失败的事情。登录失败但无法登录时,我正在尝试将响应消息发送回jsp。到目前为止,我只能重定向回jsp,但不能在其上显示来自servlet的消息。这是重定向的servlet部分:

                if (count > 0) {
                res.sendRedirect("adminHome.jsp");
            } else {

                res.sendRedirect("index.jsp");
            }

我尝试使用PrintWriter和重定向来打印消息,但失败了,因为我无法在JSP中获取如何接收消息。我还读到我不应该重定向,而应该从servlet转发。我怎样才能做到这一点?请帮助从Servlet转发的代码补丁以及在JSP中接收的代码。谢谢


阅读 379

收藏
2020-06-08

共1个答案

一尘不染

如果您坚持使用重定向而不是转发,则有两种选择:

  1. 将消息作为请求参数传递
    String message = "hello";
    

    res.sendRedirect(“adminHome.jsp?message=” + URLEncoder.encode(message, “UTF-8”));

这样就可以在JSP中将其显示如下

    <p>Message: ${param.message}</p>

它也仅在浏览器地址栏中可见,并且您不能以这种方式传递非标准Java对象。

  1. 将其存储在会话中
    String message = "hello";
    

    req.getSession().setAttribute(“message”, message);
    res.sendRedirect(“adminHome.jsp”);

这样您就可以在JSP中显示( 和删除 )它,如下所示:

    <p>Message: ${message}</p>
<c:remove var="message" scope="session" />

删除很重要,否则整个会话都将删除。


但是,如果您愿意使用转发而不是重定向,那么它会更优雅:

String message = "hello";
req.setAttribute("message", message);
req.getRequestDispatcher("/adminHome.jsp").forward(req, res);

并在JSP中显示如下

    <p>Message: ${message}</p>
2020-06-08