Servlet
作用
Servlet 是实现了 javax.servlet.Servlet 接口的 Java 类, 负责处理客户端的 HTTP 请求。是客户端 与 数据库或后台应用程序之间交互的媒介 。功能:
1. 读取客户端发送的数据
2. 处理数据,生成结果
3. 发送数据到客户端
读取的数据包括:显式数据如(HTML表单),隐式HTTP请求数据(cookies、媒体类型和压缩格式的内容)
处理过程涉及的操作:访问数据库,执行远程方法调用(Remote Method Invocation)RMI或者公共对象请求代理体系结构(Common Object Request Broker Architecture)CORBA调用,调用Web服务,或者直接计算得出对应的响应。
发送的数据:
显示数据:文档(HTML/XML格式的文本文件、二进制文件(GIF图像)、Excel文件)。
隐式数据:通知客户端返回的文档类型(如HTML)、设置cookies和缓存参数、其他类型的任务。
生命周期
- 初始化 init()
- 处理客户端的请求 service()
- 终结 destroy()
- 最后Servlet由JVM的垃圾回收器回收
init()
public void init() throws ServletException {
// 初始化代码...
}
- 只调用一次,在且仅在第一次创建Servlet时调用。
- Servlet创建于用户第一次调用对应于该Servlet的url,但是也可以指定Servlet在服务器第一次启动时被加载。
- 用户调用一个Servlet时,就会创建一个Servlet实例,用一个用户请求都会产生一个新的线程。然后移交给doGet或doPost方法。init()方法简单的创建或者加载一些数据,这些数据将会用于Servlet的整个生命周期。
service()
public void service(ServletRequest request,ServletResponse response)throws ServletException,IOException{
....
doGet();
...
doPost();
....
}
- 执行任务的主要方法,Web服务器调用service()方法来处理来自客户端的请求,并把格式化的响应结果返回给客户端
- 当Web服务器接收到一个Servlet请求时,会产生一个新的线程然后调用服务,service()方法检查HTTP请求类型(GET、POST、PUT、DELETE等),并在适当的时候调用doGet、doPost、doPut、doDelete等方法。
- servive() 由Web服务器调用,service()根据请求的类型调用doGet/doPost/…..等。所以我们不对service()方法做操作。只需根据客户端的请求类型来重写doGet()/doPost()/…
doGet()和doPost()
deget()和doPost()是请求中使用最多的方法
- doGet()
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException ,IOException{
//Servlet代码
}
doGet()方法 处理GET请求,一般GET请求来自于一个URL的正常请求,或者是来自一个未指定METHOD的HTML表单。
- doPost()
public void doPost(HttpServletRequest request,HttpResponse response)throws ServletException,IOException{
//Servlet 代码
}
doPost()方法处理POST请求 ,POST请求来自于一个特别指定了METHOD为POST的HTML表单。
destory()
public void desstroy(){
//
}
- destory()方法只会被调用一次,在Servlet生命周期结束时调用。
- destroy()负责关闭数据库连接、停止后台线程、把Cookie列表或者点击计数器写入到磁盘,并执行其他类似的清理活动
总结
调用init()生成Servlet ,多次请求创建多个线程,执行单例的service()方法处理请求,处理完完成destory销毁。