一.Servlet 接口(javax.servlet)

定义:
     public interface Servlet
     Implemented by: FacesServlet, GenericServlet, JspPage

介绍:
     servlet 是运行在 Web 服务器中的小型 Java 程序。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。
     要实现此接口,可以编写一个扩展 javax.servlet.GenericServlet 的一般 servlet,或者编写一个扩展 javax.servlet.http.HttpServlet 的 HTTP servlet。
     此接口定义了初始化 servlet 的方法、为请求提供服务的方法和从服务器移除 servlet 的方法。这些方法称为生命周期方法,它们是按以下顺序调用的:
     1)构造 servlet,然后使用 init 方法将其初始化。
     2)处理来自客户端的对 service 方法的所有调用。
     3)从服务中取出 servlet,然后使用 destroy 方法销毁它,最后进行垃圾回收并终止它。
     除了生命周期方法之外,此接口还提供了 getServletConfig 方法和 getServletInfo 方法,servlet 可使用前一种方法获得任何启动信息,而后一种方法允许 servlet     返回有关其自身的基本信息,比如作者、版本和版权。

常用方法:
     public void destroy():由 servlet 容器调用,指示将从服务中取出该 servlet。此方法仅在 servlet 的 service
                             方法已退出或者在过了超时期之后调用一次。在调用此方法之后,servlet容器不会再对此 servlet 调用 service 方法。
     public ServletConfig getServletConfig():返回 ServletConfig 对象,该对象包含此 servlet 的初始化和启动参数。返回的 ServletConfig 对象是传递给 init 方法的对象.
                             此接口的实现负责存储 ServletConfig 对象,以便此方法可以返回该对象。实现此接口的 GenericServlet 类已经这样做了。
     public String getServletInfo():返回有关 servlet 的信息,比如作者、版本和版权.此方法返回的字符串应该是纯文本,不应该是任何种类的标记(比如 HTML、XML,等等).
     public void init(ServletConfig config) throws ServletException:由 servlet 容器调用,指示将该 servlet 放入服务.servlet 容器仅在实例化 servlet 之后调用 init 方法一次。
                                                     在 servlet 可以接收任何请求之前,init 方法必须成功完成.
     public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException:由 servlet 容器调用,以允许 servlet 响应某个请求。此方法仅在 servlet 的 init()
                                                                 方法成功完成之后调用,应该为抛出或发送错误的 servlet 设置响应的状态代码。

二.HttpServlet 类(javax.servlet.http)

继承关系:
     java.lang.Object--javax.servlet.GenericServlet--javax.servlet.http.HttpServlet

定义:
     public abstract class HttpServlet extends GenericServlet implements Serializable

介绍:
     提供将要被子类化以创建适用于 Web 站点的 HTTP servlet 的抽象类。HttpServlet 的子类至少必须重写一个方法,该方法通常是以下这些方法之一:
         doGet,如果 servlet 支持 HTTP GET 请求
         doPost,用于 HTTP POST 请求
         doPut,用于 HTTP PUT 请求
         doDelete,用于 HTTP DELETE 请求
         init 和 destroy,用于管理 servlet 的生命周期内保存的资源
         getServletInfo,servlet 使用它提供有关其自身的信息

构造方法:
     public HttpServlet():不执行任何操作,因为这是一个抽象类。

常用方法:
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException{}:由服务器调用(通过 service 方法),以允许 servlet 处理 GET 请求。
                                                                             req 包含客户端对 servlet 发出的请求的 HttpServletRequest 对象;
                                                                             resp 包含 servlet 向客户端发送的响应的 HttpServletResponse 对象.
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException{}:由服务器调用(通过 service 方法),以允许 servlet 处理 POST 请求。
                                                                             HTTP POST 方法允许客户端一次将不限长度的数据发送到 Web 服务器,这在发送诸如信用卡号之类的信息时很有用.       
     protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException{}:由服务器调用(通过 service 方法),以允许 servlet 处理 PUT 请求,
                                                                             PUT 操作允许客户端将文件放在服务器上,类似于通过 FTP 发送文件。
     public void service(ServletRequest req, ServletResponse res) throws ServletException,IOException:将客户端请求分发给受保护的 service 方法。无需重写此方法。

三.web执行流程
     1.实现项目,发布到服务器下(Tomcat的webapps文件夹下);
     2.启动Tomcat服务器(实际上是启动了ServerSocket对象,监听8080端口,等待客户端连接);
     3.当用户在浏览器地址栏输入网址时,即向服务器发起请求(此时浏览器底层建立起Socket对象,将HTTP的请求部分(请求行/请求头/请求体)发送至服务器);
     4.服务器(Servlet接口或其实现类)分析请求,通过service方法判断是请求动态资源还是静态资源,如果是动态资源则使用反射技术,创建对象;如果是静态资源,则直接读取文件夹中的内容;
     5.服务器(Tomcat)结合http协议响应部分和输出流向客户端进行响应;
     6.浏览器通过输入流接收来自服务器的数据,进行解析和处理,并展现给用户;

