我用过谷歌验证码,效果很好。form
也没有enctype 。我想在同一个form
元素中上传图片。然后将 anenctype="multipart/form-data"
添加到表单的属性中。我遇到了以下问题,我使用 JSP servlet:
1.
String challenge = request.getParameter("recaptcha_challenge_field");
String uresponse = request.getParameter("recaptcha_response_field");
这里的挑战和 uresponse 给出了空值,因此
ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(remote, challenge, uresponse);
给出了空指针异常。
编辑:我后来发现,当使用enctype="multipart/form-data
in标记时,无法像在 Servlet 中form
那样检索参数及其值。request.getParameter('')
2.FileItem
然后我尝试通过以下 方式获取上述参数(挑战和uresponse)的值
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = null;
items = upload.parseRequest(request);
Iterator itr = items.iterator();
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next();
if (item.isFormField()) {
String name = item.getFieldName();
System.out.println("name: " + name);
String value = item.getString();
System.out.println("value: " + value); // closing scopes ....
这些输出没有给出“recaptcha_challenge_field”和“recaptcha_response_field”的打印结果。但是 HTML 元素的其他参数和值input
是可用的。我观察到的是,当删除表单 enctype 时,servlet 可以具有这些参数('recaptcha_challenge_field' 和 'recaptcha_response_field')及其值。当仅添加表单 enctype 时,servlet 中不可用的参数。(request.getParameter('recaptha challenge parameter or recaptha-response-field parameter'))。
编辑我检查了浏览器是否发送了这些参数(recaptha-challenge ane recaptha-response-field.)及其值,并发现浏览器可以很好地发送所有参数。问题可能出在 servlet 并在FileItem
我想用这个谷歌验证码上传图片(用于人工验证)。我当前的实现不起作用。有谁让我知道如何实现这个?