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

ken*_*ken 10 jsp servlets

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

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

                res.sendRedirect("index.jsp");
            }
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 34

如果你坚持使用重定向而不是前进,那么你有2个选择:

  1. 将消息作为请求参数传递

    String message = "hello";
    res.sendRedirect("adminHome.jsp?message=" + URLEncoder.encode(message, "UTF-8"));
    
    Run Code Online (Sandbox Code Playgroud)

    以便您可以在JSP中显示它,如下所示

    <p>Message: ${param.message}</p>
    
    Run Code Online (Sandbox Code Playgroud)

    它只在浏览器地址栏中可见,并且您无法以这种方式传递非标准Java对象.

  2. 将其存储在会话中

    String message = "hello";
    req.getSession().setAttribute("message", message);
    res.sendRedirect("adminHome.jsp");
    
    Run Code Online (Sandbox Code Playgroud)

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

    <p>Message: ${message}</p>
    <c:remove var="message" scope="session" /> 
    
    Run Code Online (Sandbox Code Playgroud)

    删除很重要,否则它会在整个会话期间坚持下去.


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

String message = "hello";
req.setAttribute("message", message);
req.getRequestDispatcher("/adminHome.jsp").forward(req, res);
Run Code Online (Sandbox Code Playgroud)

并在JSP中显示如下

    <p>Message: ${message}</p>
Run Code Online (Sandbox Code Playgroud)

也可以看看:

  • 谢谢@BalusC,我尝试了你所有的选择,他们给出了我需要的显示。唯一的问题是,即使我重新启动应用程序,该消息也会粘在页面上。如何删除它,使其仅在用户名和密码不正确时显示?现在,即使在输入用户名和密码之前它也会显示该消息 (2认同)