当前位置: 首页 > 知识库问答 >
问题:

Jetty代理类NotFoundException

潘宸
2023-03-14

我正在尝试将Jetty配置为http和https的代理。我下载了两个不同版本的jetty,但我都有相同的问题。

我目前使用的版本是:jetty-分发-8.1.8. v20121106,运行在CentOs 6.2上。

打开焦油包装后。gz,我修改了开始。ini文件添加etc/jetty代理。xml到配置文件列表:

#etc/jetty-jmx.xml
etc/jetty.xml
<b>etc/jetty-proxy.xml</b>
etc/jetty-annotations.xml
etc/jetty-ssl.xml
# etc/jetty-requestlog.xml
etc/jetty-deploy.xml
#etc/jetty-overlay.xml
etc/jetty-webapps.xml
etc/jetty-contexts.xml
etc/jetty-testrealm.xml

码头定期启动。我可以通过以下方式访问它:

http://localhost:8080/
https://localhost:8443/

读取日志文件时,似乎在端口8080、8443和8888上启动了三个抽象连接器:

2012-12-04 12:40:03.400:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080
2012-12-04 12:40:03.666:INFO:oejus.SslContextFactory:Enabled Protocols [SSLv2Hello, SSLv3, TLSv1] of [SSLv2Hello, SSLv3, TLSv1]
2012-12-04 12:40:03.668:INFO:oejs.AbstractConnector:Started SslSelectChannelConnector@0.0.0.0:8443
2012-12-04 12:40:03.668:INFO:oejs.Server:jetty-8.1.8.v20121106
2012-12-04 12:40:03.732:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8888

当我配置浏览器以访问端口8888上的代理时,jetty出现以下异常:

2012-12-04 12:40:13.463:WARN:oejs.ServletHandler:Error for /search
java.lang.NoClassDefFoundError: org/eclipse/jetty/client/HttpExchange
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
    at java.lang.Class.getConstructor0(Class.java:2699)
    at java.lang.Class.newInstance0(Class.java:326)
    at java.lang.Class.newInstance(Class.java:308)
    at org.eclipse.jetty.servlet.ServletHolder.newInstance(ServletHolder.java:941)
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:501)
    at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:402)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:642)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
    at org.eclipse.jetty.server.Server.handle(Server.java:365)
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485)
    at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926)
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
    at java.lang.Thread.run(Thread.java:662)
Caused by: 
java.lang.ClassNotFoundException: org.eclipse.jetty.client.HttpExchange
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
...

我已经验证了文件夹$JETTY_HOME/lib包含jar文件:

jetty-client-8.1.8.v20121106.jar 

它包含HttpExchangeorg.eclipse.jetty.client.类。要执行jetty,我使用命令:bin/jetty.shstart

指挥箱/码头。sh check返回以下信息:

Checking arguments to Jetty: 
JETTY_HOME     =  /home/dude/Downloads/jetty-distribution-8.1.8.v20121106
JETTY_CONF     =  /home/dude/Downloads/jetty-distribution-8.1.8.v20121106/etc/jetty.conf
JETTY_RUN      =  /tmp
JETTY_PID      =  /tmp/jetty.pid
JETTY_PORT     =  
JETTY_LOGS     =  
START_INI      =  /home/dude/Downloads/jetty-distribution-8.1.8.v20121106/start.ini
CONFIGS        =  --pre=etc/jetty-logging.xml
JAVA_OPTIONS   =   -Djetty.home=/home/dude/Downloads/jetty-distribution-8.1.8.v20121106-Djava.io.tmpdir=/tmp
JAVA           =  /data/dude/java/bin/java
CLASSPATH      =  
RUN_CMD        =  /data/dude/java/bin/java -Djetty.home=/home/dude/Downloads/jetty-distribution-8.1.8.v20121106 -Djava.io.tmpdir=/tmp -jar /home/dude/Downloads/jetty-distribution-8.1.8.v20121106/start.jar --pre=etc/jetty-logging.xml

Jetty running pid=15498

非常感谢。

共有1个答案

冯飞鹏
2023-03-14

在开始的选项中。ini添加客户端时,代理环境要求客户端工件可用。与使用ProxyServlet相同,您需要在servlets web inf/lib目录中包含jetty客户端及其依赖项。

无论如何,这将向您展示可能的选项以及在您运行它时它是如何进入类路径的。start.jar确实有助于构建jetty运行的环境。

java-jar启动。jar—列表选项

这将通过为您提供给定配置的示例命令行来向您展示当前的设置方式:

java-jarstart.jar--dry-run

有关it的更多帮助,请访问:

java-jarstart.jar--help

或者看看这里:

http://wiki.eclipse.org/Jetty/Feature/Start.jar

 类似资料:
  • 我将Jetty的HttpClient设置为使用SSL连接到apache http server,它将请求作为http路由到web服务器: HttpClient<--HTTPS->http server<--HTTP->web服务器。 此安装程序已运行了一段时间。 我现在正在尝试添加代理: HttpClient<---HTTPS using CONNECT Method-->proxy<---HTT

  • 我已经嵌入了在7000端口上运行的Jetty。另外,我有一个keycloak服务器运行在同一台机器的端口8100上。 我的所有客户端访问都通过Jetty进行,即localhost:7000。因此,我将keycloak作为Jetty上的反向代理,即localhost:7000/keycloak/auth将重定向到localhost:8100/auth。它击中正确。 现在,有KeycloakInsta

  • 问题内容: 我将Hibernate与代理一起使用,并且得到了属于的类的对象。 是否有Hibernate方法从代理 类中 检索基类(在这种情况下)?我知道,但是需要一个,而我正在寻找一个以a作为输入的方法。 问题答案: 我发现,这比我想像的要容易:只需调用代理类即可获得未代理的原始类。我不确定这有多普遍,但似乎可行。

  • 通过隐藏类的实现细节可以防止访问类中的专属信息(包括private数据)和专属程序逻辑。向客户提供代理类(proxy class),代理类只能访问类的public接口,这样就可以让客户使用类的服务而不必让客户访问类的实现细节。 实现代理类需要几个步骤(如图 7.10)。首先,我们生成要隐藏private数据的类的类定义和实现文件。我们的例子使用 Implementation 类、代理类 Inter

  • 我们有许多Jetty超文本传输协议服务器,都位于不同的防火墙后面。超文本传输协议服务器位于客户站点(不受我们的控制)。在这些站点的防火墙中打开端口不是一个选项。目前,这些服务器仅提供JSON文档以响应REST请求。 我们有Web客户端需要根据URL参数或标头值与给定的超文本传输协议服务器交互。 这似乎是一种简单的代理服务器情况——除了防火墙。 我目前正在尝试的方法是: 有一个集中式代理服务器(也基

  • 用户代理(User Agent)类提供了一些方法来帮助你识别正在访问你的站点的浏览器、 移动设备或机器人的信息。另外,你还可以通过它获取 referrer 信息,以及 支持的语言和字符集信息。 使用用户代理类 初始化类 用户代理的定义 例子 类参考 使用用户代理类 初始化类 正如 CodeIgniter 中的其他类一样,在你的控制器中使用 $this->load->library() 方法来初始化