0

私はGoogleのキャプチャコードを使用しましたが、うまく機能します。formにもenctypeはありません。form同じ要素内に画像をアップロードしたかったのです。次に、enctype="multipart/form-data"フォームの属性にが追加されました。次の問題に直面し、JSPサーブレットを使用しています。

1.1。

String challenge = request.getParameter("recaptcha_challenge_field"); 

String uresponse = request.getParameter("recaptcha_response_field");  

ここで、challengeとuresponseはnull値を与えたため、

ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(remote, challenge, uresponse);  

nullポインタ例外を与えました。

編集:後で、enctype="multipart/form-datainタグを使用すると、サーブレットの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」の出力結果は得られませんでした。ただし、HTMLinput要素の他のパラメーターと値は使用可能です。私が観察したのは、フォームenctypeが削除されると、サーブレットはそれらのパラメーター('recaptcha_challenge_field'および'recaptcha_response_field')とその値を持つことができるということです。フォームのenctypeのみが追加された場合、サーブレットで使用できないパラメーター(request.getParameter('recapthaチャレンジパラメーターまたはrecaptha-response-fieldパラメーター'))。

編集ブラウザがそれらのパラメータ(recaptha-challenge ane recaptha-response-field。)をそれらの値とともに送信するかどうかを確認し、ブラウザがすべてのパラメータを適切に送信することを確認しました。問題はサーブレットにあり、内部のパラメータと値を取得している可能性がありますFileItem

このGoogleキャプチャコードを使用して画像をアップロードしたい(人間による検証用)。私の現在の実装は機能しません。誰かがこれを実装する方法を教えてくれますか?

4

1 に答える 1

0

その理由はhtml自体にあります。type-file が空の場合input(ユーザーがローカル pc からファイルを選択していない場合)、html 要素の名前の下にあるすべてのパラメーター名とその値 (servlt 内) を取得することは困難または (実行できません)。私の問題で述べたように、私のシナリオでは。

于 2012-04-23T11:43:05.617 に答える