深入分析javaweb技术内幕笔记4---Servlet、Session与Cookie、Tomcat

Servlet工作原理解析

1.Servlet对应的tomcat容器模型:


2.context容器直接管理Servlet在容器的包装类Wrapper

3.一个context对应一个web工程

4.将servlet包装成context容器中的StandWrapper原因:StandWrapper是tomcat容器的一部分,它具有容器的特征,而servlet作为一个独立的web开发标准,不应该强耦合在tomcat中。

5.web.xml属性都被解析到context中,所以说context容器才是真正运行Servlet的servlet容器

6.<url-pattern>的解析规则,对Servlet和Filter一样,首先精准匹配,再“最长路径匹配”,最后后缀匹配

  • 精确匹配:如/foo.htm只会匹配foo.htm这个url
  • 路径匹配:如/foo/*会匹配以foo为前缀的url
  • 后缀匹配:如*.htm会匹配所有以.htm为后缀的url

Session与Cookie

1.Cookie存储在客户端,Session存储在服务端,因此Session更适合存储用户隐私和私有的数据

2.不同浏览器对Cookie大小限制不同,Cookie在HTTP的头部,所以通常用gzip的deflate对HTTP Body的压缩不能压缩Cookie,如果Cookie的量非常大,则可以考虑将Cookie也做压缩,压缩方式是将Cookie的多个K/V对看成普通的文本,做文本压缩

3.前后端对Cookie的操作:http://blog.csdn.net/zzhao114/article/details/54917357

4.Session需要Cookie的支持,每个Session有一个唯一的ID(name为JSESSIONID的Cookie)

5.服务端第一次触发通过request.getSession()方法获取HttpSession对象。如果当前Session ID还没有对应的HttpSession对象,就创建一个新的,并将这个对象加到org.apache.catalina.Manager的sessions容器中保存,并管理Session生命周期,Session过期将被挥手,服务器关闭,Session将被序列化到磁盘等

6.为防止表单重复提交,就要标识用户的每一次访问请求,使得每一次访问对服务端来说都是唯一确定的,可以在用户请求的一个表单域增加一个隐藏的表单项


Tomcat的系统架构与设计模式

1.tomcat的总体结构


2.Connection用的是数组而不是List集合,但并不是一开始分配一个固定大小的数组

3.组件:

  • tomcat组件的生命周期是通过Lifecycle接口来控制的
  • Connector的主要任务是负责挥手浏览器发过来的TCP连接请求,创建一个Request和Response对象分别用于和请求端交换数据。处理请求的线程就是Container组件的事情。(Connector是可以选择替换)
  • Container是容器的父接口,所有容器都必须实现这个接口,用的是典型的责任链的设计模式。其中,host子容器可对web.xml文件解析,Engine代表一个完整的Servlet引擎
  • Engine容器比较简单,它只定义了一些基本的关联关系。Engine没有父容器,它的标准实现类是StandardEngine
  • Host是Engine的子容器,一个Host在Engine中代表一个虚拟主机,这个虚拟主机的作用就是运行多个应用,它负责安装和展开这些应用,并且标识这个应用以及能够区分它们。它除了关联子容器,还保存一个主机应有的信息
  • Context代表Servlet的Context,它具备了Servlet运行的基本环境,理论上只要用Context就能运行Servlet了。简单的Tomcat可以没有Engine和Host
  • Wrapper代表一个Servlet,它负责管理一个Servlet,包括Servlet的装载、初始化、执行及资源回收。Standardwrapper将直接和Servlet的各种信息打交道。Servlet可以获得的信息都在StandWrapperFacade(StandWrapper的门面封装类)中封装
4.tomcat的设计模式:

  • 门面设计模式:在Request和Response对象封装、从StandWrapper到ServletConfig封装、从ApplicationContext到ServletContext封装中都用到了这种设计模式
  • 观察者模式:Lifecycle的应用 http://blog.csdn.net/zzhao114/article/details/54772898
  • 命令设计模式:主要作用就是封装命令,把发出的命令的责任和执行命令的责任分开,也是一种功能分工。在tomcat中命令模式在Connector和Container组件之间体现
  • 责任链模式:很多对象由每个对象对其下家的引用而连接起来形成一条链,请求在这条链上传递,直到链上的某个对象处理此请求,或者每个对象都可以处理请求,并传给“下家”,直到最终链上每个对象都处理完。应用在Container组件
5.Container中的Pipeline和Valve:

Pipeline和Valve拓展了Container链上的功能,使得链向下传递的过程中,能够接受外界的干预。Pipeline就是链接每个子容器的管子,里面传递的Request和Response对象好比管子里流的水,而Value就是在这个管子上开的一个个小口子,让你有机会接触到里面的水,做一些额外的事情


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值