Download presentation
Presentation is loading. Please wait.
1
Servlet 12学时 1
2
第三章:Servlet 目标: 本章旨在向学员介绍请求与响应对象以及Servlet的基本规范。通过本课的学习,学员应该掌握如下知识:
1) 掌握请求与响应对象的基本使用 能够读取客户端请求的参数 掌握Servlet处理请求的流程 教学方法:讲授
3
主要内容 Servlet简介 Servlet的作用 Servlet API Servlet生命周期 Servlet的并发访问 请求与响应
HTTP请求信息 使用请求对象读取请求信息 HTTP响应信息 使用响应对象作出HTTP响应
4
主要内容 HTTP请求的参数 什么是请求参数 请求参数的格式和位置 读取请求参数 HTML的表单控件 使用表单的隐藏字段 使用URL传递数据
5
什么是Servlet Servlet是运行在web服务器上的Java程序 5 之前我们在编写web应用时,提到了到目前为止能够接收客户在
就来了解J2EE中非常重要的一个技术就是Servlet。 Servlet容器负责servlet和客户端的通信及调用servlet方法, 客户端与容器的通信方式采用“请求/响应”方式。 Servlet的作用 1)接收客户端的请求,并处理; 2)输出响应。 5
6
HTTPServlet的作用 HTTPServlet的作用 读取客户发送的所有数据 查询HTTP请求中包含的任何其他 请求信息
处理数据并生成结果 设置合适的HTTP响应参数 将响应信息回送给客户端 之前我们在编写web应用时,提到了到目前为止能够接收客户在 表单输入的数据的只有Servlet,那么Servlet在我们编写的web应用 中究竟是什么样的角色?我们应该怎么写这个Servlet呢?现在我们 就来了解J2EE中非常重要的一个技术就是Servlet。 Servlet容器负责servlet和客户端的通信及调用servlet方法, 客户端与容器的通信方式采用“请求/响应”方式。 Servlet的作用 1)接收客户端的请求,并处理; 2)输出响应。 6
7
Servlet API Servlet的继承体系 Servlet最核心的是Servlet接口,所有servlet类都必须实现该接口。
实现Servlet接口,或继承GenericServlet类,或继承HttpServlet类。 Servlet不仅可以处理基于http协议的请求,也可以处理基于其他协议的 请求,若写的servlet与http协议无关,则继承GenericServlet,若与HTTP 协议有关则继承HttpServlet。 Servlet的继承体系 7
8
Servlet API Servlet的框架主要由两个包组成:
javax.servlet.*:定义了所有Servlet类都必须实现或继承的通用接口和类 javax.servlet.http.*:定义了采用HTTP协议通信的HttpServlet类。 我们了解了servlet在整个web工程中的作用,接下来我们 就来学习一下如何创建servlet,一个servlet里应该写什么。 8
9
HTTPServlet的生命周期 HTTPServlet的生命周期 初始化阶段 响应客户请求阶段 销毁阶段
我们发现在web应用中我们并没有定义main方法在里面来初始化一个servlet对象,那么 Servlet是什么时候被初始化,怎么被调用的,什么时候销毁的呢?我们来了解一下servlet 的生命周期。 Servlet接口有3个方法,这3个方法也体现了servlet的生命周期。 9
10
HTTPServlet的生命周期 Servlet的生命周期 示例 HelloServlet.java Web容器 Servlet类
1.加载类 2.实例化Servlet(构造函数) 3. init( ) 1、容器在启动时,会寻找部署好的web应用,然后开始搜索里面的类文件; 有可能在容器启动时或在第一个客户访问该servlet时,加载类。 2、加载类完成后,会马上调用servlet的构造方法创建一个servlet对象,在整个 Servlet的生命周期中,只存在一个servlet对象。这时的servlet对象还不具备servlet的所有特性。 3、在servlet对象创建完成后,会马上调用init()方法,通过该方法,时servlet对象具有所有servlet 该具有的特性。 处理客户 请求(doGet()、 doPost()等) 4. service( ) 初始化 5. destroy( ) 初始化 10
11
HTTPServlet的生命周期 生命周期方法名 何时调用 作用 能否覆盖 init( ) service( ) doGet()/
Servlet实例被创建之后,并在servlet能为客户服务之前,容器要调用servlet对象的init()方法 使你在servlet处理客户请求之前有机会对其初始化 可能。如果有初始化代码(如得到一个数据库连接,或向其他对象注册),就要覆盖servlet类中的init()方法 service( ) 当一个客户请求到来时,容器会开始一个新的线程,或者从线程池分配一个线程,并调用servlet对象的service()方法 这个方法会查看HTTP请求,确定请求类型(Get、Post),并调用servlet对象对应的方法,如doGet()、doPost()等 不,不太可能。 不应该覆盖service()方法。 doGet()/ doPost() service()方法根据请求的HTTP方式来调用doGet或doPost方法 要在这里开始写你的代 码。Web应用想要做什么,就要由这个方法负责 至少要覆盖其中之一 1、启发学生思考: HttpServlet实例创建的时间? 创建多少个HttpServlet实例? 2、通常只创建一个servlet实例,针对同一个servlet的多个请求,都是由一个servlet实例来处理的。 3、在dd文件中配置Web应用启动时创建特定的Servlet的实例: <servlet> <<display-name>InitServet</display-name> <servlet-name>address/InitServlet</servlet-name> <servlet-class>course.web.address1.center.InitServet</servlet-class> <init-param> <param-name>dataSourceName</param-name> <param-value>java:comp/env/jdbc/address1</param-value> </init-param> <load-on-startup>0</load-on-startup> //在web应用启动时,被载入。0载入的顺序。 </servlet> 11
12
HTTPServlet的生命周期 生命周期方法名 何时调用 作用 能否覆盖 destroy( )
在服务器销毁servlet对象之前,它会调用servlet对象的destroy()方法 使servlet有机会清理资源 可能。 Destroy方法中可以关闭数据库连接、中止后台线程、将Cookie程序清单或访问计数写到磁盘以及执行 其他类似的收尾工作。 Servlet对象什么时候会 被销毁? 1)服务器关闭时,会释放所有servlet对象 2)服务器刷新时,也释放所有servlet对象 服务器什么时候刷新? 一般情况下tomcat6.0每30min刷新一次。 12
13
练习 下列有关Servlet的生命周期,说法不正确的是_____。
A. 在创建自己的Servlet时候,应该在初始化方法init()方法中创建Servlet实例。 B. 在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法。 C. 在销毁阶段,执行destroy()方法后系统立刻进行垃圾回收。 D. destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法。 答案:A
Similar presentations