Servlet生命周期

  • 构造方法
  • init方法
  • service方法
  • destory方法
    • 注意
  • Servlet的创建和销毁是由Servlet容器负责的(Tomcat)

jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><a href="./DataServlet">跳转</a></body>
</html>

DataServlet

public class DataServlet extends HttpServlet {private static final long serialVersionUID = 1L;public DataServlet() {System.out.println("DataServlet构造方法");}@Overridepublic void init() throws ServletException {System.out.println("initMethod");}@Overrideprotected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {System.out.println("serviceMethod");super.service(arg0, arg1);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("doGetMethod");response.sendRedirect("./data.jsp");}@Overridepublic void destroy() {System.out.println("destroyMethod");}
}

data.jsp

<%@page import="com.zzu.ov.Student"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><p>跳转过来了!!!</p></body>
</html>


点击之后跳转


访问三次主页然后点击跳转

构造方法

  • 只执行一次,默认第一次访问Servlet的时候执行,再次访问的时候不会执行,只创建了一个Servlet对象。

init方法

  • 只执行一次,默认第一次访问Servlet的时候执行,再次访问的时候不会执行,在执行构造方法之后执行。

service方法

  • 每次访问就执行一次,对请求方法进行判断,对于不同的请求方法执行对应的方法。

    HttpServlet中service方法源码
 protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {String method = req.getMethod();if (method.equals(METHOD_GET)) {long lastModified = getLastModified(req);if (lastModified == -1) {doGet(req, resp);} else {long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);if (ifModifiedSince < lastModified) {maybeSetLastModified(resp, lastModified);doGet(req, resp);} else {resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);}}} else if (method.equals(METHOD_HEAD)) {long lastModified = getLastModified(req);maybeSetLastModified(resp, lastModified);doHead(req, resp);} else if (method.equals(METHOD_POST)) {doPost(req, resp);} else if (method.equals(METHOD_PUT)) {doPut(req, resp); } else if (method.equals(METHOD_DELETE)) {doDelete(req, resp);} else if (method.equals(METHOD_OPTIONS)) {doOptions(req,resp);} else if (method.equals(METHOD_TRACE)) {doTrace(req,resp);  } else {String errMsg = lStrings.getString("http.method_not_implemented");Object[] errArgs = new Object[1];errArgs[0] = method;errMsg = MessageFormat.format(errMsg, errArgs); resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);}}

destory方法

  • 只执行一次,创建Servlet对象之后如果正常关闭服务器,或者停止发布Web项目的时候执行。
    把Tomcat服务器关掉(stop按钮)
    注意:
  1. 如果使用Terminate按钮则不会执行destroy。
  2. 在服务器启动的时候并且已经创建了Servlet对象,将Web项目停止发布,也会执行destroy方法。操作如下


注意

当在web.xml(部署描述符)文件中,在Servlet中配置了<load-on-startup></load-on-startup>如果标签内的数字大于等于0的时候则会在服务器启动的时候加载这个Servlet。
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>sun</display-name><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><servlet><servlet-name>DataServlet</servlet-name><servlet-class>com.zzu.servlet.DataServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>DataServlet</servlet-name><url-pattern>/DataServlet</url-pattern></servlet-mapping>
</web-app>

再次启动服务器

Servlet对象在服务器启动的时候创建了,并执行了init方法

点击之后访问DataServlet并转发到data.jsp

执行了service方法和doGet方法(因为是通过get请求访问的Servlet)
再点击一次

再次执行service方法和doGet方法,不再执行DataServlet构造方法和init方法
正常关闭Tomcat服务器

Servlet生命周期各方法执行顺序

Servlet生命周期 执行次数 执行时机
构造方法 执行一次 默认第一次访问时执行
init方法 执行一次 默认第一次访问时执行
service方法 可能执行多次 每次访问执行一次
doXxx方法 可能执行多次 每次访问,对应方法执行一次
destroy方法 执行一次 在创建Servlet对象后正常停止服务器或停止发布Web项目执行

