关于Servlet的部分重点内容(接口及实现类、生命周期、配置方法、虚拟路径及多重映射
1、Servlet 接口及其实现类GenericServlet和HttpServlet,以及他们之间的关系是什么?
GenericServlet是一个抽象类,为Servlet接口提供了部分实现,并没有实现http的请求处理;HttpServlet是GenericServlet的子类,它继承了GenericServlet的所有方法,并且为http请求中的post,get等方式提供了具体的操作方法
2、Servlet生命周期的三个阶段是什么?
初始化阶段、运行阶段、销毁阶段
初始化阶段:
①客户端向Servlet容器发出请求访问Servlet
②Servlet容器解析请求
③检查内存中有无Servlet对象,没有就创建Servlet实例对象
④调用init()方法完成Servlet的初始化
运行阶段:
①调用service ()方法
Servlet容器会为客户端请求创建代表http请求的ServletRequest对象和代表http响应的ServletResponse对象,然后将它们作为参数传递给Servlet的service ()方法。service()方法从从ServletRequest对象中获得客户端请求信息并处理该请求,通过ServletResponse对象生成响应结果。
②输出响应信息
③返回响应
在Servlet的生命周期内,对于Servlet的每一次访问请求,Servlet容器都会调用一次Servlet的service()方法,并且创建新的ServletRequest和ServletResponse对象。
销毁阶段:
当服务器关闭或web应用被移除出容器时,Servlet会随着web应用的销毁而销毁,在销毁之前会调用Servlet的destroy()方法(只调用一次),释放Servlet对象占用的资源
3、如何对Servlet类进行配置?有哪些方法?
Servlet的配置主要有使用Web应用的配置文件web.xml和使用@WebServlet注解
(1)使用Web应用的配置文件web.xml
①在web.xml文件中,通过<servlet>标签进行注册
②把Servlet映射到URL地址,使用<servlet-mapping>标签进行映射,使用<servlet-name>子标签指定要映射的Servlet名称,名称要和之前在<servlet>标签下注册的相同;使用<url-pattern>子标签映射URL地址,地址前必须加"/",否则访问不到。
(2) @WebServlet注解配置Servlet
Servlet 3.0之后提供了@Servlet注解,简化了Servlet的配置
@WebServlet注解用于代替web.xml文件中的<servlet><servlet-mapping>等标签,该注解将会在项目部署时被容器处理,容器会根据具体的属性配置将相应的类部署为Servlet。
①定义@WebServlet注解时,value属性或者urlPattern属性通常是必须的,但二者不能共存,如果同时定义,通常是忽略value的值
②@WebServlet注解可以标注在任意一个继承了HttpServlet类的类之上,属于类级别的注解。
4、什么是Servlet的虚拟路径?如何实现Servlet的多重映射?如何在Servlet映射路径中使用通配符?
客户端通过 URL 地址来访问 Web 服务器中的资源,Servlet 程序若想被外界访问,就必须被映射到一个 URL 地址上。很多时候,该 URL 地址和 Servlet 程序的物理路径(在硬盘上的存储位置)并不一致,因此它被称为虚拟路径。
5、ServletConfig 接口中的常用方法及其作用有哪些?
String getInitParameter(String name)
根据初始化参数名返回对应的初始化参数值
Enumeration getInitParameterNames()
返回一个Enumeration对象,其中包含了所有的初始化参数名
ServletContext getServletContext()
返回一个代表当前Web应用的ServletContext对象
String getServletName()
返回Servlet的名字
6、ServletContext对象有什么特性?
每一个Web应用都有一个唯一的ServletContext对象。ServletContext对象不仅封装了当前Web应用的所有信息,而且是先看多个Servlet之间的数据共享
7、对于每一个访问请求,Servlet 是否会创建一个新的HttpServletRequest对象和HttpServletResponse对象?
是的。
8、HttpServletRequest对象和HttpServletResponse对象分别可以用来做什么?
HttpServletRequest专门用于封装http请求消息,可用于获取请求消息的请求信息、请求头,跳转Servlet,获取请求参数,通过Request对象传递数据。
HttpServletResponse专门用于封装http响应消息,可用于向客户端发送状态码、响应消息头、响应消息体,实现请求重定向。