Servlet Groovy لا يمكن العثور على ملفات جرة في Tomcat
-
25-09-2019 - |
سؤال
لقد قمت بإنشاء 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 الرائع. يرى بعض الأمثلة هنا.