这段时间工作不太忙,所以抽时间学习了TOMCAT,
TOMCAT实际就是负责保持TCP连接传递到部署的项目中。浏览器实质就是TCP发送器。将用户的请求封装成TCP发送请求。当然格式是双方协定的。使用的socket连接。请求内容为空格和换行符分割。看了下源码解析请求头,觉得写得好精致啊。讲请求转换为byte数组。然后转化为char值直接比较他们的值大小。如果和换行符或者空格char相同则提出。
int
ix = 0
;
int
ox = 0
;
String key
=
null
;
String value
=
null
;
while
(ix <
data.length) {
byte
c = data[ix++
];
switch
((
char
) c) {
case
'&'
:
value
=
new
String(data, 0
, ox, encoding);
if
(key !=
null
) {
key
=
null
;
}
ox
= 0
;
break
;
case
'='
:
key
=
new
String(data, 0
, ox, encoding);
ox
= 0
;
break
;
case
'+'
:
data[ox
++] = (
byte
)' '
;
break
;
case
'%'
:
data[ox
++] = (
byte
)((convertHexDigit(data[ix++]) << 4
)
+ convertHexDigit(data[ix++
]));
break
;
default
:
data[ox
++] =
c;
}
}
//
The last value does not end in '&'. So save it now.
if
(key !=
null
) {
value
=
new
String(data, 0, ox, encoding);
解析请求资源。根据资源名获取类名。然后导入class文件URLLoader。然后执行方法。提起要继承HttpServlet 执行service()方法。
还有一个好东西就是它的一场信息管理ResourceBundle读取一场信息配置文件根据每个包构成一个单例 放入一个静态HashMap中使用的使用通过包名获取。非常灵活。而ResourceBundle可以自动的获取服务器运行环境获取相应的配置文件。比如获取LocalStrings文件,如果在中国地区,包下面还有一个LocalStrings_zh_CN的配置文件,将会优先读取。
/**
异常信息如何使用
* The string manager for this package.
*/
private
StringManager sm =
StringManager.getManager(Constants.Package);
/**
* 用于加载 properties 文件 国际化文件
* 当在中文操作系统下,如果myres_zh_CN.properties、myres.properties两个文件都存在
* ,则优先会使用myres_zh_CN
* .properties,当myres_zh_CN.properties不存在时候,会使用默认的myres.properties。
*
* 没有提供语言和地区的资源文件是系统默认的资源文件。
* 资源文件都必须是ISO-8859-1编码,因此,对于所有非西方语系的处理,都必须先将之转换为Java Unicode
* Escape格式。转换方法是通过JDK自带的工具native2ascii.
*/
private
ResourceBundle bundle;
private
Demo1(String packageName) {
String bundleName
= packageName + ".LocalStrings"
;
bundle
=
ResourceBundle.getBundle(bundleName);
}
public
static
void
main(String[] args) {
Demo1 c
=
new
Demo1("com.util"
);
System.out.println(c.bundle.getString(
"Hello"
));
}
看的比较马虎。有新的在记录吧。

