Servlet 生命周期
(1) init()方法初始化Servlet对象
  它在第一次创建Servlet时被调用,在后续每次不同用户请求时不再调用。
(2) service()方法来处理客户端的请求
  Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。每次服务器接收到一个Servlet请求时,服务器都会产生一个新的线程并调用服务。
  service() 方法由容器调用,service 方法在适当的时候调用 doGet、doPost、doPut、doDelete 等方法。所以,不用对 service() 方法做任何动作,您只需要根据来自客户端的请求类型来重写 doGet() 或 doPost() 即可。
(3) Servlet 通过调用 destroy() 方法终止(结束)
  destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。

HttpServlet的功能
HttpServlet首先必须读取Http请求的内容。Servlet容器负责创建HttpServlet对象,并把Http请求直接封装到 HttpServlet对象中,大大简化了HttpServlet解析请求数据的工作量。HttpServlet容器响应Web客户请求流程如下:
(1) Web客户向Servlet容器发出Http请求;
(2) Servlet容器解析Web客户的Http请求;
(3) Servlet容器创建一个HttpServletRequest对象,在这个对象中封装Http请求信息;
(4) Servlet容器创建一个HttpServletResponse对象;
(5) Servlet容器调用HttpServlet的service方法,把HttpServletRequest和HttpServletResponse对象作为service方法的参数传给HttpServlet对象;
(6) HttpServlet(通过doGet(),doPost()等)调用HttpServletRequest的有关方法,获取HTTP请求信息;
(7) HttpServlet(通过doGet(),doPost()等)调用HttpServletResponse的有关方法,生成响应数据;
(8) Servlet容器把HttpServlet的响应结果传给Web客户。

如何编写一个Servlet
(1) 扩展HttpServlet抽象类;
(2) 覆盖HttpServlet的部分方法,如覆盖doGet()或doPost()方法;
(3) 获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串;
(4) 生成HTTP响应结果。通过HttpServletResponse对象生成响应结果,它有一个getWriter()方法,该方法返回一个PrintWriter对象。

[例]

在IDE中直接创建一个Dynamic web project,再配置好Tomcat即可。servlet3.0后@WebServlet可以直接替代web.xml里的<servlet>标签。

 package com.servlettest;

 import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class Test1
*/
@WebServlet("/Test1")
public class Test1 extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public Test1() {
super();
} /**
* @see javax.servlet.GenericServlet#init()
*/
@Override
public void init() throws ServletException {
System.out.println("-----Call init() method.-----");
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { System.out.println("-----Call doGet() method.-----");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<table border=\"1\" align=\"center\">");
out.println("<tr><th>Header Name</th><th>Header Value</th></tr>");
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String paramName = headerNames.nextElement();
out.println("<tr><td>" + paramName + "</td><td> " + request.getHeader(paramName) + "</td></tr>");
}
out.println("</table>");
} /**
* @see javax.servlet.GenericServlet#destroy()
*/
@Override
public void destroy() {
System.out.println("-----Call destroy() method.-----");
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("-----Call doPost() method.-----");
doGet(request, response);
}
}

Servlet(1):基础概念/最简实例的更多相关文章

  1. JavaBean 基础概念、使用实例及代码分析

    JavaBean 基础概念.使用实例及代码分析 JavaBean的概念 JavaBean是一种可重复使用的.且跨平台的软件组件. JavaBean可分为两种:一种是有用户界面的(有UI的):另一种是没 ...

  2. 基础概念:Oracle数据库、实例、用户、表空间、表之间的关系

    基础概念:Oracle数据库.实例.用户.表空间.表之间的关系 数据库: Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制文件.联机日志.参数文件).其实Oracle数据库 ...

  3. Java面试题精选(一)基础概念和面向对象

    --   基础概念和面向对象   --      全程将为大家剖析几大部分内容,由于学习经验有限,望大家谅解并接受宝贵的意见: 基础概念部分     ★★   : 常出现的高频率单词的区别理解(异常. ...

  4. JavaWeb开发技术基础概念回顾篇

    JavaWeb开发技术基础概念回顾篇 第一章 动态网页开发技术概述 1.JSP技术:JSP是Java Server Page的缩写,指的是基于Java服务器端动态网页. 2.JSP的运行原理:当用户第 ...

  5. 最简实例演示asp.net5中用户认证和授权(1)

    asp.net5中,关于用户的认证和授权提供了非常丰富的功能,如果结合ef7的话,可以自动生成相关的数据库表,调用也很方便. 但是,要理解这么一大堆关于认证授权的类,或者想按照自己项目的特定要求对认证 ...

  6. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  7. linux设备驱动归纳总结(一)内核的相关基础概念【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59413.html linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxx ...

  8. 什么是JavaScript闭包终极全解之一——基础概念

    本文转自:http://www.cnblogs.com/richaaaard/p/4755021.html 什么是JavaScript闭包终极全解之一——基础概念 “闭包是JavaScript的一大谜 ...

  9. UML基础概念(转)

    UML基础概念 UML概述 uml简介 uml(unified Modeling Language )为面向对象软件设计提供统一的.标准的.可视化的建模语言.适用于描述以用例为驱动,以体系结构为中心的 ...

随机推荐

  1. vsftpd的安装和配置

    1  安装vsftpd sudo apt-get install vsftpd 2  测试是否安装成功 sudo service vsftpd restart 如果有反应即成功 3  彻底卸载vsft ...

  2. iframe通信相关:父操作子,子操作父,兄弟通信

    这里写window和document是认为代表了BOM和DOM(个人理解不一定对) 拿到了window就能操作全局变量和函数 拿到了document就能获取dom,操作节点 父操作子 window:选 ...

  3. Hive的JDBC连接

    首相要安装好hive 1.首先修改配置文件文件为hive 路径下的  conf/hive-sit.xml 将内容增加 <property> <name>hive.server2 ...

  4. 以组件的方式,添加redis_cache

    settings.py中文件内设置如下: CACHES = { 'default':{ 'BACKEND':'django_redis.cache.RedisCache', 'LOCATION':'r ...

  5. [codeforces792C][dp]

    https://codeforc.es/contest/792/problem/C C. Divide by Three time limit per test 1 second memory lim ...

  6. Codeforces Round #589 (Div. 2) A. Distinct Digits

    链接: https://codeforces.com/contest/1228/problem/A 题意: You have two integers l and r. Find an integer ...

  7. ubuntu服务器常用命令

    1.查看系统版本 cat /etc/issue cat /etc/lsb-release 2.查看cpu lscpu 3.查看内存 free -m 4.查看硬盘大小 fdisk -l |grep Di ...

  8. 017_linuxC++之_多态的引入

    多态:一种接口,多种方法(同一种调用方法,根据不同的对象,调用不同类中的函数)静态联编:非虚函数,在编译时确定好动态联编:   1. 对象里有指针,指向虚函数表 2. 通过指针,找到表,调用虚函数 3 ...

  9. luogu 4411 [BJWC2010]取数游戏 约数+dp

    不大难的dp,暴力拆一下约数然后按照约数来统计即可. 注意:vector 很慢,所以一定特判一下,如果没有该数,就不要添加. Code: #include <bits/stdc++.h> ...

  10. Cogs 746. [网络流24题] 骑士共存(最大独立集)

    [网络流24题] 骑士共存 ★★☆ 输入文件:knight.in 输出文件:knight.out 简单对比 时间限制:1 s 内存限制:128 MB 骑士共存问题 «问题描述: 在一个n*n个方格的国 ...