2011-03-05 65 views
0

我从一个页面使用下面的代码抓住一些数据失败:重新定向如果验证在JSP

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

我试图用try/catch语句围绕着它,然后使用response.sendRedirect("page.jsp");在catch块重定向,但该页面不会重新指向,它似乎要完成整个脚本(由于初始变量无效,反过来会引发更多错误!)。我在这里错过了什么基础?

+0

顺便说一句,这是代码在JSP中,还是在一个Servlet中?在.JSP页面中输入 – Bozho 2011-03-05 21:54:48

+0

。那个回报;似乎已经做到了。 – greenimpala 2011-03-06 13:31:49

回答

1

你也许错过了return声明(虽然我没有看到你的代码):

response.sendRedirect(..); 
return; 

如果你简单地调用sendRedirect(..)这将设置Location HTTP头和HTTP状态,但不会影响当前方法的流程,并且会继续。

1

您需要确保JSP页面上的所有scriptlet逻辑都是有条件的,具体取决于“clientId”的存在,因此您的catch块可能需要下到JSP页面的底部。请记住,JSP页面被编译成一个servlet,所以你仍然需要确保代码能够被编译。一般来说,我强烈建议你把这个逻辑放在一个单独的类(例如一个控制器类的类)中,并且尽量减少JSP页面上scriptlet代码的数量。否则就很难保持。

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

2

阅读您的服务器日志。我的仙,因为它与IllegalStateException s杂乱无章。有关更多详细信息,另请参阅this answer

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

您可以在我们的Servlets wiki page中找到Hello World示例。它也涵盖了基本的验证。