目前在通过Eclipse中插件启动Tomcat时遇到了个问题,就是访问http://localhost:8080/时出现HTTP Status 404 The requested resource (/) is not available.错误,但是通过http://localhost:8080/myapp访问项目时却没有问题,系统配置没有问题,而且手动运行%TOMCAT_HOME%/bin中的startup.bat和shutdown.bat都没有问题,能正确访问http://localhost:8080/,http://localhost:8080/manager,http://localhost:8080/admin/index.jsp。
开发环境
Eclipse
Version: 3.4.2
Build id: M20090211-1700
Tomcat 6.0.18
Tomcat插件
wtp-sdk-R-3.0.4-20090213193639
org.eclipse.jst.server.tomcat.core_1.1.104.v20081006.jar
org.eclipse.jst.server.tomcat.ui_1.1.101.v20080620.jar
解决方法
通过手动启动Tomcat时,是采用%TOMCAT_HOME%/webapps(包括docs,host-manager,manager,ROOT4个目录)作为默认的webapp目录的,%TOMCAT_HOME%/webapps目录下包括ROOT,对应服务器的根目录“/”,也就是通过http://localhost:8080/访问看到的Tomcat Welcome页面。
如果在Eclipse中通过插件启动Tomcat,则是采用%ECLIPSE_WORKSPACE_HOME%/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps作为webapp目录的,wtpwebapps下没有ROOT webapp或者有时包括一个空的ROOT webapp。在这种情况下,访问http://localhost:8080/就会看到HTTP error 404 或者一个空白页面。如果把%TOMCAT_HOME%/webapps下的docs,host-manager,manager,ROOT目录拷贝到wtpwebapps目录下,此时也是可以通过http://localhost:8080/访问看到的Tomcat Welcome页面。
Eclipse中的Tomcat插件默认是把%ECLIPSE_WORKSPACE_HOME%/.metadata作为Server Location的,因此当通过Eclispe插件启动Tomcat时,服务器中只运行了Eclipse工作空间中已发布到Tomcat上的项目。
双击Server视图中的“Tomcat 6 at localhost”,打开一个Tomcat Server编辑器,有一栏“Server Locations”是配置服务器的位置。注意:如果已经有项目Publish到Server上了(启动应用也会发布项目),Server Locations栏是不可修改的,可以先Remove项目并Clean Server,使Server Locations栏可修改。选择“Use Tomcat installation”,通过Eclispe插件启动Tomcat时,%TOMCAT_HOME%/webapps目录下的所有应用都会被启动。
如果只想运行Eclipse工作空间的应用项目,可以选择“Use workspace metadata”;反之如果希望同时运行其他Eclipse工作空间之外的应用项目,就可以选择“Use Tomcat installation”。
Tomcat6.0.18的配置问题
在解决问题的过程中还遇到另外一个问题,手动启动Tomcat6.0.18时也不能访问http://localhost:8080/host-manager,同样报HTTP Status 404 The requested resource (/) is not available.错误,而Tomcat5.0.25中就不存在这个问题。
原因:Tomcat6.0.18与Tomcat5.0.25的默认配置有一些不同。Tomcat6处于安全性的考虑,默认关闭了目录浏览功能的。否则,要是访问目录下没有默认首页,那么该目录下的文件列表就泄露了。
Tomcat-6.0.18/conf/web.xml配置如下:
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
同样的配置选项在Tomcat-5.0.25/conf/web.xml中配置如下:
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>
org.apache.catalina.servlets.DefaultServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
解决方法就是把Tomcat-6.0.18/conf/web.xml中的false改为true。