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号&