当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:\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的时候发生了什么?的更多相关文章
- 浅谈Eclipse调用Tomcat服务的原理
浅谈Eclipse调用Tomcat服务的原理 转:http://www.thinksaas.cn/group/topic/341645/ 转:http://www.173it.cn/Html/?581 ...
- Eclipse调用Tomcat出错
错误提示:The server cannot be started because one or more of the ports are invalid. Open the server edit ...
- 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. ...
- Maven中使用ssm框架出现:org.apache.tomcat.util.modeler.BaseModelMBean.invoke 调用方法[manageApp]时发生异常
org.apache.tomcat.util.modeler.BaseModelMBean.invoke 调用方法[manageApp]时发生异常 首先可以排查一下像: @RequestMapping ...
- eclipse 使用tomcat运行JavaWeb项目,文件修改后为何不用重启tomcat? (运行web项目的4种方式)探究
1.情景说明 在eclipse中,为什么Java文件修改后,重启tomcat class文件才能生效? 为什么jsp修改后,不需重启tomcat就能立即生效? 为什么静 ...
- 如何在Eclipse和Tomcat的Debug过程中启用热部署
参考的地址是 http://blog.redfin.com/devblog/2009/09/how_to_set_up_hot_code_replacement_with_tomcat_and_ecl ...
- [Eclipse] Eclipse配置Tomcat插件
1 . Eclipse IDE 3.6 for Java EE Developersat- 5.5.28 或者以上版本 : 2 . 安装 Tomcat 插件 , 文件名: tomcatPluginV3 ...
- Eclipse 中Tomcat 启动 与直接启动Tomcat的区别
这段时间不用Java 了突然发现在用的时候出问题了. 首先现在Eclipse和Tomcat,解压后 如图1所示: 图1: 进入里面的bin文件目录后发现有 如图2所示包含了startup.bat,st ...
- 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 ...
随机推荐
- android.support.v7.app.AppCompatActivity不能使用的解决办法
最近Android Studio 更新到4.0版本后,在构建项目时使用 android.support.v7.XX android.support.v4.XX 发现在xml文件中,原先我最常使用的Dr ...
- Typecho反序列化漏洞
Typecho Typecho是一款快速建博客的程序,外观简洁,应用广泛.这次的漏洞通过install.php安装程序页面的反序列化函数,造成了命令执行,Typecho 1.1(15.5.12)之前的 ...
- Codeforces Round #672 (Div. 2) A - C1题解
[Codeforces Round #672 (Div. 2) A - C1 ] 题目链接# A. Cubes Sorting 思路: " If Wheatley needs more th ...
- Ribbon自定义负载均衡策略,在网关实现类似Ip_hash的负载均衡,ribbon给单个服务配置属性
背景: 我需要在网关实现一种功能,某个用户的请求永远打在后台指定的服务,也就是根据ip地址进行负载均衡 原理: 在ribbon的配置类下: 那我们自己创建一个IRule的实现类,模仿ZoneAvoid ...
- windows 10 启动修复无法自动修复此计算机
1. 失败后有两个选项卡:关机和高级选项,选择高级选项 2. 然后选择疑难解答 3. 选择高级选项 4. 选择回退到以前的版本 接下来需要登录,选择恢复到上一次正常启动的状态,注意选择保留数据,会有提 ...
- IDEA配置jQuery,$符号不再显示黄色波浪线
在使用IDEA搭建Maven的Web环境时,编写的JQuery入口函数时,遇到了未知符号的提示,并且在前端页面js的console里报错. 以下是错误信息: 解决方案: 继续看图: 配置成功生效: ...
- 038 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 05 案例演示switch结构-星期的表示案例以及总结
038 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 05 案例演示switch结构-星期的表示案例以及总结 本文知识点:案例演示switch结构并对sw ...
- C++中union的使用方法
转载:https://blog.csdn.net/hou09tian/article/details/80816445 1 概述 1.1 定义 union即为联合,它是一种特殊的类.通过关键字unio ...
- >>8) & 0xFF中的 >> 和 &0xFF 的作用
参考:https://blog.csdn.net/iamgamer/article/details/79354617 其中有两个位运算,一个是>>,一个是&. 0xff的作用一: ...
- Linux基础入门 vim常用命令详解
介绍 vim是一个文本编辑程序 没有菜单,只有命令,且命令繁多 命令行模式下相关命令 移动光标 h: ← 左移 l: → 右移 j: ↓ 下移 k: ↑ 上移 gg: 光标移动文件 ...