一、学习目标
1.Servlet概述
2.HttpServlet类
3.实现Servlet的多重映射
4.ServletConfig和ServletContext接口
二、重点知识
1.Servlet概述
Servlet是使用Java语言编写的运行在服务器端的程序。狭义的Servlet 是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者,Servlet 主要田干从理交白湍传来的HTTP 请求,并返回一个响应,它能够处理的请求有doGet()和 doPost()等方法。
Servlet 由 Servlet 容器提供,所谓的 Servlet容器是指提供了 Servlet功能的服务器中(这里指Tomcat ),Servlet容器将 Servlet 动态地加载到服务器上。与HTTP 协议相关的Servlet使用HTTP请求和HTTP响应与客户端进行交互。因此,Servlet容器支持所有HTTP协议的请求和响应。Servlet 应用程序的体系结构如图1-1所示:
图1-1 Servlet应用程序的体系结构
在图1-1中,Servlet 的请求首先会被 HTTP 服务器(如Apache)接收,HTTP服务器只负责静态HTML 页面的解析,对于 Servlet的请求转交给Servlet容器,Servlet 容器会根据web.xml文件中的映射关系,调用相应的 Servlet, Servlet将处理的结果返回给 Servlet 容器,并通过HTTP服务器将响应传输给客户端。
1.2 Servlet技术具有如下特点:
(1)方便:提供了大量的实用工具例程,如处理很难完成的HTML表单数据、读取和设置HTTP头,以及处理Cookie和跟踪会话等。
(2)跨平台:Servlet用Java类编写,可以在不同操作系统平台和不同应用服务平台下运行。
(3)灵活性和可扩展性:采用Servlet开发的Web应用程序,由于Java类的继承性和构造函数等特点,使得应用灵活,可随意扩展。
除了上述几个点外,Servlet还具有功能强大、能够在各个程序之间共享数据、安全性强等特点。
1.3 Servlet的生命周期
生命周期:自然界人从出生到最终走向西方极乐世界,这个周期过程就是人的生命周期,其实servlet的生命周期和人的一样,从servlet对象被创建,经过使用servlet对象,到最终servlet对象被销毁,整个过程就是servlet的生命周期。
与生命周期相关的三个方法 | |
---|---|
初始化阶段 | init(ServletConfig config),初始化方法:首次访问这个Servlet,servlet对象会被创建,执行初始化方法,执行一次 |
运行阶段 | service(ServletRequest req, ServletResponse res),服务方法:每次访问servlet时,服务方法都会被执行,执行多次 |
销毁阶段 | destroy() ,销毁方法:在服务器正常关闭时,会执行销毁方法,执行一次 |
2.HttpServlet类
在开发中,通常浏览器访问web服务器端的资源,是带有协议的访问,比如说http协议、https协议等,所以在创建servlet时,需要使用带有协议的servlet,在创建servlet时,通常用继承HttpServlet的方式来实现。
在HttpServlet里面重写service方法时,因为在service方法里面,最终调用doGet或者doPost方法,所以在重写服务方法时,一般情况下不会重写service方法,而是直接重写doGet和doPost方法:
在客户端发送get请求,在服务器端就用doGet方法接收
在客户端发送Post请求,在服务器端就用doPost方法来接收
3.实现Servlet的多重映射
3.1Servlet的多重映射:一个Servlet,可以对应多个访问路径。
比如:一个servlet对应的访问路径:/test02 或者 /test03
</servlet-mapping>
<servlet-mapping>
<servlet-name>TestServlet01</servlet-name>
<url-pattern>/test02</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>TestServlet01</servlet-name>
<url-pattern>/test03</url-pattern>
</servlet-mapping>
3.2 Servlet的映射路径可以使用通配符
servlet的映射路径有三种方式:
(1)完全目录匹配: 比如 /hello
(2) 目录匹配: 比如 /abc/* 或者 /*
(3)扩展名匹配: .do ,.action 注意 /*.do这种写法是错误的。
优先级:完全目录匹配>目录匹配>扩展名匹配
3.3 缺省Servlet
什么是缺省Servlet:
它的映射路径 “/” ,代表这是一个缺省的servlet.
缺省的servelt作用:
处理请求的资源找不到的问题(404 代表请求的资源找不到)
4.ServletConfig接口
针对Servlet技术的开发,SUN公司提供了一系列接口和类,其中最重要的接口是javax.servlet.Servlet。
在Servlet接口中定义了5个抽象方法,具体如图表示:
方法声明 | 功能描述 |
---|---|
void init(ServletConfig config) | 容器在创建好 Servlet 对象后,就会调用此方法。该方法接收一个ServletConfia类型的参数,Servlet容器通过这个参数向Servlet传递初始化配置信息 |
ServletConfig getServletConfig() | 用于获取 Servlet对象的配置信息,返回Servlet的 ServletConfig对象 |
String getServletInfo() | 返回一个字符串,其中包含关于 Servlet的信息,例如,作者、版本和版权等信息 |
void service(ServletRequest request,ServletResponse response) | 负责响应用户的请求,当容器接收到客户端访问Servlet对象的请求时,就会调用此方法。容器会构造一个表示客户端请求信息的 ServletReauest对象和一个用于响应客户端的 ServletResponse 对象作为参数传递给service()方法。在service()方法中,可以通过ServletReauest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息 |
viod destroy() | 负责释放Servlet 对象占用的资源。当服务器关闭或者 Servlet 对象被移除时,Servlet对象会被销毁,容器会调用此方法 |
在表中列举了Servlet 接口中的5个方法,其中init()、service()和 destroy()这3个方法可以表现 Servlet 的生命周期,它们会在某个特定的时刻被调用。另外,getServletlnfo()方法用于返回 Servlet的相关信息。getServletConfig()方法用于返回ServletConfig对象,该对象包含Servlet 的初始化信息。需要注意的是,表中提及的 Servlet容器指的是 Web 服务器。
针对 Servlet的接口,SUN公司提供了两个默认的接口实现类:GenericServlet 和HttpServlet。GenericServlet是一个抽象类,该类为Servlet 接口提供了部分实现,它并没有实现HTTP 请求处理。HttpServlet是 GenericServlet 的子类,它继承了GenericServlet 的所有方法,并且为HTTP请求中的POST、GET 等类型提供了具体的操作方法。
通常情况下,编写的 Servlet 类都继承自HttpServlet,在开发中使用的具体的 Servlet 对象就是 HttpServlet 对象。 HttpServlet 的常用方法及其说明如下表所示:
方法声明 | 功能描述 |
---|---|
protected void doGet(HttpServletRequest req,HttpServletResponse resp) | 用于处理 GET类型的HTTP请求的方法 |
protected void doPost(HttpServletRequestreq, HttpServletResponse resp) | 用于处理 POST 类型的HTTP请求的方法 |
protected void doPut(HttpServletRequest req,HttpServletResponse resp) | 用于处理PUT类型的HTTP 请求的方法 |
4.ServletConfig和ServletContext接口
4.1 什么是ServletConfig?
它是servlet的配置对象,作用就是获取与servlet的初始化参数。
4.