Groovy中的servlet无法找到Tomcat的JAR文件
-
25-09-2019 - |
题
我已经创建了的Groovlet,将作为一种HTTP代理。它接受GET请求,然后基于在所述请求中提供的URL使得web服务调用。
下面是到目前为止,我已经得到了代码:
@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 JAR文件中的文件夹WEB-INF/lib
在Groovlet中。但是,代码是不工作,因为它应该。 (I还试图把该文件夹中具有相同的效果如下$TOMCAT_HOME/common/lib
。)
当我运行,正是因为它是上面的代码中,页面回来完全空白。
如果我在上面只删除@Grab
线(因为JAR理论上应该在classpath的话),我从Tomcat的一个讨厌的错误(我运行它在5.5,但我得到的大致相同的行为6):
HTTP状态500 - 的GroovyServlet错误: 剧本: '/proxy.groovy':脚本 处理failed.startup失败: 在语义常规错误 分析:类型 org.apache.http.client.methods.HttpRequestBase 不存在 java.lang.TypeNotPresentException: 类型 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目录下。
在另一方面,如果你不需要任何花哨的要命,你可以使用Groovy的URL对象。请参阅一些示例此处。