当eclipse调用tomcat的时候发生了什么?

  下午在看《tomcat权威指南》的时候想到了这么一个问题:当我在eclipse里调用本机上的一个tomcat运行一个web项目的时候,都发生了什么?

  之前做本科毕设的时候用的是MyEclipse,当时配置好tomcat服务器,运行一个web项目之后,可以在tomcat的webapps文件夹下看到我部署的项目,比如我的项目叫helloworld,那么我在webapps目录下就会看到一个文件夹,名字为helloworld,这个文件夹就是我的web站点。当tomcat运行起来的时候,我就可以在tomcat的页面上访问并管理我的项目了。比如我的tomcat的url是http://localhost:8080,那么我的项目就可以通过http://localhost:8080/helloworld来访问了。这是因为MyEclipse会将我的工程复制一份到tomcat的webapps目录下。

  而当我使用eclipse的时候,情况就发生了变化。

  首先,我在tomcat的webapps目录下看不到我部署的项目,在wtpwebapps目录下也没有。其次,我在eclipse里对tomcat的配置里的configurations里找到了这么一些个参数“-Dcatalina.base="E:WorkspacesEclipseJ2EE.metadata.pluginsorg.eclipse.wst.server.core mp2" -Dcatalina.home="D:Servers omcat7" -Dwtp.deploy="E:WorkspacesEclipseJ2EE.metadata.pluginsorg.eclipse.wst.server.core mp2wtpwebapps" -Djava.endorsed.dirs="D:Servers omcat7endorsed"”,同时根据参数中“E:WorkspacesEclipseJ2EE.metadata.pluginsorg.eclipse.wst.server.core mp2”这个路径找到了一个和tomcat很像的文件夹,并且在wtpwebapps目录下找到了我的项目。这些是怎么回事儿呢?

  在上网查阅了一些资料后我才知道原来是这样的:

  eclipse在启动tomcat的时候,调用了jdk中的javaw.exe这个程序,并且将我上面看到的那些参数添加了进去。下面看看这些参数的主要部分:

  • Dcatalina.base:它指定了catalina.base的位置。tomcat允许运行多个实例,catalina.base就是各个实例的工作目录,也就是我们在eclipse启动的这个tomcat实例的工作目录。它的目录结构和tomcat安装目录下的结构非常相似,只不过没有bin和lib目录。
  • Dcatalina.home:这个参数就是tomcat的安装目录,也就是各个tomcat实例公共拥有的目录。
  • Dwtp.deploy:这个就是你把项目部署到哪里的路径。比如我的helloworld项目就在这个参数指明的文件夹下。

  此时如果你访问http://localhost:8080会提示404,找不到页面,但是http://localhost:8080/helloworld可以访问到我的项目。那来看conf文件夹下的server.xml文件,找到host标签,可以找到以下代码:

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Context docBase="E:WorkspacesEclipseJ2EE.metadata.pluginsorg.eclipse.wst.server.core	mp2wtpwebappsROOT" path="" reloadable="false"/>
<Context docBase="E:WorkspacesEclipseJ2EE.metadata.pluginsorg.eclipse.wst.server.core	mp2wtpwebappsHelloWorld" path="/HelloWorld" reloadable="true" source="org.eclipse.jst.jee.server:HelloWorld"/>
</Host>

  其中第一个context指明了ROOT,但是这个路径下没有文件,所以访问http://localhost:8080是没有页面的。而下面那个context就是我的helloworld项目,指明了路径并且路径下有项目文件,所以才可以访问到。

  当然,这些配置只是作为eclipse启动的这个tomcat实例的配置,如果我们不使用eclipse,直接在tomcat的安装目录启动tomcat,那么我们是可以访问到http://localhost:8080的主页面,并且在网页上对tomcat进行监管的。

  最后附上一张图,解释一下在eclipse里对tomcat进行配置的地方。想要修改上面说的那些参数,只要点击中间的Open launch configuration,在弹出的对话框中找到Arguments标签,就可以在里面修改了。当然你也可以在Server Locations里面进行更改,只不过需要先在server视图的tomcat服务器上右键Clean...一下才可以编辑。


附:

  关于javaw,它是一个win32的GUI应用程序,它帮助应用去启动自己的GUI界面而不会启动控制台console界面。比如启动eclipse就会用到这个javaw程序,而启动一个输出“hello”文本的程序就只用java.exe就好了。

  

原文地址:https://www.cnblogs.com/still-waters/p/eclipse-using-tomcat.html