java - 如何使用response.sendRedirect向JSP传递参数?

标签 java jsp servlets

我真的需要使用response.sendRedirect()方法,因为我的 JSP(search.jsp) 页面实际上正在调用 servlet <jsp:include page="/searchServlet" />在我的searchServlet中如果我使用转发方法(到同一页面),我会得到一个奇怪的错误(也许是因为我一直调用它并转发,我还没有找到原因..)但是我需要读取其中的属性我的 JSP(search.jsp) 页面包含一条简单的消息,例如“请提供有效数据”

但是,由于我使用响应重定向到页面,并在请求范围中设置此属性,因此当我尝试读取它时,不会出现预期的情况。我尝试将此属性放入我的 session 范围中,读取然后删除它,它有效(传递错误的数据),但只是第一次,如果我尝试再次正确运行它,提供所有数据,我将收到错误消息因为我没有关闭浏览器来实际将其从 session 中删除。

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

谢谢!

编辑1:

搜索Servlet:

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");
}

搜索.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>

编辑2: 如果我使用forward()而不是sendRedirect,我得到的错误并且我永远不会停止,继续循环:

at javax.servlet.ServletRequestWrapper.isAsyncStarted(ServletRequestWrapper.java:390)
// the error above repeats for more than a thousand times   

at javax.servlet.ServletRequestWrapper.isAsyncStarted(ServletRequestWrapper.java:390)
at org.apache.catalina.core.ApplicationDispatcher.unwrapRequest(ApplicationDispatcher.java:846)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:822)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338)
at control.SearchCriteriaServlet.doPost(SearchCriteriaServlet.java:99)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:604)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:543)
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:954)
at org.apache.jsp.charts.searchChart_jsp._jspService(searchChart_jsp.java:183)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

编辑3:

我的 doGet() 方法:

ArrayList<Machine> foundMachines = MachineDB.getAllMachines();
request.setAttribute("foundMachineList", foundMachines);
RequestDispatcher rd = request.getRequestDispatcher("/searchServlet");
rd.forward(request, response);

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

最佳答案

好的,我知道您遇到问题的原因了。那是因为无限的调用循环。查看您编写的代码。 在您的 JSP <jsp:include page="/searchServlet" /> 中此行会调用您的 servlet searchServlet再次在 servlet 中将请求发送到 search.JSP 。所以现在就纠正这个问题。

关于java - 如何使用response.sendRedirect向JSP传递参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24409860/

相关文章:

java - 有没有办法创建一个可以在不同类上的所有 junit 单元测试之前运行的 spring 上下文?

java - 显示另一个类的信息

java - 关闭以编程方式创建的 Logback DBAppender

java - 在属性文件中转义 json 字符串

java - JSP 变量不是变量

java - 从 JSP 与 DWR 管理的对象进行交互

java - 在 JSP 中编辑数据表

java - Spring MVC 表单错误

java - 302重定向后的HTTP Referer

java - ServletExtension 类的问题