概念一直是软件行业频繁出现的东西,很多时候,学习计算机软件开发遇到困难不是因为技术本身有多么复杂,而是因为对某些概念的不理解。JavaWeb作为JavaEE技术体系的一部分,应该是目前所有Web开发技术中最复杂的一种,很多初学者,或者是从ASP、PHP转移过来的开发者都会遇到概念方面的困难,觉得她们非常深奥,难以理解。其实这都是厂家为了宣传需要,将概念复杂化、学术化了。很多概念都是简单的,可以被我们掌握的。在这里,我们首先去澄清JavaWeb开发中几个常用的基本概念。
1、Web容器
所有的程序运行都需要有一个必要的运行环境。这个环境可以是软件,也可以是硬件,或者是软件和硬件的结合。比如说Windows操作系统需要运行在硬件基础上;Office软件需要运行在操作系统上。并且程序与运行环境之间会有一定的数据交换,比如操作系统会将运行指令传递给硬件,硬件也会将指令运行结果传递给操作系统。JavaWeb程序也需要一个运行环境才能够执行。这种运行JavaWeb程序的环境被称为Web容器,JavaWeb程序与Web容器之间存在数据交互。目前主要存在两种类型的JavaWeb容器:一种是独立的JavaWeb容器,在这种容器里面只能运行Web程序,这种容器一般也叫做Web服务器,如Tomcat等;另一种是与其他JavaEE容器混合在一起的Web容器,Web容器负责运行Web程序,其他容器负责运行EJB等程序,如WebLogic等。
当用户通过浏览器等Web客户端软件向服务器发出一个请求之后,首先接收到这个请求的是Web容器,Web容器会将请求信息封装到一个HttpServletRequest类型的Java对象中,并将对象传递给JavaWeb程序。JavaWeb程序可以从HttpServletRequest提取用户发出的请求信息,进行适当的处理之后,将处理结果放置到HttpServletResponse中,然或由Web容器解析HttpServletResponse对象内容,并将解析结果以浏览器能够识别的HTML等格式返回给浏览器等客户端。在这个过程中,HttpServletRequest和HttpServletResponse就如同两条渡船,负责在Web容器和JavaWeb程序之间传递信息。
2、Web元件
Web元件是构成Web应用,能够对来自浏览器等客户端请求做出回应的基本单元。在JavaWeb应用中,所提供的Web元件有Servlet、JavaServerPages(JSP)、JavaServerFaces(JSF)等。另外还可以使用其他类型Web应用同样使用的内容,比如HTML文件、静态图片等。事实上JavaWeb只提供了一种Web元件元件,就是Servlet,JSP、JSF等都是基于Servlet的衍生技术。Servlet实质就是一个有特殊继承关系要求的Java类,理解Servlet就基本上完全理解JavaWeb技术了。
3、Web模块
在JavaEE技术体系中,除了JavaWeb以外,还包括EJB等其他技术。每个技术体系会运行在各自的容器当中,不同的部分组合在一起构成完整的JavaEE应用,每个部分根据自己的特点被称为JavaWeb模块或者EJB模块。之所以把他们称为模块,是因为希望JavaEE应用不同部分能像积木一样组合出更大、更复杂的应用出来,并且每个部分保证其独立性。不同的模块都有自己特定的目录结构要求。JavaWeb模块的目录结构要求如下:
◆应用文档根目录。改目录是JavaWeb模块的最上层目录,组成Web模块的所有Web元件以及配置文件等都包含在该目录或者子目录下。在改目录下可以直接存放HTML文件,图片文件等。
◆WEB-INF目录。改目录位于应用文档根目录下,用来保存那些不希望被浏览器等客户端访问的文件,比如发布描述文件、编译之后的类文件。因为这些文件是由由Web容器进行解释或者执行的。浏览器不可以直接看到这些文件,只能看到这些文件的执行结果。
◆classes目录。该目录位于WEB-INF目录下,用来保存编译之后的Java类文件,比如Servlet、辅助类、其他业务处理类等。
◆web.xml文件。该文件位于WEB-INF目录下,是Web应用的部署描述文件,用来与定义Web应用运行相关的信息,比如执行逻辑,Servlet等Web元件的访问路径等。改文件的格式必须符合所使用的Servlet版本的规格要求。
对于JavaWeb模块目录中WEB-INF、web.xml、classes、tags、lib这些内容以外,用户可以根据自己的需要在Web应用文档根目录下创建其他目录,比如可以为图片、不同用途的HTML或者JSP单独创建目录;还可以为不用的Java类在classes下创建包目录。如果在你的Web应用中没有使用到Servlet、过滤器、监听器等JavaWeb元件,可以没有web.xml文件;如果没有使用到标签,则可以没有tags目录。
Web模块的发布工作,可以直接以目录的形式发布,也可以打包成jar格式文件进行发布。因为用途和内容的特殊性,打包文件的扩展名会采用.war而不是.jar。另外如果不是发布到独立的Web服务器上,而是发布到与其他JavaEE一起使用的企业应用服务器上,还需要编写一个与企业应用服务器相关的配置文件,这个文件对于不同的企业应用服务器也不同,比如发布到glassfish服务器上,需要编写的文件时sun-web.xml。<