下午在看《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:\Workspaces\EclipseJ2EE\.metadata\.plugins\org.eclipse.wst.server.core\tmp2" -Dcatalina.home="D:\Servers\tomcat7" -Dwtp.deploy="E:\Workspaces\EclipseJ2EE\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps" -Djava.endorsed.dirs="D:\Servers\tomcat7\endorsed"”,同时根据参数中“E:\Workspaces\EclipseJ2EE\.metadata\.plugins\org.eclipse.wst.server.core\tmp2”这个路径找到了一个和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:\Workspaces\EclipseJ2EE\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\ROOT" path="" reloadable="false"/>
<Context docBase="E:\Workspaces\EclipseJ2EE\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\HelloWorld" 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就好了。

  

当eclipse调用tomcat的时候发生了什么?的更多相关文章

  1. 浅谈Eclipse调用Tomcat服务的原理

    浅谈Eclipse调用Tomcat服务的原理 转:http://www.thinksaas.cn/group/topic/341645/ 转:http://www.173it.cn/Html/?581 ...

  2. Eclipse调用Tomcat出错

    错误提示:The server cannot be started because one or more of the ports are invalid. Open the server edit ...

  3. Eclipse启动Tomcat时发生java.lang.IllegalArgumentException: <session-config> element is limited to 1 occurrence

    在学习struts 2时,为了方便,直接从下载的struts的apps目录下的struts2-blank.war压缩包下的WEB-INF\复制的web.xml,当我启动Tomcat时,发生 java. ...

  4. Maven中使用ssm框架出现:org.apache.tomcat.util.modeler.BaseModelMBean.invoke 调用方法[manageApp]时发生异常

    org.apache.tomcat.util.modeler.BaseModelMBean.invoke 调用方法[manageApp]时发生异常 首先可以排查一下像: @RequestMapping ...

  5. eclipse 使用tomcat运行JavaWeb项目,文件修改后为何不用重启tomcat? (运行web项目的4种方式)探究

                    1.情景说明 在eclipse中,为什么Java文件修改后,重启tomcat class文件才能生效? 为什么jsp修改后,不需重启tomcat就能立即生效? 为什么静 ...

  6. 如何在Eclipse和Tomcat的Debug过程中启用热部署

    参考的地址是 http://blog.redfin.com/devblog/2009/09/how_to_set_up_hot_code_replacement_with_tomcat_and_ecl ...

  7. [Eclipse] Eclipse配置Tomcat插件

    1 . Eclipse IDE 3.6 for Java EE Developersat- 5.5.28 或者以上版本 : 2 . 安装 Tomcat 插件 , 文件名: tomcatPluginV3 ...

  8. Eclipse 中Tomcat 启动 与直接启动Tomcat的区别

    这段时间不用Java 了突然发现在用的时候出问题了. 首先现在Eclipse和Tomcat,解压后 如图1所示: 图1: 进入里面的bin文件目录后发现有 如图2所示包含了startup.bat,st ...

  9. eclipse中tomcat发布失败(Could not delete May be locked by another process)原因及解决办法

    在eclipse中tomcat发布项目时,偶尔出现了以下情况: publishing to tomcat v7.0 services at localhost has encountered a pr ...

随机推荐

  1. android.support.v7.app.AppCompatActivity不能使用的解决办法

    最近Android Studio 更新到4.0版本后,在构建项目时使用 android.support.v7.XX android.support.v4.XX 发现在xml文件中,原先我最常使用的Dr ...

  2. Typecho反序列化漏洞

    Typecho Typecho是一款快速建博客的程序,外观简洁,应用广泛.这次的漏洞通过install.php安装程序页面的反序列化函数,造成了命令执行,Typecho 1.1(15.5.12)之前的 ...

  3. Codeforces Round #672 (Div. 2) A - C1题解

    [Codeforces Round #672 (Div. 2) A - C1 ] 题目链接# A. Cubes Sorting 思路: " If Wheatley needs more th ...

  4. Ribbon自定义负载均衡策略,在网关实现类似Ip_hash的负载均衡,ribbon给单个服务配置属性

    背景: 我需要在网关实现一种功能,某个用户的请求永远打在后台指定的服务,也就是根据ip地址进行负载均衡 原理: 在ribbon的配置类下: 那我们自己创建一个IRule的实现类,模仿ZoneAvoid ...

  5. windows 10 启动修复无法自动修复此计算机

    1. 失败后有两个选项卡:关机和高级选项,选择高级选项 2. 然后选择疑难解答 3. 选择高级选项 4. 选择回退到以前的版本 接下来需要登录,选择恢复到上一次正常启动的状态,注意选择保留数据,会有提 ...

  6. IDEA配置jQuery,$符号不再显示黄色波浪线

    在使用IDEA搭建Maven的Web环境时,编写的JQuery入口函数时,遇到了未知符号的提示,并且在前端页面js的console里报错. 以下是错误信息:  解决方案:  继续看图: 配置成功生效: ...

  7. 038 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 05 案例演示switch结构-星期的表示案例以及总结

    038 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 05 案例演示switch结构-星期的表示案例以及总结 本文知识点:案例演示switch结构并对sw ...

  8. C++中union的使用方法

    转载:https://blog.csdn.net/hou09tian/article/details/80816445 1 概述 1.1 定义 union即为联合,它是一种特殊的类.通过关键字unio ...

  9. >>8) & 0xFF中的 >> 和 &0xFF 的作用

    参考:https://blog.csdn.net/iamgamer/article/details/79354617 其中有两个位运算,一个是>>,一个是&. 0xff的作用一: ...

  10. Linux基础入门 vim常用命令详解

    介绍 vim是一个文本编辑程序 没有菜单,只有命令,且命令繁多 命令行模式下相关命令 移动光标 ​ h: ← 左移 ​ l: → 右移 ​ j: ↓ 下移 ​ k: ↑ 上移 ​ gg: 光标移动文件 ...