سؤال

لقد قمت بإنشاء groovlet الذي سيكون بمثابة نوع من وكيل HTTP. يقبل الحصول على الطلبات ثم يقوم بإجراء مكالمات خدمة الويب بناءً على عنوان URL المقدم في الطلب.

هذا هو الرمز الذي حصلت عليه حتى الآن:

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.0')
import groovyx.net.http.*
import static groovyx.net.http.ContentType.*
import static groovyx.net.http.Method.*

String url = params.url

def http = new HTTPBuilder(url)

http.request(GET, TEXT) {

     response.success = { resp, reader ->
       println reader
     }

     response.'404' = { resp -> 
       println 'not found!'
     }
}

لقد حصلت على Groovy httpbuilder ملف جرة في WEB-INF/lib مجلد Groovlet. ومع ذلك ، فإن الكود لا يعمل كما ينبغي. (حاولت أيضًا وضع المجلد في $TOMCAT_HOME/common/lib مع نفس النتائج أدناه.)

عندما أقوم بتشغيل الرمز تمامًا كما هو أعلاه ، تعود الصفحة فارغة تمامًا.

إذا قمت بإزالة فقط @Grab خط في الأعلى (نظرًا لأن الجرة يجب أن تكون نظريًا في classpath بالفعل) ، أحصل على خطأ سيء من Tomcat (أقوم بتشغيله في 5.5 ، لكنني أحصل على نفس السلوك تقريبًا في 6):

HTTP Status 500 - Groovyservlet Error: Script: '/proxy.groovy': فشل معالجة النص. فشل: خطأ عام أثناء التحليل الدلالي: type org.apache.http.client.methods.httprequestbase org.apache.http.client.methods.httprequestbase غير موجود ...

ثم يتبعه تتبع المكدس.

ما هو الخطأ في Groovlet الخاص بي؟

هل كانت مفيدة؟

المحلول

شيئان.

أولاً ، يبدو أن Groovlets لا يمكنها استخدام العنب ( @Grab أمر). لهذا السبب فشل Groovlet بصمت عند وجود هذا الخط.

ثانياً ، http-builder تعتمد الوحدة النمطية أيضًا على حوالي 19 حزمة أخرى (بما في ذلك org.apache.http.client.methods.HttpRequestBase يتم الإشارة إليها في رسالة الخطأ). يمكنك العثور على هذه الحزم في ~/.groovy/grapes مجلد.

إذا كنت ترغب في العثور على جميع التبعيات ، فقم بحذف دليل العنب. ثم قم بتشغيل برنامج نصي محليًا يستخدم ذلك @Grab أمر. بمجرد انتهاء البرنامج النصي ، يمكنك البحث في دليل العنب ورؤية كل ما تم تنزيله.

عندما فعلت ذلك ، حصلت على القائمة التالية من الحزم:

antlr
asm
commons-beanutils
commons-codec
commons-collections
commons-lang
commons-logging
net.sf.ezmorph
net.sf.json-lib
net.sourceforge.nekohtml
org.apache
org.apache.commons
org.apache.httpcomponents
org.codehaus.groovy
org.codehaus.groovy.modules.http-builder
xerces

لذا ، إذا كنت ترغب في استخدام httpbuilder في Groovlet ، فستحتاج إلى الحصول على كل هذه التبعيات في Web-INF/LIB أو دليل Tomcat Common/Lib.

من ناحية أخرى ، إذا لم تكن بحاجة إلى أي شيء يتوهم بشكل رهيب ، فيمكنك استخدام كائن URL الرائع. يرى بعض الأمثلة هنا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top