【问题标题】:Forward to a servlet and set attribute转发到 servlet 并设置属性
【发布时间】:2014-12-20 12:33:56
【问题描述】:

我正在使用 java 中的 servlet;我正在尝试从一个 servlet 转发到另一个 servlet。 我还想将属性传递给其他 servlet。

当我想转发到 JSP 时,它工作正常。我愿意

request.setAttribute("attrName", attribute)
request.getRequestDispatcher("forward.jsp").forward(request, response);

但是当我对 servlet 做同样的事情时:

request.setAttribute("attrName", attribute)
request.getRequestDispatcher("TheServlet").forward(request, response);

我的服务器崩溃了,我收到以下错误:

javax.servlet.ServletRequestWrapper.isAsyncStarted(ServletRequestWrapper.java:395)

我知道我可以使用以下行重定向到 servlet:

response.sendRedirect("TheServlet");

但由于某种原因,当我重定向而不是转发时,set Attribute 不起作用。

【问题讨论】:

    标签: java jsp servlets


    【解决方案1】:

    redirect 是发送到浏览器的 HTTP 响应,请求它向指定的 URL 提交新请求。由于它会导致发出一个全新的请求,因此您设置的先前请求属性在新请求中将不可用。

    在转发到 servlet 方面,您是否检查了您的 web.xml 配置。是否设置为让转发的 servlet 看到转发的请求?

    您可以将属性保存到第一个 servlet 中的会话并从第二个 servlet 访问它。 使用http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#getSession()

    您还可以在重定向的 URL 查询字符串中传递属性值。所以你的重定向 URL 看起来像 'myRedirectUrl?attributeName=attributeValue'

    另外尝试使用'include'方法而不是'forward'。

    【讨论】:

    • 那么如何将属性从 servlet a 传递给 servlet b?我在 web.xml 中没有太大变化,但转发是有效的(但请求属性不是)
    • 我想我会在字符串 url 中传递它,因为它是给用户的错误消息。谢谢。
    • 你能告诉我包含和转发之间的区别吗?
    猜你喜欢
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 2016-07-08
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    相关资源
    最近更新 更多