Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么tomcat servlet不使用JVM参数http.proxyHost?_Java_Tomcat_Servlets_Proxy - Fatal编程技术网

Java 为什么tomcat servlet不使用JVM参数http.proxyHost?

Java 为什么tomcat servlet不使用JVM参数http.proxyHost?,java,tomcat,servlets,proxy,Java,Tomcat,Servlets,Proxy,我有一个黑盒servlet,它通过ebMS(smtp/pop?)向其他服务器发送消息。我将servlet放在Linux(centOS)服务器上的Tomcat8.0.30中,经过测试,消息可以通过internet发送到其他主机。现在,我想通过Tomcat JVM参数为servlet设置代理,如下所示: #tomcat/bin/catalina.sh export CATALINA_OPTS="-Dhttps.proxyHost=abc.com -Dhttps.proxyPort=8888 -Dpr

我有一个黑盒servlet,它通过
ebMS
(smtp/pop?)向其他服务器发送消息。我将servlet放在Linux(centOS)服务器上的Tomcat8.0.30中,经过测试,消息可以通过internet发送到其他主机。现在,我想通过Tomcat JVM参数为servlet设置代理,如下所示:

#tomcat/bin/catalina.sh
export CATALINA_OPTS="-Dhttps.proxyHost=abc.com -Dhttps.proxyPort=8888 -DproxySet=true -Dhttp.proxyHost=def.com -Dhttp.proxyPort=8888"
我决定先用伪proxyHost测试它,如果消息发送失败,它将证明servlet确实使用了指定的代理设置

重新启动服务后,参数将传递给tomcat,如
tomcat/log/catalina.2016-01-08.log

08-Jan-2016 11:39:53.725 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dhttps.proxyHost=abc.com
08-Jan-2016 11:39:53.725 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dhttps.proxyPort=8888
08-Jan-2016 11:39:53.725 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -DproxySet=true
08-Jan-2016 11:39:53.725 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dhttp.proxyHost=def.com
08-Jan-2016 11:39:53.725 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dhttp.proxyPort=8888
...
08-Jan-2016 11:39:59.195 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 5297 ms
但是,当我测试servlet(通过.sh调用java类)时,消息被成功传递,并且可以通过Internet在接收方接收。未应用proxyHost参数

我错过了什么?servlet是否可以覆盖代理设置?或者,在给定代理无法解析/超时后,tomcat会禁用代理设置吗


如果您有任何见解,我将不胜感激。谢谢。

我将在这里标出上述问题的答案,以防有人发现有用

servlet是否可以覆盖代理设置

是的。我编写了一个测试页面来打印
System.getProperty(“http.proxyHost”)
,当我传递给JVM时,它不是
abc.com
。在目录
/opt/tomcat/webapps//WEB-INF/classes/…
下有一个
.properties.xml
,其中包含一些JVM参数,包括xml格式的
http.proxyHost
。servlet可能在启动时对这些参数调用System.setProperty,因此覆盖了传递的值

在给定代理无法解析/超时后,tomcat会禁用代理设置吗

是的,会的。根据,代理集必须“指向可访问的地址”,否则它将不会由
ProxySelector
返回


当proxyHost设置为指向所述
.properties.xml
中的工作代理服务器时,
System.getProperty(“http.proxyHost”)
打印正确的主机,即可传递消息。当我将它指向一个活动但未转发的服务器时,
System.getProperty(“http.proxyHost”)
打印正确的主机,消息按预期成功阻止

SMTP和POP3都不使用HTTP代理。你的问题没有真正意义。如果您问客户机为什么不使用代理,答案是需要在客户机上设置
https.proxyHost
。在服务器上设置它没有意义。如果这是你的问题,我想不出提及SMTP和POP的相关性。@EJP在这种情况下没有客户机,我在linux服务器上调用服务的类,如果tomcat不在线,它将无法运行(因此它不会运行tomcat之外的另一个客户机类)。如果未应用HTTP代理,SMTP/POP3是否有其他代理设置?为什么?有人关闭港口了吗?若然,原因为何?您应该允许您的Tomcat实例直接访问所需的端口。谢谢您提供的信息!结果表明,servlet将使用http/SMTP,具体取决于以
http://...
/
mailto
。并找出httpProxy不适用的原因;我将发布一个答案并结束问题。再次感谢