Servlet的生命周期


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

<html>
<head>
<meta content="text/html; charset=UTF-8">
<title>Servlet声明周期</title>
</head>
<body>
<h2>通过POST方式传递参数</h2>
<form action="ServletLife" method="POST">
<!-- 通过POST方式传递参数 -->
输入姓名:&nbsp;<input type="text" name="namepost" />
<br>
<input type="submit" value="提交"/>
</form>
<h2>通过GET方式传递参数</h2>
<form action="ServletLife" method="GET">
<!-- 通过GET方式传递参数 -->
输入姓名:&nbsp;<input type="text" name="nameget" />
<br>
<input type="submit" value="提交"/>
</form>
</body>
</html>
package com.ahabest.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 ServletLife extends HttpServlet {
    private static final long serialVersionUID = 6694980741533555810L;
    /** 初始化参数. */
    private String initParam;

    /**
     * 初始化.
     * @param config 初始化参数
     * @throws Servlet异常
     */
    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        System.out.println("===初始化Servlet===");
        // 获得初始化参数并打印出来
        initParam = config.getInitParameter("sayhello");
        System.out.println("我们获得的初始化参数是:" + initParam);
    }
    /**
     * service方法使用.
     * @param req Request
     * @param resp Response
     * @throws ServletException Servlet异常
     * @throws IOException IO异常
     */
    @Override
    protected void service(HttpServletRequest req,
            HttpServletResponse resp)
                throws ServletException, IOException {
            System.out.println(
                    "正在执行service方法,调用父类对应的方法,当前提交方式:"
                    + req.getMethod());
            super.service(req, resp);
    }
    /**
     * doGet方法使用.
     * @param req Request
     * @param resp Response
     * @throws ServletException Servlet异常
     * @throws IOException IO异常
     */
    @Override
    protected void doGet(HttpServletRequest req,
            HttpServletResponse resp)
                throws ServletException, IOException {
        // 设置Request参数编码
        req.setCharacterEncoding("UTF-8");
        // 获得页面传递过来的参数
        String nm = req.getParameter("nameget");
        // 获得初始化参数字符串
        nm = "通过GET方法获得的:" + nm + " , " + initParam;
        // 设定内容类型为HTML网页UTF-8编码
        resp.setContentType("text/html;charset=UTF-8");
        // 输出页面
        PrintWriter out = resp.getWriter();
        out.println("<html><head>");
        out.println("<title>Servlet Life</title>");
        out.println("</head><body>");
        out.println(nm);
        out.println("</body></html>");
        out.close();
        System.out.println("正在执行doGet方法,页面会显示文字:" + nm);
    }
    /**
     * doPost方法使用.
     * @param req Request
     * @param resp Response
     * @throws ServletException Servlet异常
     * @throws IOException IO异常
     */
    @Override
    protected void doPost(HttpServletRequest req,
            HttpServletResponse resp)
                throws ServletException, IOException {
        // 设置Request参数编码
        req.setCharacterEncoding("UTF-8");
        // 获得页面传递过来的参数
        String nm = req.getParameter("namepost");
        // 获得初始化参数字符串
        nm = "通过POST方法获得的:" + nm + " , " + initParam;
        // 设定内容类型为HTML网页UTF-8编码
        resp.setContentType("text/html;charset=UTF-8");
        // 输出页面
        PrintWriter out = resp.getWriter();
        out.println("<html><head>");
        out.println("<title>Servlet Life</title>");
        out.println("</head><body>");
        out.println(nm);
        out.println("</body></html>");
        out.close();
        System.out.println("正在执行doPost方法,页面会显示文字:" + nm);
    }

    /**
     * 销毁Servlet实例.
     */
    @Override
    public void destroy() {
        System.out.println("===销毁Servlet实例===");
        super.destroy();
    }
} 
<?xml version="1.0" encoding="gb2312"?>
<web-app>
    <welcome-file-list>
        <welcome-file>ServletLife.html</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>ServletLife</servlet-name>
        <servlet-class>com.ahabest.servlet.ServletLife</servlet-class>
        <init-param>
            <param-name>sayhello</param-name>
            <param-value>你好啊!</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletLife</servlet-name>
        <url-pattern>/ServletLife</url-pattern>
    </servlet-mapping>
</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. luogu 1726 上白泽惠音

    题目大意: 给一个有向图 求一个最大的强连通分量,输出这个强连通分量里的所有元素 若两个联通分量内点数相同 则输出字典序小的那个 思路: 直接tarjan 对每个连通分量,求一下最小点,然后判断字典序 ...

  2. Java 泛型 四 基本用法与类型擦除

    简介 Java 在 1.5 引入了泛型机制,泛型本质是参数化类型,也就是说变量的类型是一个参数,在使用时再指定为具体类型.泛型可以用于类.接口.方法,通过使用泛型可以使代码更简单.安全.然而 Java ...

  3. bzoj4869

    http://www.lydsy.com/JudgeOnline/problem.php?id=4869 终于A了...参考了下dalao的代码... 拓展欧几里得定理,改了几次就不变了,但是用的时候 ...

  4. bzoj4818

    http://www.lydsy.com/JudgeOnline/problem.php?id=4818 矩阵快速幂+dp 首先我们来写一个dp dp[i][j]:选到第i个数,和为j,复杂度nm,不 ...

  5. Spark GraphX 属性图操作

    package Spark_GraphX import org.apache.spark.graphx._ import org.apache.spark.rdd.RDD import org.apa ...

  6. E20170610-hm

    presence  n. 出席; 仪表; 风度; 鬼魂,神灵; defence   n. 防御; 辩护; 防御工事; 后卫; phyle  n. 种族,宗族; race  n. 赛跑; 民族; 人种; ...

  7. E20170606-gg

    complete adj. 完整的; 完成的; (用以强调) 完全的; 达到结尾的;  vt. 完成,使完满; 完成或结束; 填写(表格); process   n. 过程; 工序; 做事方法; 工艺 ...

  8. 用 python 写一个模拟玩家移动的示例

    实例:二维矢量模拟玩家移动 在游戏中,一般使用二维矢量保存玩家的位置,使用矢量计算可以计算出玩家移动的位置,下面的 demo 中,首先实现二维矢量对象,接着构造玩家对象,最后使用矢量对象和玩家对象共同 ...

  9. Classic BADI总结

    这里对sap Classic Badi 做一下总结,虽然已经是过时的技术了. Classic BADI的创建 Classic BADI的实施 Classic BADI的调用及运行原理 New BADI ...

  10. codechef: ADAROKS2 ,Ada Rooks 2

    又是道原题... (HDU 6313 Hack It , 多校 ACM 里面的题) 题目说构造一个 n * n 矩阵,染色点不得构成矩形...然后染色点个数至少 8 * n 然后我们生成一个数 m , ...