如果验证在JSP中失败,则重定向

时间:2011-03-05 16:15:20

标签: jsp

我使用以下代码从页面中获取一些数据:

int clientId = Integer.parseInt(request.getParameter("clientId"));

我尝试使用try / catch包围它,然后使用response.sendRedirect("page.jsp");在catch块中重定向,但页面没有重定向,它似乎想要完成整个脚本(这反过来又会引发更多错误因为初始变量无效!)。我错过了一些基本的东西吗?

3 个答案:

答案 0 :(得分:2)

阅读您的服务器日志。我的意思是,它与IllegalStateException混杂在一起。有关更多详细信息,另请参阅this answer

不要将JSP滥用为页面控制器。由于JSP本身就是响应的一部分,因此您无法再从JSP内部更改它(好吧,有黑客/变通办法,但您不想使用黑客/变通办法)。要控制请求/响应,您应该使用servlet。创建一个servlet,让它监听某个URL,让表单提交到该URL,让servlet执行你在JSP中拥有的所有Java代码,最后控制响应目标。

您可以在Servlets wiki page中找到Hello World示例。它还包括基本验证。

答案 1 :(得分:1)

您需要确保JSP页面上的所有scriptlet逻辑都是有条件的,具体取决于“clientId”的存在,因此您的catch块可能需要深入到JSP页面的底部。请记住,JSP页面被编译为servlet,因此您仍需要确保代码可以编译。通常,我强烈建议您将此逻辑放在单独的类(例如,类控制器类)中,并最小化JSP页面上的scriptlet代码量。只是很难保持否则。

如果这不能解决问题,请发布整个JSP代码,以便我们可以确定建议的位置。

答案 2 :(得分:1)

您可能错过了return语句(虽然我看不到您的代码):

response.sendRedirect(..);
return;

如果您只是致电sendRedirect(..),则会设置Location http标头和http状态,但不会影响当前方法的流程,并且会继续。