带用户输入的Javaservlet?
好的,用户在JSP上输入一些信息,然后单击“提交”,这将启动一个servlet。然后,这个servlet处理信息并发回另一个JSP。那很好
但是,如果servlet需要在继续处理之前向用户提问,该怎么办?在通用Java应用程序中,可以使用JOptionPane之类的工具
作为一个非常简单的例子。。。。假设有一个姓名和年龄的列表: 姓名{鲍勃:21,弗雷德:19,约翰:20}
并要求用户再输入4个: 哈利:25,约翰:17,珀西:54,加里:12
servlet获取输入的名称,然后尝试将它们添加到“名称”列表中。然而,当它到达“约翰:17”时,它发现“约翰”已经在那里了。我们想问用户:
“您想跳过或替换John吗?”
如果他们跳过,我们将转到percy,列表如下: 姓名{bob:21,fred:19,john:20,harry:25,percy:54,gary:12}
如果他们选择替换,我们将: 姓名{鲍勃:21,弗雷德:19,约翰:17,哈利:25,珀西:54,加里:12}
您将如何获得用户输入?是将所有逻辑转换为JavaScript或其他内容的唯一方法吗
# 1 楼答案
servlet被固定在HTTP请求/响应协议上。当用户的浏览器发送请求时,在收到服务器的响应之前,它无法执行任何操作。这意味着服务器无法在请求中途获得用户输入
添加Javascript以验证输入不会与现有列表数据重复是防止此问题的一种方法。您还可以在servlet上添加一些逻辑,以及从输入中添加姓名/年龄组合,只要它们不存在,并在响应中显示所有现有组合的错误
此外,Ajax通常用于绕过在用户浏览器中执行完整请求/响应的需要。因为它是HTTP,所以它仍然需要发送请求并等待响应,但它在后台执行此操作,而无需重新加载整个页面。它更复杂,但可以使用户体验更具交互性
# 2 楼答案
只需将其显示为消息并再次填充相同的表单即可
要显示消息,基本上只需将其设置为请求属性:
并转发回相同的JSP页面,在该页面中以EL显示,如下所示:
可以通过将请求参数显示为输入值来重新填充表单:
应该是这样。在这里,我使用JSTL{}而不是普通EL来防止站点XSS attacks作为示例,尝试用
"><script>alert('XSS')</script><b>XSS</b a="
填充<input name="foo" value="${param.foo}">
(包括引号)您也可以使用Javascript来改善用户体验(更快的响应和无内容闪现),但这不会覆盖整个万维网,您也不应该依赖它,因为它可能被禁用/黑客攻击/欺骗。只需使用它和只使用即可获得更好的用户体验。也就是说,使用它unobtrusively并保持服务器端代码的健壮性,以便在JS缺失或失败的情况下仍能工作
# 3 楼答案
是的,您必须通过JavaScript执行此操作,或者让servlet/jsp看到问题,然后将页面发送回询问问题的用户,当用户提交该页面时,然后处理列表