一个Web应用程序基本上由以下项目组成:
1.静态资源(HTML,CSS,图片,声音等)
2.Servlet
3.JSP
4.自定义类
5.工具类
6.部署描述文件(web.xml等)、设置信息(Annotation等)
Web应用程序目录结构必须符合规范。例如,如果一个应用程序的环境路径(Context path)是/HelloServlet,则所有的资源项目必须以/HelloServlet为根目录依规定结构摆放。基本上根目录中的资源可以直接下载,若index.html位于/HelloServlet下,则可以直接以/HelloServlet/index.html来取得。
Web应用程序存在一个特殊的/WEB-INF子目录,此目录中存在的资源不会被列入应用程序根目录中可直接访问的项。即,客户端(如Browser)不可以直接请求/WEB-INF中的资源(直接在网址上指明访问/WEB-INF),否则就是404 Not Found的错误结果。/WEB-INF中的资源项目有着一定的名称与结构。
(1)/WEB-INF/web.xml 是部署描述文件
(2)/WEB-INF/classes 用来放置应用程序用到的自定义类(.class),必须包括包(package)结构。
(3)/WEB-INF/lib 用来放置应用程序用到的JAR文件。
Web应用程序用到的JAR文件,其中可以放置Servlet、JSP、自定义类、工具类、部署描述文件等,应用程序的类载入器可以从JAR中载入对应的资源。
可以在JAR文件中的/META-INF/resources目录中放置静态资源或JSP等,例如若在/META-INF中放个index.html,若请求的URL中包括/HelloServlet/index.html,但实际上/HelloServlet根目录下不存在index.html,则会使用JAR中的/META-INF/resources/index.html。
如果要用到某个类,则Web应用程序会到/WEB-INF/classes中试着载入类,若无,再试着从/WEB-INF/lib的JAR文件中寻找类文件(若还没有找到,则会到容器实现本身存放类或JAR的目录中寻找,但位置视不同实现厂商而有所不同,以Tomcat为例,搜索的路径是Tomcat的安装目录下的lib目录)。
客户端不能直接请求/WEB-INF中的资源,但可以通过程序的控制,让程序来取得/WEB-INF中的资源,如使用ServletContext的getResource()与getResourceAsStream(),或是通过RequestDispatcher请求调派。
Web app 默认主页的设置:访问URL如:localhost:8080/FirstServlet/
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
如果找不到以上的文件,则会尝试至JAR的/META-INF/resources中寻找已放置的资源页面。
整个Web应用可以被封装为一个WAR文件,如FirstServlet.war,以便于部署至Web容器。