我使用以下代码从页面中获取一些数据:
int clientId = Integer.parseInt(request.getParameter("clientId"));
我尝试使用try / catch包围它,然后使用response.sendRedirect("page.jsp");
在catch块中重定向,但页面没有重定向,它似乎想要完成整个脚本(这反过来又会引发更多错误因为初始变量无效!)。我错过了一些基本的东西吗?
答案 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状态,但不会影响当前方法的流程,并且会继续。