Servlet, 这个词对java程序员并不陌生,我想几乎每个java程序员在学习J2EE知识时,首先学习的就是servlet,这是一种正确的学习方式,在我看来Servlet是J2EE的基础,要熟练的掌握J2EE,必须深刻的了解Servlet的原理,因为你想想,现在只要是web相关的技术或框架,无论是开源的、非开源的,哪个和Servlet没有关系? Spring MVC、Struts、WebWork、SiteMesh等框架都是在Servlet的基础上搭建起来的,要想深刻的了解这些框架 , 熟练的运用这些框架,首先就要理解Servlet原理,明白Servlet的规范。下面一系列文章,将描述一些我对Servlet相关的了解. 首先,让我们理解几个概念?
       什么是Servlet?
       Servlet 是一种基于java技术的web组件,是一种基于java的且与第三方平台无关的类。通常,它可以被Web 服务器编译、加载和运行,最后生成动态的资源内容。
       什么是Servlet容器?
       Servlet 容器通常是web 服务器中的一部分,或者说是它的一个组件,Sevlet容器通常提供了一些如接收客户端请求、给出响应等网络请求服务,通常,Servlet容器通过Servlet的生命周期来管理所有的Servlet, Tomcat就是一个典型的Servlet容器。
       为什么要使用Servlet?
         1.  Servlet是采用java语言编写,而由java 跨平台性的特点可知,servlet的移植性很好,且servlet API具有完善的标准,几乎所有的主流服务器都支持servlet.
         2.  据说,Servlet与传统的CGI(Common Gateway Interface)相比,功能要强大,且处理的请求采用的是线程,而非进程,从而节省大量的资源开销,因此Servlet处理请求更轻量级、更高效。
       Servlet规范API 类图
    
   
     结合上图,我们了解和明白一些servlet相关的知识
     servlet响应client请求的大概步骤
     前面我们说过,servlet的作用主要是接受client请求,生成动态内容,然后返回给客户端,那这个处理过程又由哪些步骤组成呢?
     首先,client 发送请求到 服务器 web server或servlet容器;
     然后,web server 接收client请求,然后根据client请求调用对应的servlet,动态得产生请求的资源;
     最后,web server 将资源返回client.
   
     servlet的生命周期
     通过上图,可以清楚的知道servlet接口中主要方法有三个,分别是init、service和destroy。让我们结合这三个方法来描述servlet的生命周期:  1, 在servlet容器或web server启动时, 对servlet进行实例化,此时调用servlet的构造方法;servlet实例化后,调用该servlet实例的init方法,对servlet进行一些初始化处理,处理完成后,将该servlet注入到servlet容器中;
      2, 当client向web server或servlet容器请求servlet时,web server或servlet容器首先会根据请求的servlet名称去servlet容器中找对应的servlet,如果servlet不存在该名称对应的servlet,则向client响应请求不存在等信息,否则进行步骤3;
     3, 如果请求的servlet存在于servlet容器,则调用servlet的service方法,生成动态资源,响应给client; (记住,整个过程该servlet只有一个实例,即单例);
     4, 当web server退出或servlet容器销毁时,调用servlet的destroy方法,最后唯一的sevlet实例将会被GC.
 
     servlet 规范中各interface的功能职责
      Servlet: 这个就不用说了,Servlet的核心,具体Servlet中方法的处理规范可见以上描述的Servlet的生命周期
      ServletConfig:  封装了对应的Servlet的相关配置信息,如servlet名字,servlet的初始参数以及Servlet所在的上下文对象,即ServletContext.  ServletConfig中的属性通常在Servlet初始化时进行初始化.
      ServletRequest:  封装了所有来自client端的请求信息,如请求参数、cookie、attribute、请求类型、请求方式(安全还是非安全等)等,同时ServletRequest中的还需要明确指定部分属性,如 请求内容的编码(可以自己设定)等.  进一步的解释,可以参照下一章对HttpServletRequest的分析.
      ServletResponse:  封装了server端资源到client端的所有相关信息,如 资源传输的buffer信息、响应的url地址信息、资源的编码信息等.
      ServletInputStream/BufferedReader:  读取ServletRequest所封装的信息的I/O接口,ServletInputStream,采用字节流的方式读取;BufferedReader,采用字符流的方式读取.
      ServletOutputSteam/PrintWriter:  将资源写入到client的I/O接口. ServletOutputSteam,采用字节流的方式进行写入;PrintWriter,采用字符流的方式进行写入.
      GenericServlet:  抽象类,它定义了一个Servlet的基本实现,虽然它是Servlet的基本实现,但是它是与协议无关的(即不依赖于http协议,也不依赖于其它应用层协议).  一般,基于协议的Servlet,如httpservlet,通常会继承该类.
      RequestDispatcher:  我们在搭建web应用的过程中,可能会有这样的需求: 在当前servlet中处理完成后,需要导向(forwar)另外一个servlet或静态资源(html或text等),或者 是在当前servlet的处理过程中,需要将其它的资源包含(include)到当前的servlet资源里来。而RequestDisaptcher 接口中的forward和inluce方法就提供了实现以上两个需求的机制. 关于RequestDispatcher的详细描述见后面章节.

