Servlet主要任务
读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。
Servlet 包
Java Servlet 是运行在带有支持 Java Servlet 规范的解释器的 web 服务器上的 Java 类。
Servlet 可以使用 javax.servlet 和 javax.servlet.http 包创建,它是 Java 企业版的标准组成部分,Java 企业版是支持大型开发项目的 Java 类库的扩展版本。
这些类实现 Java Servlet 和 JSP 规范。在写本教程的时候,二者相应的版本分别是 Java Servlet 2.5 和 JSP 2.1。
Java Servlet 就像任何其他的 Java 类一样已经被创建和编译。在您安装 Servlet 包并把它们添加到您的计算机上的 Classpath 类路径中之后,您就可以通过 JDK 的 Java 编译器或任何其他编译器来编译 Servlet。
WEB工程结构
在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目录下的类具有优先权。
应用发布是通过jar 打包
jar -cvf war包名 .
打包后将war文件复制到tomcat的apps目录下即可直接访问
访问是需要对应war包路径
Servlet 分两个类java.servlet 及java.servlet.http
Servlet调用方式主要有3中方法直接调用url、通过form表单方式、通过javascript脚本方式提交servlet表单等方式。