目录
Tomcat部署原理
- 配置文件server.xml
- 网站根目录
- 虚拟目录
配置文件server.xml
这个配置文件的位置是Tomcat安装目录下的conf/server.xml。
各节点的详细解释点这里
网站根目录
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="/" docBase="C:\\javaeedemo\\j2ee\\web" debug="0" reloadable="false" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
Host节点配置一个虚拟主机,name属性设置域名,appBase属性设置该虚拟主机映射的网站根目录(相对路径以及绝对路径都行,相对路径相对的是Tomcat的安装目录,这里设置的是Tomcat安装目录下的webapps目录),这个根目录是应用的存放点。 unpackWARs属性为true表示这个网站根目录下的.war文件将被自动解压缩,autoDeploy为true表示这个网站根目录下的子目录将被自动部署成应用并且自动检测 appBase 目录下面的文件变化从而自动应用到正在运行的 Web 应用程序。
我们可以把web应用或者打包好的.war文件放到网站根目录下,Tomcat会自动部署应用。
虚拟目录
server.xml文件中Host节点下的Context节点可以设置虚拟目录,即单独为某个web应用自定义路由,与appBase设置的网站根目录可以同时存在,在网站根目录下的应用会自动生成一个路由:协议://域名:端口号/项目名。如果自定义路由与自动生成的路由相同,则自定义路由会覆盖自动生成路由。Tomcat默认定义了一个路由(将协议://域名:端口号映射到Tomcat安装目录下的网站根目录下的ROOT目录)
例如:
<Context path="/" docBase="C:\\javaeedemo\\j2ee\\web" debug="0" reloadable="false" />
path设置访问路径,即路由,docBase是真实路径,可以是绝对路径也可以是相对路径(相对于appBase设置的路径),上述代码的路由为协议://域名:端口号/Servlet名称
无论是自动生成路由还是自定义路由,其映射到的目录下面必须包含WEB-INF一级子目录(一般为项目下WebContent目录下的内容拷贝)
Eclipse结合Tomcat部署原理
在Eclipse中启动Tomcat,实际上是启动了一个JAVA进程,这一点我们可以从启动Tomcat时控制面板打印的信息看出,我们随时可以关闭这个进程
注意,不能同时启动外部所安装的Tomcat以及通过Eclipse启动Tomcat。
在Eclipse中启动Tomcat时,实际上是启动了一个Tomcat的副本,这个副本是一个以tmp+一个数字命名的目录,该目录的位置为项目工作空间(workspace,例如我的项目工作空间为C:\Users\me\eclipse-workspace).metadata.plugins\org.eclipse.wst.server.core\tmp+加一个数字,该目录下拷贝了Tomcat安装目录下的东西,包括bin,conf,webapps等,此外,还新增了wtpwebapps目录。
而当我们在Eclipse中部署应用到Tomcat的时候,实际上是把项目(假设项目名为j2eeDemo)WebContent目录下的东西复制到了副本Tomcat的wtpwebapps目录的对应项目目录下(C:\Users\me\eclipse-workspace.metadata.plugins\org.eclipse.wst.server.core\tmp+加一个数字\wtpwebapps\j2eeDemo),即把项目部署到了副本Tomcat的网站根目录wtpwebapps下。此时Tomcat副本的conf下的配置文件server.xml会自动新增一个Context节点用来定义一条自定义路由,这条路由将会映射到C:\Users\me\eclipse-workspace.metadata.plugins\org.eclipse.wst.server.core\tmp+加一个数字\wtpwebapps\j2eeDemo这个目录
<Context docBase="C:\\Users\\me\\eclipse-workspace\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp+加一个数字\\wtpwebapps\\j2eeDemo" path="/j2eeDemo" reloadable="true"/>
参考:浅谈Eclipse调用Tomcat服务的原理,浅谈eclipse调用tomcat服务的原理,Eclipse调用Tomcat服务的原理
Eclipse修改web项目部署位置
Eclipse中部署方式有三种
1.使用eclipse的工作空间,以上述为例就是 C:\Users\me\eclipse-workspace.metadata.plugins\org.eclipse.wst.server.core,此种方式需要创建Tomcat副本,这也是Eclipse默认的部署方式。
2.使用tomcat的安装目录。
3.自定义路径,这里就是自己选择目录了。
而Eclipse默认网站根目录为wtpwebapps而不是webapps。表示的是项目将会被部署到相应Tomcat副本的wtpwebapps目录下。
那么如何修改这些部署方式和路径呢?
我们可以双击server服务器
可以看到如上图界面,这时就可以更改部署方式以及更改Deploy path网站根目录。如果发现上图要修改的地方为灰色不能修改时,要先把部署在该Tomcat副本下的应用清空,点击上图下方Modules删除应用。
注意修改完要记得保存才能生效。