在上一章节,我们大概的描述了servlet的规范以及servlet和servlet容器的概念和用途,我们清楚的知道servlet容器提供了接收来自client端的请求,然后根据请求进行处理(如:执行对应的servlet生成动态内容,或读取静态资源等),最后将client请求的资源响应给client端。在以上过程中,有一点需要注意,那就是根据servlet容器的作用,client端和server端需要交互传输数据,而在internet上的数据传输一定是基于某种传输协议的,如http、ftp等. 而上一章描述的Servelt规范是不基于协议的。 在这一章,我们将主要描述基于Http协议传输的servlet接口规范。 以下是基于Http 协议的Servlet结构图.
 
    
 
       通过以上servlet结构类图,有以下几点我们是需要注意的:
         
         HttpServlet在Servlet规范上的增强
         HttpServlet是满足Servlet规范、基于Http作为传输协议而设计的一个接口。所以,它不仅满足Servlet规范,继承了Servlet中的所有功能(接口方法),并且,它还具有自己的一些特有的功能,而这些功能即是专门用来处理通过http所传输的信息的。这么说可能有点晦涩难懂,还是举几个例子吧: 例如HttpServlet中不仅仅有service方法,它还包含有doGet、doPost、doPut等一系列方法,如果你熟悉http协议,你应该清楚,http请求类型有post、get、put、delete等,而httpServlet中doGet、doPost方法就是专门用来处理相关的http请求类型.  再举个例子,如果你仔细看看HttpServletRequest接口,你就会发现,除了继承ServletRequest中的方法外,它还有getHeader、getMethod方法,而getHeader就是专门用来获得http的头(header)信息的,getMethod就是专门用来获得client基于http协议请求的方式的,如post、get等。
      
         ServletRequestWrapper和HttpServletRequestWrapper的作用是什么?
         看看ServletRequestWrapper的类结构图,你可能会发现它有两个特点:1,它实现了ServletRequest接口; 2,ServletRequestWrapper 类里有一个对ServletRequest对象的引用.  发现了吧,很明显,这就是java设计模式中的装饰模通过式嘛。结合装饰模式的作用可知,ServletRequestWrapper/HttpServletRequestWrapper提供了一种对ServletRequest/HttpServletRequest进行装饰和扩展的作用。例如,如果你想在调用ServletRequest.setAttribute方法前需要记录这次操作的日志,则可以通过创建个自定义的Servlet,集成ServletRequestWrapper,然后重写setAttribute方法即可.
 
         ServletResponseWrapper和HttpServletResponseWrapper的作用是什么?
        作用和上描述类似。 ServletResponseWrapper长被用来将本该响应给client端的信息提取出来,然后作进一步修饰或增强。如比较常用的页面布局框架SiteMesh就是采用这种机制来捕获页面内容,然后对这些内容进行装饰。

Servlet 规范笔记—基于http协议的servlet的更多相关文章

  1. Servlet 规范笔记—servlet概念及结构

     Servlet, 这个词对java程序员并不陌生,我想几乎每个java程序员在学习J2EE知识时,首先学习的就是servlet,这是一种正确的学习方式,在我看来Servlet是J2EE的基础,要熟练 ...

  2. Servlet学习笔记(二)之Servlet路径映射配置、Servlet接口、ServletConfig、ServletContext

    Servlet路径映射配置 要使Servlet对象正常的运行,需要进行适当的配置,以告诉Web容器哪个请求调用哪个Servlet对象处理,对Servlet起到一个注册的作用.Servlet的配置信息包 ...

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

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

  4. servlet规范--Servlet 规范其实就是对 HTTP 协议做面向对象的封装

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

  5. servlet规范

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

  6. servlet.txt笔记

    javase jdbc ==>java访问数据库html ==>浏览器显示内容,无法把数据提交给后台?==>动态网页技术(servlet)解决前台.后台交互问题动态网页技术:serv ...

  7. Servlet规范总结

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

  8. Servlet学习笔记(四)

    目录 Servlet学习笔记(四) 一.会话技术Cookie.session 1. 什么是会话技术? 2. 会话技术有什么用? 3. Cookie 3.1 什么是Cookie? 3.2 使用Cooki ...

  9. Java Servlet规范

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

随机推荐

  1. IOS--文件管理NSFileManager

    iOS的沙盒机制.应用仅仅能訪问自己应用文件夹下的文件.iOS不像android.没有SD 卡概念.不能直接訪问图像.视频等内容. iOS应用产生的内容,如图像.文件.缓存内容等都必须存储在自己的沙盒 ...

  2. html5的代码验证

    http://html5.validator.nu/ http://validator.w3.org/#validate_by_uri

  3. url与图片

    http://restapi.amap.com/v3/staticmap?location=116.481485,39.990464&zoom=10&size=750*300& ...

  4. POJ 3087 模拟+hash

    也可以用map来搞 样例推出来 就没啥问题了 (先读的是B 然后是A 被坑好久) //By SiriusRen #include <cstdio> #include <iostrea ...

  5. SQL SERVER 2014无法启动T-SQL调试的解决方法(亲自实践)

    将 Windows 登录帐户添加为 sysadmin 已经具有 sysadmin 特权的用户必须执行以下命令: sp_addsrvrolemember 'Domain\Name', 'sysadmin ...

  6. Important Abstractions and Data Structures

    For Developers‎ > ‎Coding Style‎ > ‎ Important Abstractions and Data Structures 目录 1 TaskRunne ...

  7. ES6学习基础

    1.let和const 与var不同,新的变量声明方式带来了一些不一样的特性,其中最重要的两个特性就是提供了块级作用域与不再具备变量提升 { let a = 20; } console.log(a); ...

  8. NOIP愤怒的小鸟

    愤怒的小鸟 Description: 给你\(n<=18\)个小猪,发射的小鸟轨迹为抛物线,求最小用多少个小鸟可以将小猪全部干掉 看到n很小,我想到了搜索,于是我用\(dfs\)枚举出,每个抛物 ...

  9. 小白学开发(iOS)OC_ SEL数据类型(2015-08-10)

    // //  main.m //  SEL数据类型 // //  Created by admin on 15/8/12. //  Copyright (c) 2015年 admin. All rig ...

  10. C#定义变量

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...