不同的JVM行为:从Eclipse启动tomcat,从Catalina.bat启动

时间:2012-06-18 08:29:39

标签: java tomcat jvm

我正在维护一个使用java.protocol.handler的Web应用程序。我使用以下代码初始化它:-Djava.protocol.handler.pkgs=<my value>。 问题如下: 1.如果我部署应用程序。直接从eclipse到tomcat,使用这个instruction(直接引用Tomcat主类)并在VM参数选项卡中传递-Djava.protocol.handler.pkgs=<my value>参数,应用程序正常工作,并且初始化-protocol依赖bean。

2.如果我将.war文件直接部署到Tomcat / webapps并使用catalina.bat启动tomcat(将-Djava.protocol.handler.pkgs=<my value>添加到JAVA_OPTS),我得到:Malformed URL supplied Exception。 3.如果我从eclipse启动Tomcat(并指定类似于第1点的VM参数),将正确部署相同的.war。

我的猜测是catalina.bat和eclipse如何初始化VM参数之间存在差异。或许我应该以某种方式将我的项目.jars附加到Tomcat。

感谢您的任何提示。我可以提供所需的更多细节

2 个答案:

答案 0 :(得分:0)

根据评论,如果没有更多信息,很难知道发生了什么,但也许这会有所帮助。 Tomcat调用URL.setURLStreamHandlerFactory来设置自己的URLStreamHandlerFactory,它会覆盖java.protocol.handler.pkgs系统属性的默认行为。然后,您无法在不破坏内部Tomcat功能的情况下使用自己的处理程序调用{​​{1}}。 URLStreamHandlers系统当然不是Java的最大特色。

我发现可靠地使用我自己的流处理程序的唯一方法是将其传递到URL constructor

URL.setURLStreamHandlerFactory

答案 1 :(得分:0)

我们注意到-Djava.protocol.handler.pkgs =“my.protocol”在Tomcat 6.0.x中工作如果协议实现在Tomcat lib文件夹中而不是在战争中...

也许这有助于其他人