Servlet的生命周期


Servlet运行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过javax.servlet.Servlet接口中的init()、service()和destroy()方法来表示。

  1. <html>
  2. <head>
  3. <meta content="text/html; charset=UTF-8">
  4. <title>Servlet声明周期</title>
  5. </head>
  6. <body>
  7. <h2>通过POST方式传递参数</h2>
  8. <form action="ServletLife" method="POST">
  9. <!-- 通过POST方式传递参数 -->
  10. 输入姓名:&nbsp;<input type="text" name="namepost" />
  11. <br>
  12. <input type="submit" value="提交"/>
  13. </form>
  14. <h2>通过GET方式传递参数</h2>
  15. <form action="ServletLife" method="GET">
  16. <!-- 通过GET方式传递参数 -->
  17. 输入姓名:&nbsp;<input type="text" name="nameget" />
  18. <br>
  19. <input type="submit" value="提交"/>
  20. </form>
  21. </body>
  22. </html>
  1. package com.ahabest.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletConfig;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. public class ServletLife extends HttpServlet {
  10. private static final long serialVersionUID = 6694980741533555810L;
  11. /** 初始化参数. */
  12. private String initParam;
  13.  
  14. /**
  15. * 初始化.
  16. * @param config 初始化参数
  17. * @throws Servlet异常
  18. */
  19. @Override
  20. public void init(ServletConfig config) throws ServletException {
  21. super.init(config);
  22. System.out.println("===初始化Servlet===");
  23. // 获得初始化参数并打印出来
  24. initParam = config.getInitParameter("sayhello");
  25. System.out.println("我们获得的初始化参数是:" + initParam);
  26. }
  27. /**
  28. * service方法使用.
  29. * @param req Request
  30. * @param resp Response
  31. * @throws ServletException Servlet异常
  32. * @throws IOException IO异常
  33. */
  34. @Override
  35. protected void service(HttpServletRequest req,
  36. HttpServletResponse resp)
  37. throws ServletException, IOException {
  38. System.out.println(
  39. "正在执行service方法,调用父类对应的方法,当前提交方式:"
  40. + req.getMethod());
  41. super.service(req, resp);
  42. }
  43. /**
  44. * doGet方法使用.
  45. * @param req Request
  46. * @param resp Response
  47. * @throws ServletException Servlet异常
  48. * @throws IOException IO异常
  49. */
  50. @Override
  51. protected void doGet(HttpServletRequest req,
  52. HttpServletResponse resp)
  53. throws ServletException, IOException {
  54. // 设置Request参数编码
  55. req.setCharacterEncoding("UTF-8");
  56. // 获得页面传递过来的参数
  57. String nm = req.getParameter("nameget");
  58. // 获得初始化参数字符串
  59. nm = "通过GET方法获得的:" + nm + " , " + initParam;
  60. // 设定内容类型为HTML网页UTF-8编码
  61. resp.setContentType("text/html;charset=UTF-8");
  62. // 输出页面
  63. PrintWriter out = resp.getWriter();
  64. out.println("<html><head>");
  65. out.println("<title>Servlet Life</title>");
  66. out.println("</head><body>");
  67. out.println(nm);
  68. out.println("</body></html>");
  69. out.close();
  70. System.out.println("正在执行doGet方法,页面会显示文字:" + nm);
  71. }
  72. /**
  73. * doPost方法使用.
  74. * @param req Request
  75. * @param resp Response
  76. * @throws ServletException Servlet异常
  77. * @throws IOException IO异常
  78. */
  79. @Override
  80. protected void doPost(HttpServletRequest req,
  81. HttpServletResponse resp)
  82. throws ServletException, IOException {
  83. // 设置Request参数编码
  84. req.setCharacterEncoding("UTF-8");
  85. // 获得页面传递过来的参数
  86. String nm = req.getParameter("namepost");
  87. // 获得初始化参数字符串
  88. nm = "通过POST方法获得的:" + nm + " , " + initParam;
  89. // 设定内容类型为HTML网页UTF-8编码
  90. resp.setContentType("text/html;charset=UTF-8");
  91. // 输出页面
  92. PrintWriter out = resp.getWriter();
  93. out.println("<html><head>");
  94. out.println("<title>Servlet Life</title>");
  95. out.println("</head><body>");
  96. out.println(nm);
  97. out.println("</body></html>");
  98. out.close();
  99. System.out.println("正在执行doPost方法,页面会显示文字:" + nm);
  100. }
  101.  
  102. /**
  103. * 销毁Servlet实例.
  104. */
  105. @Override
  106. public void destroy() {
  107. System.out.println("===销毁Servlet实例===");
  108. super.destroy();
  109. }
  110. }
  1. <?xml version="1.0" encoding="gb2312"?>
  2. <web-app>
  3. <welcome-file-list>
  4. <welcome-file>ServletLife.html</welcome-file>
  5. </welcome-file-list>
  6. <servlet>
  7. <servlet-name>ServletLife</servlet-name>
  8. <servlet-class>com.ahabest.servlet.ServletLife</servlet-class>
  9. <init-param>
  10. <param-name>sayhello</param-name>
  11. <param-value>你好啊!</param-value>
  12. </init-param>
  13. </servlet>
  14. <servlet-mapping>
  15. <servlet-name>ServletLife</servlet-name>
  16. <url-pattern>/ServletLife</url-pattern>
  17. </servlet-mapping>
  18. </web-app>

