我使用了Google验证码,效果很好。 form
也没有enctype。我想在同一个form
元素中上传图片。然后将enctype="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
标记中的form
时,无法在Servlet中将参数及其值检索为request.getParameter('')
。 / p>
2。然后我尝试通过FileItem
获取上述参数(质询和响应)的值,如下所示
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或recaptha-response-field parameter'))。
编辑我检查了浏览器是否发送了这些参数(recaptha-challenge ane recaptha-response-field。)及其值,并发现浏览器可以很好地发送所有参数。问题可能出在servlet中,并在FileItem
我想上传带有此Google验证码的图片(用于人工验证)。我当前的实现不起作用。有谁让我知道如何实现这个?
答案 0 :(得分:0)
原因在于html本身。当input
类型文件为空(用户没有从本地pc中选择文件)时,很难或(无法完成)检索参数名称及其值(在servelt中)在我的问题中提到的我的场景中的html元素名称下面。