- 什么是servlet?
它是运行在Web服务器或其他应用服务器的程序,他是作为来自Web浏览器和其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。
优势:
- 在WEB服务器的地址空间内执行,无需创建一个单独的进程来处理客户端的请求
- 独立于平台
- 是可信的,因为服务器上的java安全管理器执行了一系列限制,以保护服务器计算机上的资源
- java类库的全部功能对sevlet来说是可用的。它可以通过sockets和RMI机制与applets、数据库或其他软件进行交互
- Servlet框架
- Servlet的任务:
- 读取客户端发送的显式数据
- 读取客户端发送的隐式的HTTP请求数据,包括cookies,媒体类型,浏览器能理解的压缩格式
- 处理数据并生成结果,访问数据库,执行RMI或CORBA调用,调用web服务或者直接计算的出对应的响应
- 发送显式数据到客户端
- 发送隐式HTTP响应到客户端
- Servlet生命周期
- init()初始化,在第一次创建servlet时调用,产生一个servlet实例,创建新的线程,在后续每次用户请求时不再创建。init()会加载一些数据,这些数据将被用于servlet整个生命周期
public void init() throws ServletException{
...
...
}
2.service()实际执行任务的主要方法。Servlet容器调用service()方法处理来自客户端的请求,并把格式化的响应写回客户端。每次服务器接收一个servlet请求时,服务器会产生的一个新的线程并调用服务。service()方法检查HTTP请求类型(GET,PUT,POST,DELETE),并在适当的时候调用doGET,doPUT,doPOST,doDELETE等方法
public void service(ServletRequest request, ServletResponse response)
throws ServletException,IOExcepetion{
...
...
}
- doGET() GET请求来自URL的正常请求,或者来自一个未指定MOTHESD的html表单
public void doGet(HTTPServletRequest request,
HTTPServletResponse,response)
throws ServletException,IOExcepetion{
...
...
}
- doPOST() POST请求来源于一个指定了MOTHED为post的HTML表单
public void doPost(HTTPServletRequest request,
HTTPServletResponse,response)
throws ServletException,IOExcepetion{
...
...
}
3.destory()方法在servlet生命周期结束之时调用,destory()可以使servlet关闭数据库链接,停止后台线程,把cookie列表或点计数器写入磁盘,并执行其他类似的清理活动。调用destory()之后servlet对象被标记为垃圾回收、
public void destory(){
...
...
}
生命周期架构图:多个线程处理多个service请求