我真的需要使用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/