Servlet会在服务器启动或第一次请求该Servlet的时候开始生命周期,在服务器停止的时候结束生命周期.

无论请求多少次Servlet,最多只有一个Servlet实例.多个客户端并发请求Servlet时,服务器会启动多个线程分别执行该Servlet的service()方法.

package com.helloxr.servlet;

import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class LifeCycleServlet extends HttpServlet { /**
*
*/
private static final long serialVersionUID = 9898777879L;
public static double startPoint = 0; /**
* Constructor of the object.
*/
public LifeCycleServlet() {
super();
} /**
* Destruction of the servlet. <br>
*/
public void destroy() {
this.log("执行 destroy方法 ...");
startPoint = 0;
} /**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { this.log("执行 doGet() 方法 ...");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>个人所得税计算</TITLE></HEAD>");
out.println("<link rel='stylesheet' type='text/css' href='../css/style.css'>");
out.println(" <BODY>");
out.println("<div align='center'><br/><fieldset style='width:90%'><legend>个税计算器</legend><br/>");
out.println("<form method='post'>"); out.println("<div style='line'>");
out.println(" <div class='leftDiv'>您的工资为</div><div align='left' class='rightDiv'><input type='text' name='income'>单位:元<div>");
out.println("</div><br/>"); out.println("<div style='line'");
out.println(" <div class='leftDiv'></div><div align='left' class='rightDiv'><input type='submit' value=' 计算个税 ' class=button></div>");
out.println("</div>");
out.println("</form>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
} /**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { this.log("执行 doPost() 方法 ...");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>个人所得税计算</TITLE></HEAD>");
out.println("<link rel='stylesheet' type='text/css' href='../css/style.css'>");
out.println(" <BODY>");
out.println("<div align='center'><br/>");
out.println("<fieldset style='width:90%'><legend>个税计算器</legend><br/>"); try{
double income = new Double(request.getParameter("income")); double charge = income - startPoint;
double tax = 0; if(charge <= 0) {tax = 0;}
if(charge > 0 && charge <= 500) {tax = charge * 0.05;}
if(charge > 500 && charge <= 2000) {tax = charge * 0.1 - 25;}
if(charge > 2000 && charge <= 5000) {tax = charge * 0.15 - 125;}
if(charge > 5000 && charge <= 20000) {tax = charge * 0.2 - 375;}
if(charge > 20000 && charge <= 40000) {tax = charge * 0.25 - 1375;}
if(charge > 40000 && charge <= 60000) {tax = charge * 0.30 - 3375;}
if(charge > 60000 && charge <= 80000) {tax = charge * 0.35 - 6375;}
if(charge > 80000 && charge <= 100000) {tax = charge * 0.4 - 10375;}
if(charge > 100000) {tax = charge * 0.45 - 15375;} out.println("<div style='line'>");
out.println(" <div class='leftDiv'>您的工资为</div><div class='rightDiv'>" + income + " 元</div>");
out.println("</div>");
out.println("<div style='line'>");
out.println(" <div class='leftDiv'>您应纳税</div><div class='rightDiv'>" + tax + "元</div> ");
out.println("</div><br/>");
out.println("<input type='button' onclick='history.go(-1);' value='纳税光荣 逃税可耻 返回' class=button>"); }catch(Exception e){
out.println("请输入数值类型数据.<input type='button' onclick='history.go(-1);' value='返回' class=button>");
}
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
} /**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
@Override
public void init() throws ServletException {
this.log("执行 init() 方法 ...");
ServletConfig config = this.getServletConfig();
startPoint = Double.parseDouble(config.getInitParameter("startPoint"));
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{
this.log("执行 service() 方法 ...");
super.service(request, response);
} }

web.xml的配置如下:

<servlet>
<servlet-name>LifeCycleServlet</servlet-name>
<servlet-class>com.helloxr.servlet.LifeCycleServlet</servlet-class>
<init-param>
<param-name>startPoint</param-name>
<param-value>1600</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>LifeCycleServlet</servlet-name>
<url-pattern>/servlet/LifeCycleServlet</url-pattern>
</servlet-mapping>

Tomcat控制台的部分输出:

一月 07, 2017 10:28:35 下午 org.apache.catalina.core.ApplicationContext log
信息: LifeCycleServlet: 执行 init() 方法 ...
一月 07, 2017 10:28:35 下午 org.apache.catalina.core.ApplicationContext log
信息: LifeCycleServlet: 执行 service() 方法 ...
一月 07, 2017 10:28:35 下午 org.apache.catalina.core.ApplicationContext log
信息: LifeCycleServlet: 执行 doGet() 方法 ...
一月 07, 2017 10:29:03 下午 org.apache.catalina.core.ApplicationContext log
信息: LifeCycleServlet: 执行 service() 方法 ...
一月 07, 2017 10:29:03 下午 org.apache.catalina.core.ApplicationContext log
信息: LifeCycleServlet: 执行 doPost() 方法 ...
一月 07, 2017 10:29:22 下午 org.apache.catalina.core.StandardServer await
信息: A valid shutdown command was received via the shutdown port. Stopping the Server instance.
一月 07, 2017 10:29:22 下午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["http-apr-8080"]
一月 07, 2017 10:29:22 下午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["ajp-apr-8009"]
一月 07, 2017 10:29:22 下午 org.apache.catalina.core.StandardService stopInternal
信息: Stopping service Catalina
一月 07, 2017 10:29:22 下午 org.apache.catalina.core.ApplicationContext log
信息: SessionListener: contextDestroyed()
一月 07, 2017 10:29:22 下午 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: contextDestroyed()
一月 07, 2017 10:29:22 下午 org.apache.catalina.core.ApplicationContext log
信息: LifeCycleServlet: 执行 destroy方法 ...
一月 07, 2017 10:29:22 下午 org.apache.coyote.AbstractProtocol stop
信息: Stopping ProtocolHandler ["http-apr-8080"]
一月 07, 2017 10:29:23 下午 org.apache.coyote.AbstractProtocol stop
信息: Stopping ProtocolHandler ["ajp-apr-8009"]
一月 07, 2017 10:29:23 下午 org.apache.coyote.AbstractProtocol destroy
信息: Destroying ProtocolHandler ["http-apr-8080"]
一月 07, 2017 10:29:23 下午 org.apache.coyote.AbstractProtocol destroy
信息: Destroying ProtocolHandler ["ajp-apr-8009"]

LifeCycleServlet运行效果:

Java Web学习笔记-Servle生命周期的更多相关文章

  1. [原创]java WEB学习笔记95:Hibernate 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. Java Web学习笔记之---JSP

    Java Web学习笔记之---JSP (一)JSP常用语法 (1)HTML注释 <!--所要注释的内容 --> 在客户端显示一个注释. (2)隐藏注释 <%--所要注释的内容--% ...

  3. [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. java web 学习笔记 编码问题总结

       java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...

  6. Java Web 学习笔记 1

    Java Web 学习笔记 1 一.Web开发基础 1-1 Java Web 应用开发概述 1.1.1 C/S C/S(Client/Server)服务器通常采用高性能的PC机或工作站,并采用大型数据 ...

  7. [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. Java Web学习笔记之---EL和JSTL

    Java Web学习笔记之---EL和JSTL (一)EL (1)EL作用 Expression  Language(表达式语言),目的是代替JSP页面中复杂的代码 (2)EL表达式 ${变量名} ( ...

  9. JAVA Web学习笔记

    JAVA Web学习笔记 1.JSP (java服务器页面) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . JSP全名为Java Server Pages,中文名叫java服务器 ...

随机推荐

  1. The hierarchy of the type NsRedisConnectionFactory is inconsistent

    The hierarchy of the type is inconsistent 解释为:层次结构的类型不一致 由于我在eclipse里建了两个JAVA PROJECT项目,分别是A projiec ...

  2. Android 自定义Popupwindow 注意事项,手机和平板的区别

    首先自定义ppw是要继承Popupwindow 的 而要成功的显示出自定义的ppw就必须实现下面的三句代码 // 必要的三要素下面,不然popWind显示不出来 this.setContentView ...

  3. mybatis学习(一) mybatis框架的特性

    mybatis 的源代码地址是https://github.com/mybatis/mybatis-3/ 以及相关文档 All the information i get from http://ww ...

  4. Canny Edge Detector

    Canny边缘检测算法有自己的理论和经验性的推导, 没仔细看/没看明白. 它的步骤如下: 对原图的灰度图进行高斯滤波 求一阶导数, 得到每个像素点的梯度强度和方向. 非最大抑制. 对每个edge ca ...

  5. Windows Server 2008 R2 每隔一段时间自动关机解决办法

    情况描述: “我的电脑-->右键属性”中显示“已激活”,而“管理工具”中显示未激活.系统中有进程wlms.exe. 网上找了下解决方式: 1.提权工具:PSTOOLS(下载地址:http://m ...

  6. 01python算法--算法和数据结构是什么鬼?

    我不想直接拷贝google 上面所有对算法的解释.所以我想怎么说就怎么说了,QAQ 1:什么是程序? 解决问题的范式 2:什么是问题? 程序输入与输出之间的联系 3:什么是算法: 算法就是解决问题的思 ...

  7. iOS蓝牙开发(一)蓝牙相关基础知识(转)

    转载自:http://www.cocoachina.com/ios/20150915/13454.html 原文作者:刘彦玮 蓝牙常见名称和缩写 MFI ======= make for ipad , ...

  8. 递归O(NlgN)求解逆序数

    导言 第一次了解到逆序数是在高等代数课程上.当时想计算一个数列的逆序数直觉就是用两重循环O(n^2)暴力求解.现在渐渐对归并算法有了一定的认识,因此决定自己用C++代码小试牛刀. 逆序数简介 由自然数 ...

  9. clickheat简介

    装了个wappalyzer,各种感兴趣的去翻各种网站都用了什么框架啊啊啊...然后在qunar.com遇到了clickheat.之前只是听过这类插件,没想到真的在用唉. ClickHeat is a ...

  10. Myeclipse 加载ojdbc14.jar步骤

    目的:加载驱动程序,需要找到驱动的具体位置,就是找到其驱动的类名,Class.forName("oracle.jdbc.driver.OracleDriver");//加载并注册驱 ...