Servlet 规范笔记—servlet概念及结构的更多相关文章

  1. Servlet 规范笔记—基于http协议的servlet

    在上一章节,我们大概的描述了servlet的规范以及servlet和servlet容器的概念和用途,我们清楚的知道servlet容器提供了接收来自client端的请求,然后根据请求进行处理(如:执行对 ...

  2. 从servlet规范说起

    servlet规范 1 servlet 3.1规范 1.1 What is servlet A servlet is a JavaTM technology-based Web component, ...

  3. Servlet学习笔记01——什么是servlet?

    1.什么是Servlet? sun公司制订的一种用来扩展web服务器功能的组件规范. (1)扩展web服务器功能 早期的web服务器(apache web server,iis) 只能处理静态资源的请 ...

  4. Servlet学习笔记【1】--- 背景和基础知识(CGI、Web服务器发展史、Servlet简介、任务、继承结构)

    本文主要讲Servlet的基础知识和背景知识. 1 CGI简介 CGI(Common Gateway Interface 公共网关接口)是WWW技术中最重要的技术之一,有着不可替代的重要地位.CGI是 ...

  5. Servlet学习笔记(一)之Servlet原理、初始化、生命周期、结构体系

    Servlet是用java语言编写的应用到Web服务器端的扩展技术,与java对象的区别是,Servlet对象主要封装了对HTTP请求的处理,并且它的运行需要Servlet容器的支持(以下会介绍原因, ...

  6. Java Servlet规范

    截自网址:http://blog.csdn.net/u010391029/article/details/46521051 JavaServlet Specification  Version 2.3 ...

  7. servlet学习笔记一

    Servlet一.基本概念 我们的程序根据是否需要访问网络,可分为网络程序和非网络程序.而 网络程序又分为B/S结构和C/S结构. 什么是C/S?即客户端(Client)/服务器(Server)模式. ...

  8. servlet规范

    Servlet规范 一个最基本的 Java Web 项目所需的 jar 包只需要一个 servlet-api.jar ,这个 jar 包中的类大部分都是接口,还有一些工具类,共有 2 个包,分别是 j ...

  9. Servlet规范总结

    Servlet接口 Servlet规范的核心接口即是Servlet接口,它是所有Servlet类必须实现的接口,在Java Servelt API中已经提供了两个抽象类方便开发者实现Servlet类, ...

随机推荐

  1. h5 图片回显

    <form method="post" id="imgForm" action ="/hi/holdHead" enctype=&qu ...

  2. Android使用token维持登陆状态的方法

    什么是token token(令牌)是一串唯一的字符串,通常由服务端生成,在注册完成时返回给客户端,用来标识此用户,客户端将此字符串存储在本地.在以后的网络请求时,客户端先查询本地的token,如果有 ...

  3. Java:网络传输

    网络以字节码传输 String s = "我恨你"; //转成字节: byte[] brr = s.getBytes();//gbk //iE:utf-8 String s1 = ...

  4. PHP设置30秒内对页面的访问次数

    <?php //Calculate 60 days in the future //seconds * minutes * hours * days + current time $intime ...

  5. 【Henu ACM Round#14 C】Duff and Weight Lifting

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 2^y可以由两个2^(y-1)相加得到. 则有一个贪心的策略. 就是2^x尽量都变成2^(x+1) (即能够凑就尽量凑) 如果x还有 ...

  6. 三种连接 & DOS & SYNFLOOD & 防御

    accept的时候,三次连接是建立的. 有一种DOS攻击是SYN FLOOD,就是大量的SYN到达,但是没有ACK,无法建立起连接. 防御的方法,有多种,如下: 比如,禁止部分源地址: 到达一定阈值之 ...

  7. Androidbutton事件的五中写法总结

    button事件的五中写法: 1.匿名内部类 2.类实现View.OnClickListener接口 3.创建实例化接口对象 4.使用内部类 5.自己定义方法,配置Android:onclick属性 ...

  8. css 浮动 绝对定位 和 相对定位

    html是按照文件流(文档流)的方式加载的,但是全部是文档流的话,很多好看的样式是实现不了的,所以出现了浮动,相对定位,绝对定位的概念. 一.首先,按照文档流和非文档流来分类: ①文档流:就是按照上下 ...

  9. RGB-D action recognition using linear coding

    First, a depth spatial-temporal descriptor is developed to extract the interested local regions in d ...

  10. module.exports,exports和export default,export的区别

    前提:CommonJS模块规范和ES6模块规范是完全不同的两个概念. module.exports,exports属于CommonJS模块规范: export default,export属于ES6模 ...