当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 ...
随机推荐
- Redis5设计与源码分析读后感(四)压缩列表
一.引言 上一节我们总结了跳跃表的知识,我们知道了有序数组可以用跳跃表实现,也可以用压缩列表来实现,这一篇文章我们来总结一下压缩列表相关的知识. 二.压缩列表简介 定义:压缩列表 ziplist 本质 ...
- Spring Boot学习(四)常用注解
一.注解对照表 注解 使用位置 作用 @Controller 类名上方 声明此类是一个SpringMVC Controller 对象,处理http请求 @RequestMapping 类或方 ...
- Spring框架分为哪七大模块,各模块的主要功能作用是什么
七大模块,如下: 1. Spring Core: Core封装包是框架的最基础部分,提供IOC和依赖注入特性.这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性 ...
- 刷题[WUSTCTF2020]CV Maker
解题思路 好家伙,打开一看像是cms,又看名字CV Maker.我以为直接要搜cve打了.搜了一会发现没什么啊.那先正常做把. 注册 注册成功后这里报错,猜测可能有注入点.先放在这里,继续登陆.发现是 ...
- 基于python的webUI自动化-小白基础篇
最近打算研究一下基于python的webUI自动化,先自学了一下相关基础知识,大概用了一个多月的时间,主要是找视频,一边看视频或者文档一边对照着敲代码运行. 重点强调:一定要一边看一边对照着敲代码运行 ...
- textarea输入框回车加大高度
JavaScript var agt = navigator.userAgent.toLowerCase(); var is_op = (agt.indexOf("opera") ...
- Spring学习(三)--Spring的IOC
1.BeanFactory和FactoryBean BeanFactory是一个接口类,定义了IOC容器最基本的形式,提供了IOC容器所应该遵守的基本服务契约. FactoryBean是一个能产生或者 ...
- Centos-检查文件系统并尝试修复-fsck
fsck 检查文件系统并尝试修改错误,修复对象为设备,本质上是调用 /sbin/fsck.filesystemName 命令, filesystemName是指定设备的文件系统类型,如图分区中有文件丢 ...
- Python-用装饰器实现递归剪枝
求一个共有10个台阶的楼梯,从下走到上面,一次只能迈出1~3个台阶,并且不能后退,有多少中方法? 上台阶问题逻辑整理: 每次迈出都是 1~3 个台阶,剩下就是 7~9 个台阶 如果迈出1个台阶,需要求 ...
- py004.python的逻辑运算,随机数及判断语句if,elif,else
判断语句又称 "分支语句" if判断语句的格式: if 条件1: 条件1满足时,执行的代码 -- # 前面有缩进4个空格 elif 条件2: 条件2满足时,执行的代码 -- # 前 ...