Proxy 使用码头';独立Jetty应用程序中的s代理

Proxy 使用码头';独立Jetty应用程序中的s代理,proxy,jetty,maven-jetty-plugin,jetty-9,Proxy,Jetty,Maven Jetty Plugin,Jetty 9,我正在调查使用Jetty 9作为代理,使用独立Jetty,而不是嵌入式Jetty。我在很多地方寻求帮助: 其中大部分与嵌入式码头有关: 这个问题大致相同: …但唯一的答案是指向一个页面的链接,该页面包含代理的一些参数,但没有示例或其他有用的提示 关于这个问题 我已经为Jetty的ProxyServlet创建了一个扩展,它覆盖了rewriteURI()方法,从而将请求实际更改为不同的URL。当运行Jetty embedded时,这个定制代理可以工作,但是当我使用web.xml文件和J

我正在调查使用Jetty 9作为代理,使用独立Jetty,而不是嵌入式Jetty。我在很多地方寻求帮助:

其中大部分与嵌入式码头有关:

这个问题大致相同:

…但唯一的答案是指向一个页面的链接,该页面包含代理的一些参数,但没有示例或其他有用的提示

关于这个问题

我已经为Jetty的ProxyServlet创建了一个扩展,它覆盖了
rewriteURI()
方法,从而将请求实际更改为不同的URL。当运行Jetty embedded时,这个定制代理可以工作,但是当我使用web.xml文件和Jetty maven插件创建要部署的war时,它就不再工作了

当我发出请求时,我可以调试应用程序并看到它进入
rewriteURI()
方法,然后它调用Jetty的ProxyServlet的
service()
方法,该方法一直运行到完成,但什么也没有发生。页面保持空白,最终使用TimeoutException“Total timeout Appeased”调用ProxyServlet的
onResponseFailure()
。开发工具显示接收504网关超时的请求

似乎在事物之间的联系中缺少了一些东西,但我不知道它可能是什么。任何帮助都将不胜感激。我在下面介绍了
web.xml
和定制代理(
ProxyServletExtension

web.xml

<servlet>
    <servlet-name>proxy</servlet-name>
    <servlet-class>org.example.ProxyServletExtension</servlet-class>
    <init-param>
        <param-name>maxThreads</param-name>
        <param-value>1</param-value>
    </init-param>
    <async-supported>true</async-supported>
</servlet>
<servlet-mapping>
    <servlet-name>proxy</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet>
    <servlet-name>proxy</servlet-name>
    <servlet-class>org.example.ProxyServletExtension$Transparent</servlet-class>
    <init-param>
        <param-name>maxThreads</param-name>
        <param-value>1</param-value>
    </init-param>
    <init-param>
        <param-name>proxyTo</param-name>
        <param-value>http://localhost:8060</param-value>
    </init-param>
    <async-supported>true</async-supported>
</servlet>
<servlet-mapping>
    <servlet-name>proxy</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

我找到了解决这个问题所需的提示。这个问题与我的问题并不完全相关,但提供的代码片段向我展示了
web.xml
中的
中我需要的内容

更新的web.xml

<servlet>
    <servlet-name>proxy</servlet-name>
    <servlet-class>org.example.ProxyServletExtension</servlet-class>
    <init-param>
        <param-name>maxThreads</param-name>
        <param-value>1</param-value>
    </init-param>
    <async-supported>true</async-supported>
</servlet>
<servlet-mapping>
    <servlet-name>proxy</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet>
    <servlet-name>proxy</servlet-name>
    <servlet-class>org.example.ProxyServletExtension$Transparent</servlet-class>
    <init-param>
        <param-name>maxThreads</param-name>
        <param-value>1</param-value>
    </init-param>
    <init-param>
        <param-name>proxyTo</param-name>
        <param-value>http://localhost:8060</param-value>
    </init-param>
    <async-supported>true</async-supported>
</servlet>
<servlet-mapping>
    <servlet-name>proxy</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

代理
org.example.ProxyServletExtension$Transparent
maxThreads
1.
代理
http://localhost:8060
真的
代理
/*
所需更改

  • 设置为
    ProxyServletExtension$Transparent
    ,以前我没有使用trasparent代理
  • 使用要代理请求的地址,使用
    代理的
    。这也意味着上面的
    ProxyServletExtension.java
    类(在问题中)完全没有必要
  • 另外,值得一提的是,还有一个
    前缀
    ,可用于在代理到代理请求之前删除部分传入请求