Java 如何使用response.sendRedirect将参数传递给JSP?

Java 如何使用response.sendRedirect将参数传递给JSP?,java,jsp,servlets,Java,Jsp,Servlets,我真的需要使用response.sendRedirect()方法,因为我的JSP(search.JSP)页面实际上在调用servlet,而在我的searchServlet中,如果我使用forward方法(到同一页面),我会遇到一个奇怪的错误(可能是因为我一直在调用它并转发,我还没有找到原因……)但是,我需要在我的JSP(search.JSP)页面中读取一个属性,其中包含一条简单的消息,如“请提供有效数据” 然而,由于我使用我的响应重定向到一个页面,并在我的请求范围内设置这个属性,所以当我尝试读取

我真的需要使用
response.sendRedirect()
方法,因为我的JSP(search.JSP)页面实际上在调用servlet
,而在我的
searchServlet
中,如果我使用forward方法(到同一页面),我会遇到一个奇怪的错误(可能是因为我一直在调用它并转发,我还没有找到原因……)但是,我需要在我的JSP(search.JSP)页面中读取一个属性,其中包含一条简单的消息,如“请提供有效数据”

然而,由于我使用我的响应重定向到一个页面,并在我的请求范围内设置这个属性,所以当我尝试读取它时,一切都不会像预期的那样。我尝试将此属性放入会话范围,读取并删除它,它起了作用(传递错误的数据),但这只是第一次,如果我再次尝试运行它并正确提供所有数据,我将收到错误消息,因为我无法关闭浏览器将其从会话中删除

所以我的问题是:有一种方法可以使用
sendRedirect()
并将一个属性一起设置到我的JSP页面?如果没有,如何解决这个问题

谢谢大家!

编辑1:

searchServlet:

if (errorMessage != null) {
    /*sendError will generate an HTML error page using the message that you supplied and will override the content type to text/html.
    response.sendError(1, errorMessage);    
    */
    request.getSession().setAttribute("errorMessage",errorMessage);
    response.sendRedirect("charts/search.jsp");
}
search.JSP

<jsp:include page="/searchServlet" /> 
<c:if test="${sessionScope.errorMessage != null}">
    <div id="error-Message">
        <c:out value="${sessionScope.errorMessage}" />
        <c:remove var="errorMessage" scope="session" />
    </div>
</c:if>
编辑3:

My doGet()方法:

ArrayList foundMachines=MachineDB.getAllMachines();
setAttribute(“foundMachineList”,foundMachines);
RequestDispatcher rd=request.getRequestDispatcher(“/searchServlet”);
转发(请求、响应);

My doPost(),它处理所有条目,并在其中包含来自edit1的代码:

您可以在会话中保留参数

session.setAttribute("Att1","para1");
session.setAttribute("Att2","para2");
.
.
.

就像这样。

您可以在会话中保留参数

session.setAttribute("Att1","para1");
session.setAttribute("Att2","para2");
.
.
.

就像这样。

您可以在会话中保留参数

session.setAttribute("Att1","para1");
session.setAttribute("Att2","para2");
.
.
.

就像这样。

您可以在会话中保留参数

session.setAttribute("Att1","para1");
session.setAttribute("Att2","para2");
.
.
.

就像这样。

正如您所发现的,如果您正在执行重定向,则无法在请求中传递属性,因为重定向会导致浏览器发出新的请求。因此,JSP页面中的请求(对象)将是一个新的请求(对象),而不是存储属性的请求(对象)

您可以在会话中存储属性,但正如您所发现的,如果在请求之间不重置/删除属性,则可能会导致问题。如果用户使用浏览器的“后退”按钮,或同时打开两个或多个选项卡,则在会话中存储状态也可能导致问题

您可以使用重定向在请求参数中传递信息-例如,通过构造要重定向到的URL使其包含参数。 例如blahblah/search?message=which

然而,用户可能会觉得这很奇怪(他们会在浏览器的地址栏中看到参数),并且您可能会遇到URL变大的问题


在你的情况下,我会看看为什么前锋不工作

正如您所发现的,如果您正在执行重定向,则无法在请求中传递属性,因为重定向会导致浏览器发出新请求。因此,JSP页面中的请求(对象)将是一个新的请求(对象),而不是存储属性的请求(对象)

您可以在会话中存储属性,但正如您所发现的,如果在请求之间不重置/删除属性,则可能会导致问题。如果用户使用浏览器的“后退”按钮,或同时打开两个或多个选项卡,则在会话中存储状态也可能导致问题

您可以使用重定向在请求参数中传递信息-例如,通过构造要重定向到的URL使其包含参数。 例如blahblah/search?message=which

然而,用户可能会觉得这很奇怪(他们会在浏览器的地址栏中看到参数),并且您可能会遇到URL变大的问题


在你的情况下,我会看看为什么前锋不工作

正如您所发现的,如果您正在执行重定向,则无法在请求中传递属性,因为重定向会导致浏览器发出新请求。因此,JSP页面中的请求(对象)将是一个新的请求(对象),而不是存储属性的请求(对象)

您可以在会话中存储属性,但正如您所发现的,如果在请求之间不重置/删除属性,则可能会导致问题。如果用户使用浏览器的“后退”按钮,或同时打开两个或多个选项卡,则在会话中存储状态也可能导致问题

您可以使用重定向在请求参数中传递信息-例如,通过构造要重定向到的URL使其包含参数。 例如blahblah/search?message=which

然而,用户可能会觉得这很奇怪(他们会在浏览器的地址栏中看到参数),并且您可能会遇到URL变大的问题


在你的情况下,我会看看为什么前锋不工作

正如您所发现的,如果您正在执行重定向,则无法在请求中传递属性,因为重定向会导致浏览器发出新请求。因此,JSP页面中的请求(对象)将是一个新的请求(对象),而不是存储属性的请求(对象)

您可以在会话中存储属性,但正如您所发现的,如果在请求之间不重置/删除属性,则可能会导致问题。如果用户使用浏览器的“后退”按钮,或同时打开两个或多个选项卡,则在会话中存储状态也可能导致问题

您可以使用重定向在请求参数中传递信息-例如,通过构造要重定向到的URL使其包含参数。 例如blahblah/search?message=which

然而,用户可能会觉得这很奇怪(他们会在浏览器的地址栏中看到参数),并且您可能会遇到URL变大的问题


在你的情况下,我会看看为什么前锋不工作

好的,我知道你面对这个问题的原因了。这是因为无限调用循环。请参阅您编写的代码。 在JSP
中,这一行导致调用您的ser
      <% String st=(String)request.getParameter("uname"); %>