Servelt工作原理解析(一)

本文深入探讨了Tomcat作为Servlet容器的角色,以及其内部结构如何影响Servlet的运行。通过实例代码展示了如何在Tomcat中添加Web应用,并解析了addWebapp方法的实现细节。

==转载自https://www.ibm.com/developerworks/cn/java/j-lo-servlet/

IBM Developer
Servelt和Servelt容器的关系就像枪和子弹的关系,为了解耦,通过标准化接口来相互协作,Servlet容器种类很多,如Tomcat为例。Tomact的容器等级中,Context容器是直接管理Servelt在容器中的包装类Wrapper,所以Context容器如何运行将直接影响Servlet的工作方式。结构为
Tomcat---------Container容器----Engine-----Host----Servlet容器----Context—Wrapper

于是我们知道Tomcat的容器分为四个等级,正真管理Servlet的容器是Context容器,一个Context对应一个Web工程。在Tomcat的配置文件可以很容易发现这一点

<Context path="/projectOne" docBase="D:\projects\projectOne"
reloadable="true"/>

那么Tomcat解析Context容器的过程,包括如何构建Servlet的过程
给tomcat增加一个Web工程

Tomcat tomact = getTomcatInstance();
File qppDir = new File(getBuildDirectory(),"webapps/examples");
tomcat.addWebapp(null,"/examples,appDir.getAbsoultePath());
tomacat.start();
ByteChunk res = getUrl();
assertTure(res.toString().index0f("<h1>hello world</h1>")>0);
//这个代码创建一个Tomcat实例并新增了一个Web应用,然后启动tomcat并调用其中的一个
Hello'World'ExamHelloWorldExample

Tomcat的addWebapp方法代码:
PublicContext addWebapp(Host host,String url,String path){
	silence(url);
	Ciontext ctx = new StandardContext();
	ctx.setPath(url);
	ctx.setDocBase(path);
	if(defaultRealm == null){
		inintSimpleAuth();
		}
	ctx.setrealm(defaultRealm);
	ctx.addLifecycleListener(new DefaultWebXmlListener());
	.....
	}
	//前面介绍了一个Web应用对应一个Context容器也就是Servlet运行的Servlet容器,添加添加一个web应用时将会创建一个StandardContext容器并给这个Context容器设置必要的参数,url和path分别代表这个应用在Tomcat中的访问路径和这个应用实际的物理路径。其中最重要的时contextConfig,这个类会负责整个Web应用配置的解析工作,最后这个Context容器会加载到父容器Host中。
	//接下来将会调用Tomcat的start方法启动Tomcat,如果你清楚Tomcat的系统架构,你会很容易理解Tomcat的启动逻辑,Tomcat的启动逻辑是基于观察者模式设计的,所有的容器都会继承于Lifecycle接口,它它管理着容器的整个生命周期,所有容器的修改和状态的改变都会由它去通知已经注册的观察者(listener)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值