在Sun的Java Servlet规范中,对Java Web应用做了这样的定义:“Java Web应用由一组Servlet、HTML页面、类,以及其他可以被绑定的资源构成。它可以在第三方供应商提供的实现Servlet规范的Web应用容器中运行。” Java Web应用的主要特征之一就是与ServletContext的关联。每个Web应用都有且只有一个ServletContext。当Java Web应用运行时,Servlet容器为每个Web应用创建唯一的ServletContext对象,使得它能被同一个Web应用中的所有组件共享。Servlet容器(例如Tomcat)控制这种关联,并且保证在ServletContext中存储对象时,不会发生冲突。
Java Web应用程序必须使用规范的目录结构:
应用程序根目录
-- WEB-INF目录:必须目录 WEB-INF是受保护文件夹,我们不能通过常规的方法(浏览器请求)来访问里面的资源。
-- web.xml:Web应用部署描述文件,必须目录
-- classes目录:存放字节码文件
-- lib目录:存放第三方类库文件
-- TLD文件:标签库描述文件
-- 其他静态文件:HTML、CSS、JavaScript、图片等
实际项目开发中推荐的目录结构
--project
--src
--java 运行的java源代码
--test 单元测试的源代码
--configs 配置文件
--WebRoot
--WEB-INF
--classes
--lib (运行时需要的jar,当然开发肯定也需要该lib)
--web.xml
--css
--js
--images
--jsp(view) (模板文件 。jsp,mv)
--build.propertis (ant的)
--build.xml (ant)
--dist (打成jar、war的存放路径)
关于jsp(view) 的放置路径,我们也可以将它放到WEB-INF目录下,但是这样就不能通过浏览器直接请求到jsp页面,必须经过服务器跳转,这样可以阻止用户下载到jsp页面,其实放在WebRoot 目录下,再加一个过滤器也可以有一样的效果。这个问题网上有很多讨论,我没找到正式的结论,基本上是习惯或者个人喜好的问题。
在classes以及lib子目录下,都可以存放Java类文件。在运行过程中,Tomcat的类装载器先装载classes目录下的类,再装载lib目录下的类。因此,如果两个目录下存在同名的类,classes目录下的类具有优先权。
web.xml文件
Java Web应用通过一个基于XML的发布描述符文件来配置其发布信息,这个文件名为web.xml,它存放于WEB-INF子目录下。在web.xml文件中可包含如下配置信息:
Servlet的定义
Servlet的初始化参数
Servlet以及JSP的映射
安全域配置参数
welcome文件清单
资源引用
环境变量的定义
(web.xml配置文件详解:http://blog.csdn.net/itmagic_jack/article/details/6293042
http://www.cnblogs.com/nami/archive/2012/09/03/2669098.html )
( Web.xml 加载顺序: http://blog.csdn.net/xiongyayun428/article/details/6992995 )