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