04Servlet的生命周期的更多相关文章

  1. react组件的生命周期

    写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...

  2. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  3. C# MVC 5 - 生命周期(应用程序生命周期&请求生命周期)

    本文是根据网上的文章总结的. 1.介绍 本文讨论ASP.Net MVC框架MVC的请求生命周期. MVC有两个生命周期,一为应用程序生命周期,二为请求生命周期. 2.应用程序生命周期 应用程序生命周期 ...

  4. UIViewController生命周期-完整版

    一.UIViewController 的生命周期 下面带 (NSObject)的方法是NSObject提供的方法.其他的都是UIViewController 提供的方法. load   (NSObje ...

  5. angular2系列教程(十一)路由嵌套、路由生命周期、matrix URL notation

    今天我们要讲的是ng2的路由的第二部分,包括路由嵌套.路由生命周期等知识点. 例子 例子仍然是上节课的例子:

  6. Spring中Bean的作用域、生命周期

                                   Bean的作用域.生命周期 Bean的作用域 Spring 3中为Bean定义了5中作用域,分别为singleton(单例).protot ...

  7. Autofac - 生命周期

    实例生命周期决定在同一个服务的每个请求的实例是如何共享的. 当请求一个服务的时候,Autofac会返回一个单例 (single instance作用域), 一个新的对象 (per lifetime作用 ...

  8. 【微信小程序开发•系列文章六】生命周期和路由

    这篇文章理论的知识比较多一些,都是个人观点,描述有失妥当的地方希望读者指出. [微信小程序开发•系列文章一]入门 [微信小程序开发•系列文章二]视图层 [微信小程序开发•系列文章三]数据层 [微信小程 ...

  9. Xamarin.Android活动的生命周期

    一.前言 用过Android手机的人一定会发现一种现象,当你把一个应用置于后台后,一段时间之后在打开就会发现应用重新打开了,但是之前的相关的数据却没有丢失.可以看出app的“生命”是掌握在系统手上的, ...

随机推荐

  1. 2013:Audio Tag Classification - MIREX Wiki

    Contents [hide] 1 Description 1.1 Task specific mailing list 2 Data 2.1 MajorMiner Tag Dataset 2.2 M ...

  2. SGU 261. Discrete Roots (N次剩余)

    N次剩余 题目:http://acm.sgu.ru/problem.php? contest=0&problem=261 题意:给定n,a,p 求出x^n ≡ a(mod p)在模p意义下的全 ...

  3. 2016/1/14 java生成指定范围的随机数

    java生成指定范围的随机数 package edu.sjtu.erplab.io; import java.util.Random; public class RandomTest { public ...

  4. 【OI】关于快速幂的简单理解

    都知道算某个数的幂需要线性的复杂度,为了优化复杂度,就出现了所谓的快速幂. 快速幂的代码很短,但是要原理需要一点心思. 首先,我们知道, a^b = a^c * a^d (c+d=b) 那么,不就可以 ...

  5. Delphi异常处理的基本原则和方法

    Delphi异常处理的基本原则和方法 一.异常的来源. 在Delphi的应用程序中,下列的情况都比较有可能产生异常.(1)文件处理(2)内存分配(3)Windows资源(4)运行时创建对象和窗体(5) ...

  6. 网络流之最大流算法(EK算法和Dinc算法)

    最大流 网络流的定义: 在一个网络(有流量)中有两个特殊的点,一个是网络的源点(s),流量只出不进,一个是网络的汇点(t),流量只进不出. 最大流:就是求s-->t的最大流量 假设 u,v 两个 ...

  7. 洛谷 P2296 寻找道路 —— bfs

    题目:https://www.luogu.org/problemnew/show/P2296 第一次用 Emacs 对拍,写了半天: 注意那个 is 赋值的地方很容易错,千万别反复赋值: 一道水题写了 ...

  8. openStack集群封装记录

  9. Spark SVM分类器

    package Spark_MLlib import java.util.Properties import org.apache.spark.mllib.regression.LabeledPoin ...

  10. 记录利用CSS完美解决前端图片变形问题

    在头条IT学堂看到CSS完美解决前端图片变形问题的文章,就记录分享下: 一.让图片的宽度或者高度等于容器的宽度或高度,多余的裁掉,然后让图片居中: <style type="text/ ...