四.Servlet生命周期

1_当用户通过浏览器首次访问某个Servlet时,tomcat会调用servlet的构造函数创建一个Servlet对象,之后调用servlet下的init方法(仅执行一次);

2_调用servlet下的service方法,在service方法中判断本次是GET/POST方法,调用servlet下的doget/dopost方法;

3_以后从客户端浏览器每次向服务端对当前servlet发起请求,仅仅只执行其下的service__>doget/dopost;

4_停止服务器(正常/中断)/重新加载项目 servlet销毁;
   正常停止服务器/重新加载项目会执行destory方法
     注意: 单实例多线程模式,会有效率问题,安全问题

Servlet--HttpServlet的更多相关文章

  1. Java Servlet(五):GenericServlet与Servlet、HttpServlet之间的关系(jdk7+tomcat7+eclipse)

    本篇主要记录下,对GenericServlet的作用理解,及其与Servlet/HttpServlet之间的关系. 示例完成业务: 1.新建一个login.jsp页面,要求改页面能输入username ...

  2. Servlet生命周期引起的问题

    A:Servlet的定义与作用. B:Serlvet的体系结构 Servlet | | GenericServlet | | HttpServlet | | 用户自定义的Servlet. HttpSe ...

  3. Maven创建servlet项目演示(三)

    上一节用Maven新建了web项目成功后,本文演示在此基础上应用servlet. 从对tomcat服务器进行配置可的过程中可以知道,tomcat作为servlet容器运行,负责处理客户请求,把请求传送 ...

  4. Servlet复习1: 一个简单的Servlet的使用

    Servlet学习 1. Servlet与JSP的关系 2. Servlet的声明周期 3. 一个简单的Servlet的使用方法 什么是Servlet? 什么又是JSP? 继承了javax.servl ...

  5. Java Servlet 技术简介

    Java Servlet 技术简介 Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么 ...

  6. servlet基础讲解

    基本知识一.Web结构1.两种应用程序 ①桌面应用程序:QQ.CS.MyEclipse.Office.DW.360.浏览器等必须下载.安装.桌面快捷方式.注册表信息.操作系统后台服务.占用操作系统端口 ...

  7. 【Java】Java Servlet 技术简介

    Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么,它们是如何工作的,如何使用它们来创 ...

  8. Servlet基础知识

    基本知识一.Web结构1.两种应用程序 ①桌面应用程序:QQ.CS.MyEclipse.Office.DW.360.浏览器等必须下载.安装.桌面快捷方式.注册表信息.操作系统后台服务.占用操作系统端口 ...

  9. JavaWeb(一)-Servlet知识

    一.Servlet简介 Servlet是sun公司提供一门用于开发动态web资源的技术. sun公司在其API中提供了一个servlet接口,用户若想开发一个动态web资源(即开发一个java程序向浏 ...

  10. Servlet以及单例设计模式

    1.Servlet概述 a)Servlet,全城是Servlet Applet,服务器端小程序,是一个接口,定义了若干方法,要求所有的Servlet必须实现. b)Servlet用于接收客户端的请求, ...

随机推荐

  1. C# 深化基本概念

    关于IDisposable的Dispose方法 .Net中GC会自动回收托管资源, 对于非托管资源应该使用Dispose方法. 在使用Dispose方法时,应注意避免在Dispose内部中继续释放托管 ...

  2. Python3解leetcode Valid Parentheses

    问题描述: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if th ...

  3. Vijos:P1117数的划分

    描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1;问有多少种不同的分法. 格式 输入 ...

  4. Redis多个数据库

    注意:Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念. Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存 ...

  5. jmeter 开发自己的java请求 二次开发

    package test; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient. ...

  6. css3文字与字体的相关样式

    给文字添加阴影——text-shadow属性 text-shadow属性是css2中定义的,在css2.1中删除了,在css3中恢复text-shadow:length length length c ...

  7. jdbcTemplate简单使用

    package com.bizvane.spider.tools; import org.apache.commons.dbcp.BasicDataSource; import org.springf ...

  8. JavaScript-导论

    说明:此类博客来自以下链接,对原内容做了标注重点知识,此处仅供自己学习参考! 来源:https://wangdoc.com/javascript/basic/introduction.html 1.什 ...

  9. Android在Win10环境搭建

    一.安装JDK并配置环境变量 1.在Java官方网站上下载相应系统的jdk文件安装,如win7 64 位系统下安装jdk-6u45-windows-x64,全部选择默认的安装路径即可安装完成. 2.配 ...

  10. "Mysql has gone away"的几种可能

    现象: 在本地利用Flask自带的WSGI服务进行调试没有问题后,通过Gunicorn进行部署. 但是在一晚上没有访问之后,第二天再次访问会出现500(Internal error). 原因: 通过追 ...