学习目标
- 掌握 servlet 实现原理
- 掌握 servlet 生命周期
- 掌握 servlet 监听器的使用
Servlet概论
Servlet 是什么?
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
–servlet
使用 Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
Servlet 架构
下图显示了 Servlet 在 Web 应用程序中的位置。
Servlet 任务
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 类库的扩展版本。
Servlet与Tomcat版本
Servlet基础
创建动态web工程:
说明:
dynamic web module指servlet的版本,servlet被包含在tomcat中。
- dynamic web module 2.4 对应Tomcat 5.5
- dynamic web module 2.5 对应Tomcat 6.0
- dynamic web module 3.0 对应Tomcat 7.0
- dynamic web module 3.1 对应Tomcat 7.0或者更高
- dynamic web module 4 对应Tomcat 8.0或者更高
一直next直到如下:
web.xml配置servlet
注解配置Servlet
在servlet3.0以后,我们可以不用再web.xml里面配置servlet,只需要加上@WebServlet注解就可以修改该servlet的属性了。
下面是@WebServlet的属性列表。
属性名 | 类型 | 描述 |
---|---|---|
name | String | 指定Servlet 的 name 属性,等价于 。如果没有显式指定,则该 Servlet 的取值即为类的全限定名。 |
value | String[] | 该属性等价于 urlPatterns 属性。两个属性不能同时使用。 |
urlPatterns | String[] | 指定一组 Servlet 的 URL 匹配模式。等价于 标签。 |
loadOnStartup | int | 指定 Servlet 的加载顺序,等价于 标签。 |
initParams | WebInitParam[] | 指定一组 Servlet 初始化参数,等价于 标签。 |
asyncSupported | boolean | 声明 Servlet 是否支持异步操作模式,等价于 标签。 |
description | String | 该 Servlet 的描述信息,等价于 标签。 |
displayName | String | 该 Servlet 的显示名,通常配合工具使用,等价于 标签。 |
从上表可见,web.xml可以配置的servlet属性,在@WebServlet中都可以配置。
如:
@WebServlet(description="描述", urlPatterns={ "/aaa"}, loadOnStartup=1)
public class indexServlet extends HttpServlet{}
Servlet 生命周期
Servlet 生命周期可被定义为从创建直到毁灭的整个过程。
- Servlet 通过调用 init () 方法进行初始化。
- Servlet 调用 service() 方法来处理客户端的请求。
- Servlet 通过调用 destroy() 方法终止(结束)。
- Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
init()方法
init 方法被设计成只调用一次。
它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。
因此,它是用于一次性初始化。
Servlet 创建于用户第一次方位该Servlet的URL