JavaWeb——Servlet生命周期相关推荐

  1. Servlet第一篇【介绍Servlet、HTTP协议、WEB目录结构、编写入门Servlet程序、Servlet生命周期】...

    tags: Servlet 什么是Serlvet?# Servlet其实就是一个遵循Servlet开发的java类.Serlvet是由服务器调用的,运行在服务器端. 为什么要用到Serlvet? 我们 ...

  2. Servlet底层原理、Servlet实现方式、Servlet生命周期

    Servlet简介 Servlet定义 Servlet是一个Java应用程序,运行在服务器端,用来处理客户端请求并作出响应的程序. Servlet的特点 (1)Servlet对像,由Servlet容器 ...

  3. Servlet第一篇【介绍Servlet、HTTP协议、WEB目录结构、编写入门Servlet程序、Servlet生命周期】

    什么是Servlet? Servlet其实就是一个遵循Servlet开发的java类.Servlet是由服务器调用的,运行在服务器端. 为什么要用到Servlet? 我们编写java程序想要在网上实现 ...

  4. Servlet生命周期与工作原理

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...

  5. 测试Servlet生命周期学习笔记

    测试环境:windows xp旗舰版 软件环境:myclipse8.5+tomcat7.0 ****************************************************** ...

  6. Servlet 生命周期介绍

    在面试的时候. 有时会被问到这个问题: 请描述一下Servlet的生命周期. 其实面试官就是想问你1个Servlet何时被创建, 何时被调用等.... 本文就是详细解答这个问题的. 总体流程图 上面的 ...

  7. 测试Servlet生命周期例子程序

    写一个类TestLifeCycleServlet,生成构造器TestLifeCycleServlet();重写HttpServlet的doGet();重写GenericServlet的destroy( ...

  8. 【Servlet】Servlet生命周期

    Servlet生命周期是指Servlet实例从创建到响应客户请求,直至销毁的过程. Servlet程序本身不直接在Java虚拟机上运行,由Servlet容器负责管理其整个生命周期. Servlet生命 ...

  9. Web容器和Servlet生命周期

    为何需要Web容器 Web服务器本身主要用于支持http协议,包括监听和相应http请求.web服务器一般处理静态的请求,如文件系统中的静态文件.web容器则是为web相关的组件提供运行环境,可以从' ...

最新文章

  1. 2013年7月31日
  2. mysql常见问题处理-插入数据error code:1206
  3. JAVA web项目转客户端(nativefier)
  4. [MySQL优化案例]系列 -- 用TIMESTAMP类型取代INT和DATETIME
  5. OpenGL Lighting models照明模型的实例
  6. Node js redis
  7. python 获取内存使用率_Python获取CPU使用率、内存使用率、网络使用状态 | 学步园...
  8. 【转】图形流水线中坐标变换详解:模型矩阵、视角矩阵、投影矩阵
  9. 黄哲铿:妙用“缓存”,应对亿级流量峰值(文末赠书)
  10. 2017.8.7 GT考试 思考记录
  11. centos7上安装phpcms
  12. 翻译:使用 AWS Deep Racer 的日志分析工具
  13. openconnection java_java – 是否真的有必要使用url.openConnection()?
  14. STM32F407 FSMC驱动NAND FLASH MX30LF2GE8AB 附带测试程序链接
  15. 企业口碑营销如何做好,可运用这5T理论
  16. 动态规则最佳入门(转)
  17. Java小游戏象棋开发1-界面设计
  18. 小武学fpgastep7
  19. 球差透射电镜测试服务的收费标准和样品要求
  20. 铁威马NAS安装bittorrent QB下载PT/BT

热门文章

  1. html表格摘要不会显示吗,Html表格lt;tablegt;还是须要加入一些标签进行优化,能够加入标题lt;captiongt;和摘要lt;table summarygt;...
  2. python赋值法例子_大佬们 我是刚开始学python的小白 遇到这种赋值方式 实在不懂这个a+b是赋值给谁的 求解...
  3. docker 的最基础知识命令,可以当作笔记来看,学习还是要看相关的课程视频,自此整理了一套docker基础的文档笔记希望对你有用
  4. 计算机专业对应的职业,这十个高薪职业对应哪些大学专业?看完你就明白啦
  5. 《アニマル・ロジック》日语读书笔记1
  6. Windows--QT搭建MQTT开发环境详细过程
  7. 偷偷修复漏洞 苹果要求研究员噤声
  8. Sinvoice:创新声波通信技术,给您带来全新的连接体验!
  9. ubuntu 8.04 配置okl4编译环境
  10. java+标签定位_java+selenium——查找定位元素,elements复数定位(driver.findElementsByClassName(mnav);)002...