处理发布到Java Servlet的表单的验证的一种策略是在验证失败时转发回原始JSP视图。这使用户可以看到他们刚刚提交的表单的上下文中存在验证失败(也许他们没有为必填字段提供值),然后可以重试。但是,由于此策略未遵循众所周知的Post- Redirect- Get模式(http://en.wikipedia.org/wiki/Post/Redirect/Get),因此它遭受了浏览器历史记录现在包含非书签的问题页。如果用户以后尝试通过历史记录/后退按钮访问此页面,他们将获得文档过期异常(至少在Firefox 19中)。应该如何处理?有没有更好的办法?
注意:实际上我在Servlet信息页面()中建议了我描述的策略。虽然没有提及浏览器历史记录问题。
注意:这个问题是相似的:(带有验证错误的JSFPRG)。建议在帖子中使用AJAX。如果这是推荐的策略,也许我们需要更新ServletWiki?无论如何,这还不确定如何从JSF转换为servlet。
据我所知,验证失败方法是有缺陷的,不应使用。而是使用以下方法之一:
将验证错误消息存储在会话中并进行重定向。
使用AJAX提交表单
使用JavaScript在客户端上捕获所有验证错误,并将到达服务器的验证失败视为应用程序错误,并假定有人不使用应用程序表单直接发送到服务器,或者应用程序表单有错误。如果您转至错误页面,您将遇到同样的问题,但攻击者应获得丰富的浏览器历史记录。如果会话可用,则可以将错误消息填充到会话中并进行重定向。不管哪种方式,它都以“正常”操作从服务器删除验证,并在某种程度上回避了问题。