【问题标题】:how to send parameter from servlet to jsp page如何将参数从servlet发送到jsp页面
【发布时间】:2018-08-20 01:26:41
【问题描述】:

我想将参数从 servlet 传递到 jsp 页面。这就是为什么在 servlet 中,我编写了以下代码:

request.setAttribute("errorMessage", dbMessage);
response.sendRedirect(redirectURL + "index.jsp");

在 index.jsp 中,我编写了以下代码:

<%
                        String error_msg = (String)request.getAttribute("errorMessage");
                        out.println(error_msg);
                        if (error_msg != null) {%>
                        <div class="alert alert-danger">
                            <%=error_msg%> 
                        </div>
                    <%  }  %>

但是我在 index.jsp 页面中没有 errorMessage 的值。是什么原因 ?请帮我 。需要注意的一点:error Message is not null。

【问题讨论】:

    标签: java jsp servlets model-view-controller


    【解决方案1】:

    使用 request.sendRedirect 时不能传递隐藏参数。您可以通过以下选项将参数从 servlet 传递给 JSP。

    1. 将 url 本身中的请求参数设置为

    response.sendRedirect(redirectURL + "index.jsp?errorMessage=", dbMessage);

    然后在JSP中修改代码为

    String errorMsg = request.getParameter("errorMessage")

    错误信息将在浏览器端的 URL 中可见。

    1. 使用 Jaydip 回答中提到的服务器端转发,如下所示。

    request.setAttribute("errorMessage", dbMessage); RequestDispatcher dispatcher = serveltContext().getRequestDispatcher("/index.jsp"); dispatcher.forward(request, response);

    1. 使用会话

      request.getSession().setAttribute("errorMessage", dbMessage);

      在 JSP 上,将代码更改为

      String error_msg=(String)request.getSession().getAttribute("errorMessage");

    2. 使用 cookie

      Cookie errorCookie = new Cookie("errorMessage", dbMessage); errorCookie.setPath(request.getContextPath()); response.addCookie(errorCookie);

    在浏览器端,您可以通过 js 或从请求本身读取 cookie

    String error_msg = null;
    Cookie [] cookies = request.getCookies();
    for (Cookie cookie : cookies) {
        if ("errorMessage".equals(cookie.getName())) {
            error_msg =  cookie.getValue();
        }
    }
    

    【讨论】:

      【解决方案2】:

      你应该这样写:

      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              **request.getSession().setAttribute("mango", "Mango is a sweet Fruit");**
              response.sendRedirect(request.getContextPath() + "/index.jsp");
          }
      

      【讨论】:

        【解决方案3】:

        这里的问题是您使用的是 sendRedirect。了解 sendRedirect 将向不同的 url 发起新请求。尝试使用 forward 或 include 来维护请求参数。

        【讨论】:

        • 你能举例说明如何使用 forward 或 include 做到这一点吗?
        • 如果我将请求从 servlet 转发到 jsp 页面,则显示 serlet 的 url 但显示 jsp 页面的内容。为什么?
        • 因为转发在服务器端工作,因此客户端不知道请求已在内部转发。因此,您会在浏览器中看到原始请求 url。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-13
        • 1970-01-01
        • 1970-01-01
        • 2016-10-10
        • 2013-05-16
        相关资源
        最近更新 更多