【转】
一个最简单的Web应用的目录结构如下所示:
Web应用的结构定义在Servlet的规范中,目前最新版本为3.1。
下载地址:https://jcp.org/aboutJava/communityprocess/final/jsr340/index.html
JSR340即Servlet3.1的规范中描述:Context path of an application determines the URL namespace of the contents of the Web application.
如果只是静态文件,都可以不需要WEB-INF以及web.xml,SimpleWebProject下只有一个index.jsp是可以直接访问到的。
WEB_INF目录
应用比较特殊的是WEB-INF目录,此路径不可以由外部直接访问到,因此对于class、jar、配置文件等需要受保护的资源,都应该放到此目录下。
但对于jar包中/META-INF/resource又是一种特殊情况,这里的资源被认为是静态资源,又可以直接被外部访问(其实这么用的场景很少,不用过多关注)。
META_INF目录
META-INF目录也比较特殊,外部不能直接访问。
如果发布程序使用war包,打包程序会把一些应用相关的信息写入到MANIFEST.MF文件中。
如果使用maven进行依赖管理,还会把maven的目录,内部是pom相关内容。
类加载器classloader
在WEB-INF目录的classes及lib子目录下,都可以存放Java类文件
应用的Class Loader是容器的Class Loader的一个子类。
应用的Class Loader需要能够加载class、lib以及各种资源,并且class的优先级高于lib。也就是类加载器必须先从WEB-INF/classes目录下加载类,然后从WEB-INF/lib目录下的JAR库中加载
所有的Class Loader都不能覆盖Java SE platform class,比如java.*和javax.*命名空间的资源等。
部署描述符(web.xml)
主要用于定义ServletContext、Session、Servlet、Servlet-Mapping、Listener、Filter,其它像Welcome File list等用的并不多。
Servlet容器根据web.xml就建立了外部请求到部署应用的Servlet的映射关系了。