我正在使用JSP和Java servlet创建调查。在JSP中,我有一个表单,“下一步”按钮指定要进入的下一个问题:“/ survey?q = 2”其中“q”是指定要显示的问题的参数。但是,根据答案(或缺少),我可能想要重定向到错误页面,或者回到同一个问题。
我尝试了一个简化版本,如果“answer”为null(回答是允许我获取值的控件的名称),我会使用request.setAttribute()
将“q”parm设置为相同的问题编号。然而,这似乎没有覆盖“q”的值,因为下一个问题会加载而不是重定向到同一个问题。
我也尝试使用response.sendRedirect()
并传递所需的网址,但是这引发了一个例外“在提交了repsonse后无法转发”。
以下是servlet的摘录:
// At this point, the URL is /survey?q={SOME#} where SOME# is the next question to
// go to after the submit. So if the user was on Question 1, the submit location
// would be /survey?q=2
try {
nextQuestion = Integer.parseInt(request.getParameter("q"));
} catch (Exception e) {
System.out.println("Inside the catch");
}
// The question we came from, obviously, is nextQuestion - 1
currQuestion = nextQuestion - 1;
// This IF is just because I'm handling the first question differently
if (currQuestion > 1) {
answer = request.getParameter("answer");
System.out.println("Answer = " + answer);
//This function checkAnswer() returns "invalid" if no answer was selected"
checkStr = checkAnswer(currQuestion, answer);
if (checkStr == "invalid") {
dispatcher = "survey-template.jsp";
request.setAttribute("q", String.format("%d", currQuestion));
} else {
dispatcher = "survey-template.jsp";
}
} else {
dispatcher = "survey-template.jsp";
}
request.getRequestDispatcher(dispatcher).forward(request, response);
所以最大的问题是:如何从servlet重定向页面?如果进入的请求是转到/survey?q=2
,而我想回到/survey?q=1
,我需要做些什么来实现这一目标?
希望这足够详细。如果需要,我可以提供更多。 谢谢!
答案 0 :(得分:2)
我也尝试使用
response.sendRedirect()
并传递所需的网址,但是这引发了一个异常“在提交了repsonse之后无法转发”
看起来你试图重定向到一个新的URL,它会根据URL内容写一个新的响应并关闭这个流,但保留了试图写入响应的转发代码,这是不允许的,因为响应已经写好并且流已关闭。在代码中:
//having both is not allowed
//you should only use one of these approaches
response.sendRedirect(<someUrl>);
request.getRequestDispatcher(dispatcher).forward(request, response);
如果您只想重定向到其他网址,请使用response.sendRedirect(<someUrl>);
并确保没有进一步的重定向或转发。所以,你的代码可能是:
response.sendRedirect(<someUrl>);
//request.getRequestDispatcher(dispatcher).forward(request, response);
请注意,发送重定向意味着在URL上调用新的GET请求,因此所有请求属性都将丢失。
答案 1 :(得分:0)
使用response.sendRedirect()
后,您应退出该方法。
您可以尝试:
response.sendRedirect("url");
return;