1. Catalina通过一个成为Session管理器的组件来管理建立的Session对象,该组件由org.apache.catalina.Manager接口表示。
2. Session管理器需要与一个Context容器相关联,且必须与一个Context容器关联。
3. Session管理器负责创建、更新、销毁Session对象,当请求到来时,会返回一个有效的Session对象。
4. 在Catalina的默认连接器中,org.apache.catalina.connector.HttpRequestBase类实现HttpservletRequest接口,可以用来获取session。
5. 默认情况下,session管理器会将其所管理的Session对象放在内存中。但是,在tomcat中,session管理器也可以将Session对象进行持久化,存储到文件存储器或通过JDBC写入到数据库中。在Catalina中,org.apache.catalina.session包下有一些与Session对象和Session对象管理相关的类。
6. 在Catalina中Session接口的标准实现位于org.apache.catalina.session包下的StandardSession类。
7. 为了安全起见,Session管理器并不会直接将StandardSession实例交给servlet实例使用。而是使用了一个session接口的外观类: StandardSessionFacade. Session管理器会使用另一个外观类:org.apache.catalina.Session接口。
8. 在Catalina中,org.apache.catalina.session包中有一个名为ManagerBase的工具类,该类提供了常见功能的实现。ManagerBase类有两个直接子类,分别是StandardManager类和PersistentManagerBase类。
9. 当Catalina运行时,StandardManager实例会将session对象存储在内存中。但是,当catalina关闭时,它会将当前内存中的所有session对象存储到一个文件中。当再次启动Catalina时,又会将这些Session对象重新载入到内存中。
10. Manager接口提供了getContainer()方法和setContainer()方法,以便将一个Manager实现与一个Context容器相关联。
11. Load方法和upload方法用来将Session对象持久化到辅助存储器中,当然这还需要session管理器对持久化的支持。
12. 一个活动的Session对象指的是有效的,还未过期的Session对象。
13. StandardManager 类是Manager接口的标准实现,该类将Session对存储于内存中。
14. StandardManager类实现Lifecycle接口。这样就可以由与其关联的Context容器来启动和关闭。其中stop()方法的实现会调用unload()方法,以便将有效的Session对象序列化为一个名为”SESSION.ser”的文件中,而且每个Context容器都会产生一个这样的文件。
15. PersistentManagerBase类是所有持久化Session管理器的父类。
16. 在tomcat4中,session备份和换出由Manager实现Runnable接口,来定时的执行session的换入和换出。而在tomcat5 这些交给backgroundProcess管理器来完成。
17. Tomcat4 提供了DistributeedManager类,该类继承自PersistentManagerBase类,前一个类用于两个或多个节点的集群环境。
18. 为了实现复制Session对象的目的,当创建或销毁Session对象时,DistributedManager实例会想其他节点发送消息。
19. 为了与集群中其他节点的DistributedManager实例发送和接收消息,Catalina在org.apache.catalina.cluster包中有一些可供使用的工具类。其中,ClusterSender类用于向集群中的其他节点发送消息,ClusterReceiver实例用于接收集群中其他节点发送的消息。
20. DistributedManager类实现了java.lang.Runnable接口,这样就可以使用一个专门的线程来检查对象是否过期,并从集群中其他节点上接收消息。
21. 存储器是org.apache.catalina.Store接口的实例,是为Session管理器管理的Session对象提供持久化存储器的一个组件。
22. StoreBase类是一个抽象类,提供了一些基本功能。该类有两个直接子类,分别是FileStore类和JDBCStore类。
23. JDBCStore类将Session对象通过JDBC存入数据库中。因此为了使用JDBCStore,需要分别调用setDriverName()方法和setConnectionURL()方法来设置驱动程序名称和URL。
引言
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation
of HTTP)的建议已经提出。
HTTP协议的主要特点可概括如下:
1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
一、HTTP协议详解之URL篇
http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。
HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:
http://host[":"port][abs_path]
http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口80;abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。
eg:
1、输入:www.guet.edu.cn
浏览器自动转换成:http://www.guet.edu.cn/
2、http:192.168.0.116:8080/index.jsp
二、HTTP协议详解之请求篇
http请求由三部分组成,分别是:请求行、消息报头、请求正文
1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF
其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。
请求方法(所有方法全为大写)有多种,各个方法的解释如下:
GET 请求获取Request-URI所标识的资源
POST 在Request-URI所标识的资源后附加新的数据
HEAD 请求获取由Request-URI所标识的资源的响应消息报头
PUT 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE 请求服务器删除Request-URI所标识的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT 保留将来使用
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
应用举例:
GET方法:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源,eg:GET /form.html HTTP/1.1 (CRLF)
POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。
eg:POST /reg.jsp HTTP/ (CRLF)
Accept:image/gif,image/x-xbit,... (CRLF)
...
HOST:www.guet.edu.cn (CRLF)
Content-Length:22 (CRLF)
Connection:Keep-Alive (CRLF)
Cache-Control:no-cache (CRLF)
(CRLF) //该CRLF表示消息报头已经结束,在此之前为消息报头
user=jeffrey&pwd=1234 //此行以下为提交的数据
HEAD方法与GET方法几乎是一样的,对于HEAD请求的回应部分来说,它的HTTP头部中包含的信息与通过GET请求所得到的信息是相同的。利用这个方法,不必传输整个资源内容,就可以得到Request-URI所标识的资源的信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新。
2、请求报头后述
3、请求正文(略)
三、HTTP协议详解之响应篇
在接收和解释请求消息后,服务器返回一个HTTP响应消息。
HTTP响应也是由三个部分组成,分别是:状态行、消息报头
路由交换命令总结
近些天一直在总结路由交换命令,其实也不多,为了便于大家复制参考,特意使用了编程语言的模式,希望对大家有帮助。
个人总结,难免有些纰漏,欢迎指正。
【基础配置】 进入console口进行本地配置 用户模式 xx>enable n 特权模式 xx#configure terminal 全局配置模式 xx(config)#interface [f|s] n/m 进入接口配置模式xx(config-if)# 进入(子)接口模式后配置IP (config-if)#ip addr A.B.C.D 子网掩码 激活接口 (config-if)#no shutdown 配置速度 (config-if)#speed {auto|10|100} 配置接口工作模式 (config-if)#duplex {auto|half|full} 配置时钟(串行口DCE端) (config-if)#clock rate n 反向操作(删除配置) no + 命令 在换回接口上配多个ip (config-if)#ip addr A.B.C.D 子网掩码 (config-if)#ip addr A.B.C.D 子网掩码 secondary 查看所有配置 #show running-config 路由器关闭路由功能充当主机 (config)#no ip routing 为路由器设置网关 (config)#ip default-gateway ip地址 改机器名字 (config)#hostname yy 控制线路超时 (config)#line n (config-line)#exec-timeout 0 0 关闭域名解析功能 (config)#no ip domain-lookup 开启路由器http功能 (config)#ip http server (config)#username xxx password yyy (config)#username xxx secret yyy (config)#enable secret yyy 启用密码加密服务 (config)#service password-encryption yyy 开启路由器https功能 (config)#ip http secure-server 开启路由器远程登录功能 (config)#line vty 0 4 (config)#login local或者(config)#no login (config)#enable n 登录时使用命令 telnet A.B.C.D 【交换机】 查看mac地址表 #show mac-address-table 绑定静态mac地址 (config)#mac-address-table static H.H.H vlan n interface fx/x #show arp 在主机上使用arp -a查看arp信息 开启交换机端口安全(防止连接主机恶意发送随机mac填满mac地址表) (conifg)#switchport port-security (conifg)#switchport ? #show port-security int fx/x 恢复 (config)#errdisable recovery 为交换机vlan1配置管理ip (conifg)#int vlan 1 (config-if)#ip addr A.B.C.D 子网掩码 (config-if)#no shut 【交换机vlan】 查看vlan #show vlan-switch或是#show vlan 创建vlan #vlan database (vlan)#vlan n 将端口加入到vlan中 (config-if)#switchport access vlan n 给允许多个vlan的接口打trunk (config-if)#switchport mode trunk 【单臂路由vlan】 路由器上配置子接口实现不同vlan之间通信,先必须激活其父接口,另外IP不允许重复 (config)#interface fx/x.x (config-subif)#encapsulation dot1q vlan-id (config-subif)#ip addr A.C.D.E 子网掩码 (config-subif)#no shut 【使用三层交换机交换虚拟接口】 交换机上配置虚拟交换接口实现不同vlan之间通信,先必须在交换机上添加对应vlan (config)#int vlan n (config-if)#ip addr A.B.C.D 子网掩码 (config-if)#no shut 在删除时,务必先删除交换虚拟接口,再删对应vlan 【VTP】 配置VTP模式 #vlan database (vlan)#vtp {server|client|transparent} 只有域名和密码完全一样的路由器之间才能同步vlan信息 (vlan)#vtp domain <域名> (vlan)#vtp password <密码> 打开VTP裁剪 (vlan)#vtp pruning 退出激活 (vlan)#exit 【端口聚合】 创建 R1(config)#interface port-channel 1 (config-if)#switchport trunk encapsulation dot1q (config-if)#switchport mode trunk 将指定接口加入聚合组内 #int range f x/x-x #channel-group 1 mode on 查看聚合接口 #show etherchannel summary 【生成树协议】 基于vlan的生成树可防止环路 开启生成树协议(STP默认是开启的,可省略) (config)#spanning-tree vlan n 修改生成树协议优先级(根网桥:mac最小、优先级最小) (config)#spanning-tree vlan n priority m 交换机和主机之间连接的端口开启portfast,可防止主机发送BPDU伪造数据 (config-if)#spanning-tree portfast 查看生成树 #show spanning-tree [vlan n] 【静态路由】 查看协议 #show ip protocols 查看路由表 #show ip route 添加静态路由(以默认路由举例) (config)#ip route 0.0.0.0 0.0.0.0 {出接口|下一跳ip} 浮动静态路由(备份链路,在原链路失效后起作用) (config)#ip route 0.0.0.0 0.0.0.0 出接口 AD管理距离 静态黑洞路由 (config)#ip route 192.168.0.0 255.255.0.0 null 0 【RIP距离矢量路由,动态路由】 配置RIP宣告直连网段 (config)#router rip (config-router)#network 网段 更改为版本2 (config-router)#version {2|1} 关闭自动汇总(如果被其他网路隔开时,最好关闭自动汇总) (config-router)#no auto-summary 设置被动接口(只接受更新,不宣告自己) (config-router)#passive-interface 接口 单播更新(只和指定的ip交换路由信息) (config-router)#neighbor ip地址 清除路由表内容 #clear ip route * 【OSPF链路状态路由,动态路由】 配置OSPF宣告直连网路 (config)#router ospf <进程号> (config-router)#router-id <任意ip地址> (config-router)#network <ip网段> <反掩码> area n 重启OSPF进程 #clear ip ospf process 查看接口的OSPF信息 #show ip ospf interface 查看邻居表 #show ip ospf neighbor 查看链路数据表 #show ip ospf database <?> 【EIGRP链路状态路由,动态路由】 配置EIGRP宣告直连网路 (config)#router eigrp <系统编号> (config-router)#network <ip网段> 查看邻居表 #show ip eigrp neighbors 查看拓扑表 #show ip eigrp topology 【VRRP虚拟路由器路由协议】 提供网关冗余 查看VRRP信息 #show vrrp <?> VRRP配置(在提供备份的两台路由器上做以下配置) 端口跟踪(监视某个接口的状态) (config)#track 1 interface 接口 line-protocol (config-if)#vrrp <1~254> ip <ip地址> 额外配置优先级(IP和优先级越大Master)和抢占 (config-if)#vrrp <1~254> priority <1~254> (config-if)#vrrp <1~254> preempt (config-if)#vrrp 1 track 1 decrement <1~255> 【访问控制列表ACL】 ACL无法控制自身发起的流量,对于已经建立的流量不起作用 标准ACL(不能单独删除、添加一条访问列表) (config)#access-list <1~99|1300~1999> {permit|deny} ip地址 反掩码 扩展ACL (config)#access-list <100-199> {permit|deny} <协议> <源ip> <反掩码> <源端口> <目标ip> <反掩码> <目标端口> 应用到指定ACL到某个接口 (config)#int 接口 (config-if)#ip access-group <1~99|100-199|1300~1999> {in|out} 命名ACL (config)#ip access-list standard <标准ACL名字> (config-std-nacl)#{permit|deny} ip地址 反掩码 (config)#ip access-list extended <扩展ACL名字> (config-ext-nacl)#{permit|deny} <协议> <源ip> <反掩码> <源端口> <目标ip> <反掩码> <目标端口> 应用到指定ACL到某个接口 (config)#int 接口 (config-if)#ip access-group <标准ACL名字|扩展ACL名字> {in|out} 自反ACL(RACL,可以只允许内网主动发起的流量通过) (config)#ip access-list extended OUTB (config-ext-nacl)#permit tcp any any reflect RACL (config)#ip access-list extended INB (config-ext-nacl)#evaluate RACL (config-ext-nacl)#deny ip any any 应用到指定ACL到某个接口 (config-if)#ip access-group OUTB out (config-if)#ip access-group INB in 基于时间的ACL 设置时区时间 (config)#clock timezone GMT +8 #clock set hh:mm:ss <日> <月> <年> 定义时间 (config)#time-range <时间名> (config-time-range)#periodic <?> hh:mm to hh:mm (config-time-range)#absolute start hh:mm:ss <日> <月> <年> end hh:mm:ss <日> <月> <年> 结合ACL (config)#ip access-list extended <扩展ACL名字> (config-ext-nacl)#deny tcp any any time-range <时间名> 【NAT和PAT】 定义内外网接口 (config)#int 接口 (config-if)#ip nat {inside|outside} 静态NAT (config)#ip nat inside source static ip地址 <?> 静态PAT (config)#ip nat inside source static <协议> ip地址 <端口号> <?> 使用ACL捕获流量 (config)#access-list n permit ip地址 反掩码 (config)#ip nat pool <地址池名> <起始ip地址> <终止ip地址> netmask 掩码 TCP负载均衡(轮询转换) (config)#ip nat pool <地址池名> <起始ip地址> <终止ip地址> netmask 掩码 type rotary 动态NAT (config)#ip nat inside source list n pool <地址池名> 动态PAT (config)#ip nat inside source list n pool <地址池名> overload 查看转换项 #show ip nat translations 【广域网PPP协议】 在串行口上的两台路由器都封装ppp协议 (config)#int sx/x (config-if)#encapsulation ppp (config-if)#no shut 启用PAP认证,未加密 认证方 (config)#username <用户名> password <密码> (config-if)#ppp authentication pap 请求认证方 (config-if)#ppp pap sent-username <用户名> password <密码> 启用CHAP认证,安全加密 认证方 (config)#username <请求认证方名> password <请求认证方密码> (config-if)#ppp authentication chap 请求认证方 (config)#username <认证方名> password <认证方密码> (config-if)#ppp authentication chap 【帧中继】 无广播的多路访问网络(NBMA) 配置帧中继交换机 关闭路由器路由功能 (config)#no ip routing 启用帧中继 (config)#frame-relay switching 进入串行接口 R8(config)#int sx/x 封装frame-relay协议 R8(config-if)#encapsulation frame-relay 指定lmi-type类型 (config-if)#frame-relay lmi-type cisco 指定intf-type接口类型为DCE (config-if)#frame-relay intf-type dce 配置时钟频率 (config-if)#clock rate n 配置DLCI (config-if)#frame-relay route <进DLCI号> int <出接口> <出DLCI号&