你有没有想过,如果由你来编写一个Servlet服务器,你会怎么写,当然先假定你已经阅读了servlet服务器的规范,知道它应该如何组织自己以及如何对请求做出响应等.对于已有一定j2ee工作经验的人来说(先假定它完全没看到servlet服务器的实现),我想他应该也有一个大概的概念,关于如何编写一个servlet服务器.软件行业的发展最具有深远意义的是开源的产生,因为开源,我们可以学习到其它高手对某一应用的实例,我们甚至可以为某一开源项目提出自己的意见,贡献自己的代码,正因为更多的投入,才能使一个软件,一个系统,一个想法更加强健;在现在开源时代,如果你不想买一个服务器,你可以下载一个开源的,又或者,你甚至可以自己写一个,如何写呢?至少要先看看前辈们是怎么做的,我这里将以tomcat为例来看看人家是怎么写的服务器,当然,小弟不才,对于很多细节上的说明有存在错漏,大家可尽情指正
如果使用tomcat服务器,应该了解到,平常运行startup.bat或startup.sh脚本即可启动TOMCAT服务器,这两个脚本类似,拿startup.sh来说吧,源代码请大家自己查看,这里就不贴了,因脚本涉及到的细节不多,这里只大概说明一下脚本的内容,脚本主要任务是确认另一脚本catalina.sh是否存在(若是从tomcat官网下载的压缩包当然存在),如果是的话,以传入参数start来运行脚Catalina.sh.
catalina.sh的主要内容是设置运行服务器所需要的系统变量,如JAVA_HOME,JRE_HOME,CATALINA_HOME,CATALINA_BASE及相应的一些安全规则及配置文件位置的设置,在完成变量设置后以start为参数运行java类org.apache.catalina.startup.Bootstrap,运行代码如下:
"$_RUNJAVA" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS /
-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" /
-Dcatalina.base="$CATALINA_BASE" /
-Dcatalina.home="$CATALINA_HOME" /
-Djava.io.tmpdir="$CATALINA_TMPDIR" /
org.apache.catalina.startup.Bootstrap "$@" start /
>> "$CATALINA_BASE"/logs/catalina.out 2>&1 &
这里先只讲启动的情况,对于停止服务或其它的情况有机会再讲