servlet是什么
servlet是运行在服务器端的java程序,本质上是一个特定的java类, 处理请求和发送响应的过程(接受并处理HTTP请求)是由它来完成的,它可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,实现动态页面。
servlet的工作机制
servlet是java.servlet包的子类,有tomcat服务器完成Servlet的创建和初始化
servlet的任务是什么
1.读取客户端(浏览器)发送的显式的数据 包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单 2.读取客户端(浏览器)发送的隐式的 HTTP 请求数据 这包括 cookies、媒体类型和浏览器能理解的压缩格式等等 3.处理数据并生成结果 这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应 4.发送显式的数据(即文档)到客户端(浏览器) 该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等 5.发送隐式的 HTTP 响应到客户端(浏览器) 包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务
servlet的生命周期
Servlet 生命周期可被定义为从创建直到销毁的整个过程
1、Servlet 通过调用 init () 方法进行初始化
2、Servlet 调用 service() 方法来处理客户端的请求
3、Servlet 通过调用 destroy() 方法终止(结束)
4、Servlet 是由 JVM 的垃圾回收器进行垃圾回收
(1)客户端发出servlet请求,服务器查找内存中是否存在该servlet的对象,若存在,则直接调用该对象响应请求(处于就绪状态)。若不存在(即为第一次请求),服务器创建一个servlet对象,调用init()方法,执行对象的初始化后,就处于就绪状态,可以随时响应客户请求
(2)当客户发出servlet请求时,服务器吧HttpServletRequest类型对象和HttpServletRespone类型对象转发给Servlet,并将两个对象作为参数传递给servicr()方法。在次方法获得请求资源,对请求资源进行判断。是get还是post,对应doGet() doPost()来处理请求,然后把响应返回给客户
(3)服务器关闭或卸载servlet对象,就会调用destroy()方法销毁Servlet对象,释放内存。servlet对象被销毁,但是并没有立即被回收
Servlet成员方法
1、init()方法
init 方法被设计成只调用一次,用来完成Servlet对象的初始化。init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。
public void init() throws ServletException {
// 初始化代码...
}
2、service()方法
service() 方法是执行实际任务的主要方法.Servlet容器调用 service() 方法来处理来自客户端的请求,并把格式化的响应写回给客户端。每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException{
}
3、doPost() 方法 和 doPost() 方法
在线程中该service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {
// Servlet 代码
}
public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {
// Servlet 代码
}
4、destroy() 方法
destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。释放占用内存
public void destroy() {
// 终止化代码...
}