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

时间:2011-05-18 16:40:50

标签: jsp servlets

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

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

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

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

3 个答案:

答案 0 :(得分:33)

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

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

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

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

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

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

  2. 将其存储在会话中

    String message = "hello";
    req.getSession().setAttribute("message", message);
    res.sendRedirect("adminHome.jsp");
    

    以便您可以在JSP中显示(并删除),如下所示:

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

    删除非常重要,否则会在整个会话期间进行删除。


  3. 但是,如果你愿意使用forward而不是重定向,那就更优雅了:

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

    并在JSP

    中显示如下
        <p>Message: ${message}</p>
    

    另见:

答案 1 :(得分:3)

将您的消息设置为请求对象的属性:

request.setAttribute("message", messageString);

使用RequestDispatcher将请求和响应对象分派给jsp:

RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("urlString");
dispatcher.forward(request, response);

使用表达式语言语法在JSP中访问它:

${message}

答案 2 :(得分:2)

您可以将消息保存在请求中,然后转发到jsp而不是重定向。

    request.setAttribute("msg", "The actual error message to be displayed");

    RequestDispatcher rd = getServletContext().getRequestDispatcher("/yourpage.jsp");
    rd.forward(request, response);

然后在jsp页面上,您可以通过请求访问该消息。