WEB应用的目录结构及其在TOMCAT容器中的发布
1. WEB应用的目录结构
Servlet规范规定了JAVA WEB应用必须采用固定的目录结构,其应用的配置信息存放于WEB-INF/web.xml中,Servlet容器从中读取配置信息。其基本目录结构如下:
![](https://img2023.cnblogs.com/blog/2755468/202308/2755468-20230809203721348-1155549001.png)
其中WEB-INF目录下的文件只能被服务器端的组件访问,浏览器端无法直接访问。Servlet容器的类加载器优先加载classes下的类,再加载lib下的jar文件,同名情况下,classes目录的类优先。
1.1 web.xml文件
web.xml文件是Java web应用的发布描述性文件,Servlet容器加载和启动应用时会读取此文件。以下为在web.xml里定义servlet类的形式:
![](https://img2023.cnblogs.com/blog/2755468/202308/2755468-20230809203721078-514979393.png)
web.xml中的<servlet>元素用于定义Servlet类。其子元素如下:
![](https://img2023.cnblogs.com/blog/2755468/202308/2755468-20230809203721462-871691169.png)
<servlet-mapping>元素为Servlet映射一个URL,<url-pattern>子元素即访问Servlet的相对URL路径。<welcome-file-list>元素为WEB应用的默认主页。
如上图配置,浏览器为了访问mypack.DispatcherServlet类,可以通过<url-pattern>里的/dispatcher来访问,比如浏览器访问http://localhost:8080/helloapp/dispatcher ,此时,从/dispatcher==><url-pattern>==><servlet-mapping>==><servlet-name>==><servlet-class>寻找,即可确定需要访问的类为mypack.DispatcherServlet类,然后TOMCAT类加载器再按以下顺序加载:
- WEB-INF/classes
- WEB-INF/lib
- TOMCAT的lib目录直接查找
- TOMCAT的lib目录的JAR文件中查找。
2. TOMCAT的目录结构
![](https://img2023.cnblogs.com/blog/2755468/202308/2755468-20230809203721416-685033155.png)
2.1 默认方式发布java web应用
直接将web应用复制到<CATALINAHOME>/webapps目录下。默认情况下,此目录中所有WEB应用运行在名为localhost的虚拟主机中,此localhost虚拟主机运行在名为Catalina的Engine组件中。(此为TOMCAT的conf/server.xml文件中的默认定义。也可以先打包再将打包文件直接放到<catalinahome>/webapps目录下。TOMCAT服务器在启动后将自动加载war文件并展开(通过TOMCAT的server.xml文件中<HOST>参元素的unpackWARs控制)WEB应用的目录结构文件可以通过jar 命令打包成war文件。比如:在D:\web目录下执行jar cvf D:\web.war *
,则代表将D:\web目录下所有文件打包为目标文件web.jar ,位于D盘下。展开时可使用 jar xvf D:\web.war
。jar 命令参数如下:
![](https://img2023.cnblogs.com/blog/2755468/202308/2755468-20230809203721417-1510997361.png)
2.2 按TOMCAT的元素发布WEB应用
Context元素主要属性如下:
![](https://img2023.cnblogs.com/blog/2755468/202308/2755468-20230809203721556-1092290944.png)
![](https://img2023.cnblogs.com/blog/2755468/202308/2755468-20230809203721213-970508300.png)
TOMCAT加载一个应用时,按以下顺序查找应用的元素:
- <catalina_home>/conf/context.xml ,适用于所有web应用;
- <catalina_home>/conf/engineName/hostName/context.xml.default.两个Name分别是<Engine>与<Host>的name属性。此文件适用于当前虚拟主机下的所有web应用。
- <catalina_home>/conf/engineName/hostName/contextpath.xml. contextpath代表单个Web应用的URL入口。
- WEB应用的META-INF/context.xml。
- <catalina_home>/conf/server.xml中的元素中查找<Context>子元素。该<Context>元素只适用于单个Web应用。
以第四种为例,可如下配置:
![](https://img2023.cnblogs.com/blog/2755468/202308/2755468-20230809203720890-620059452.png)
如果没有为WEB应用配置T0MCAT的Context元素,则TOMCAT提供默认的Context组件,如默认方式发布时即提供默认的Context组件。
2.3 配置TOMCAT的虚拟主机
<catalina_home>/conf/server.xml文件中可以在<Host>元素中定义虚拟主机,并对其命别名.
![](https://img2023.cnblogs.com/blog/2755468/202308/2755468-20230809203721171-373922394.png)
<Host>元素属性如下:
![](https://img2023.cnblogs.com/blog/2755468/202308/2755468-20230809203721513-28943657.png)
![](https://img2023.cnblogs.com/blog/2755468/202308/2755468-20230809203721530-1026095598.png)
web应用的目录要放在定义的虚拟主机的appBase目录下,比如:appBase: D:\webapps,则helloapp整个web目录路径为D:\webapps\helloapp. (定义虚拟机下的WEB应用的Context元素中的docBase是相对于虚拟机的appBase的。)每个虚拟主机都有一个默认web应用,其根目录为ROOT.如果要设置其默认应用,则Context元素中的path属性应定义为path="".
要使虚拟主机的定义生效,还需要在TOMCAT部署的主机上进行IP地址映射:
- 调整C:\Windows\System32\drivers\etc\hosts文件属性-安全-编辑,设置WINDOWS用户完全控制。
![](https://img2023.cnblogs.com/blog/2755468/202308/2755468-20230809203721371-1425141798.png)
- 记事本打开hosts文件,添加虚拟主机与本地主机的IP映射。
![](https://img2023.cnblogs.com/blog/2755468/202308/2755468-20230809203720839-2006710110.png)
127.0.0.1 与::1分别为IPv4与IPv6的IP地址。
参考文档:Tomcat与Java Web开发技术详解 www.javathinker.net