Servlet程序是运行在服务容器上的,Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信采用“请求/响应”的模式。
Servlet 首先被编译为class文件,然后由服务器调用。服务器调用生成好的class文件,并把执行结果以html代码的形式发送给浏览器(即客户端)。
一、组成
- javax.servlet包:定义了所有的Servlet类都必须实现或扩展 的通用接口和类。
- javax.servlet.http包:定义了采用HTTP协议通信的HttpServlet类。
二、接口
1. servlet
Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口。
在HttpServlet的service方法中,首先从HttpServletRequest对象中获取HTTP请求方式的信息,然后再根据请求方式调用相应的方法。例如:如果请求方式为GET ,那么调用doGet方法;如果请求方式为POST,那么调用doPost方法。
2.ServletRequest
ServletRequest接口中封装了客户请求信息,如客户 请求方式、参数名和参数值、客户端正在使用的协议,以及发出客户请求的远程主机信息等。
- getAttribute根据参数给定的属性名返回属性值
- getContentType返回客户请求数据MIME类型
- getParameter根据给定的参数名返回参数值
- getRemoteAddr返回远程客户主机的IP地址
- getRemoteHost返回远程客户主机名
- getRemotePort返回远程客户主机的端口
3.ServletResponse
ServletResponse接口为Servlet提供了返回响应结果的方法。
- getOutputStream返回可以向客户端发送二进制数据的输出流对象ServletOutputStream
- getWriter返回可以向客户端发送字符数据的PrintWriter对象
- getCharacterEncoding返回Servlet发送的响应数据的字符编码
- getContentType/setContentType返回/设置Servlet发送的响应数据的MIME类型
4.ServletContext
当Servlet容器启动Web应用时,并为每个Web应用创建惟一的ServletContext对象。你可以把ServletContext看成是一个Web应用的服务器端组件的共享内存。在ServletContext 中可以存放共享数据。
- setAttribute(Stringname,Objectobject)把一个对象和一个属性名绑定,将这个对象存储在ServletContext中。
- getAttribute(Stringname)根据给定的属性名返回所绑定的对象
三、生命周期
1.初始化阶段
在下列时刻Servlet容器装载Servlet:
(1) Servlet容器启动时自动装载某些Servlet
(2) 在Servlet容器启动后,客户首次向Servlet发出请求
(3) Servlet的类文件被更新后,重新装载Servlet
Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期中,init方法只会被调用一次。
2.响应客户请求阶段
对于到达Servlet容器的客户请求,Servlet容器创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service方法。service方法从ServletRequest对象获得客户请求信息、处理该请求,并通过 ServletResponse对象向客户返回响应结果。
3.终止阶段
当Web应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet的新实例时,Servlet容器会先调用Servlet的destroy方法。在destroy方法中,可以释放Servlet所占用的资源。