Code Bye

tomcat部署多个项目(A.B.C),B无法调用A问题求教

描述:我在tomcat部署了3个项目(projectA,projectB,projectC) 我在tomcat的servlet.xml中配置了让projectC先启动。这是没问题的。但是我想projectA启动时通过HttpConnection去访问projectC的serlvet就访问不了,并出现错误:java.net.SocketTimeoutException: Read timed out。。。怎么解决这个问题呢??各位大神,棒棒忙。。困扰了些许时间。。谢谢

启动时的打印。

-----------------------C start up---------------------
2015-4-12 21:07:17 org.apache.catalina.startup.HostConfig deployDescriptor
信息: Deploying configuration descriptor host-manager.xml
2015-4-12 21:07:17 org.apache.catalina.startup.HostConfig deployDescriptor
信息: Deploying configuration descriptor manager.xml
2015-4-12 21:07:17 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory docs
2015-4-12 21:07:17 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory examples
2015-4-12 21:07:17 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: contextInitialized()
2015-4-12 21:07:17 org.apache.catalina.core.ApplicationContext log
信息: SessionListener: contextInitialized()
2015-4-12 21:07:17 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory projectA
-----------------------A start up---------------------
2015-4-12 21:07:18 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory projectB
-----------------------B start up---------------------
2015-4-12 21:07:18 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory ROOT
2015-4-12 21:07:18 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2015-4-12 21:07:18 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8009
2015-4-12 21:07:18 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/26  config=null
2015-4-12 21:07:18 org.apache.catalina.startup.Catalina start
信息: Server startup in 1137 ms

20分
是不是跨域的原因?或者直接用RMI吧,感觉好浪费…………
引用 1 楼 XiaoCaiErDie 的回复:

是不是跨域的原因?或者直接用RMI吧,感觉好浪费…………

1.启动时的打印是A还没有调用C的时候,我只是想说明。是C先启动。。。

2.然后我在A启动时加了HttpConnection去调用C的servlet但是就是不行。。必须三个都启动完显示:信息: Server startup in 1137 ms才能去调用

我现在想到的办法只能是启动两个TOMCAT,一个放projectC,一个放A,B.先启动projectC然后在启动其余两个是没有问题的。。

延   迟   调   用
引用 3 楼 lyw985 的回复:

延   迟   调   用

可以具体一些吗?

30分
	public void a() throws InterruptedException{
		try {
			// 做一些事情
		} catch (Exception e) {
			Thread.sleep(10000);
			a();
		}
	}
引用 5 楼 lyw985 的回复:
	public void a() throws InterruptedException{
		try {
			// 做一些事情
		} catch (Exception e) {
			Thread.sleep(10000);
			a();
		}
	}
引用 5 楼 lyw985 的回复:
	public void a() throws InterruptedException{
		try {
			// 做一些事情
		} catch (Exception e) {
			Thread.sleep(10000);
			a();
		}
	}

你这种不行。。tomcat必须全部项目启动完了,才能调用。。

50分
请仔细看我的代码
public void a() throws InterruptedException{
    try {
        // A项目访问C项目
    } catch (Exception e) {
// 无法调用时,进入这里,休息10秒
        Thread.sleep(10000);
//再重新调用本方法
        a();
    }
}
引用 1 楼 XiaoCaiErDie 的回复:

是不是跨域的原因?或者直接用RMI吧,感觉好浪费…………

查询资料后已经弄好了。就是在tomcat的server.xml中配置两个<service></service>即可(新的service修改对应的端口号就好)

例如:

 <Service name="Catalina">
<Connector port="8215" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
 <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
           <Context path="/projectC" docBase="c:\projectC"/> 
      </Host>
   </Engine>
</Service>



 <Service name="projectA">
....
 <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
           <Context path="/projectA" docBase="c:\projectA"/> 
      </Host>
...
</Service>

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明tomcat部署多个项目(A.B.C),B无法调用A问题求教