欢迎来到天天文库
浏览记录
ID:69035505
大小:381.50 KB
页数:28页
时间:2021-10-25
《Servlet底层原理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、..Servlet底层原理从Servlet容器说起要介绍Servlet必须要先把Servlet容器说清楚,Servlet与Servlet容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力。虽然它们是彼此依存的,但是又相互独立开展,这一切都是为了适应工业化生产的结果。从技术角度来说是为了解耦,通过标准化接口来相互协作。既然接口是连接Servlet与Servlet容器的关键,那我们就从它们的接口说起。前面说了Servlet容器作为一个独立开展的标准化产品,目前它的种类很多,但是它们都有自己的市场定位,很难说谁优谁劣,各有特点。例如
2、现在比拟流行的Jetty,在定制化和移动领域有不错的开展,我们这里还是以大家最为熟悉Tomcat为例来介绍Servlet容器如何管理Servlet。Tomcat本身也很复杂,我们只从Servlet与Servlet容器的接口局部开场介绍,关于Tomcat的详细介绍可以参考我的另外一篇文章?Tomcat系统架构与模式设计分析?。Tomcat的容器等级中,Context容器是直接收理Servlet在容器中的包装类Wrapper,所以Context容器如何运行将直接影响Servlet的工作方式。..word.zl...图1.Tomcat容器模型从上图可以
3、看出Tomcat的容器分为四个等级,真正管理Servlet的容器是Context容器,一个Context对应一个Web工程,在Tomcat的配置文件中可以很容易发现这一点,如下:清单1Context配置参数下面详细介绍一下Tomcat解析Context容器的过程,包括如何构建Servlet的过程。Servlet容器的启动过程Tomcat7也开场支持嵌入式功能,增加了一个启动类org.apache
4、.catalina.startup.Tomcat。创立一个实例对象并调用start..word.zl...方法就可以很容易启动Tomcat,我们还可以通过这个对象来增加和修改Tomcat的配置参数,如可以动态增加Context、Servlet等。下面我们就利用这个Tomcat类来管理新增的一个Context容器,我们就选择Tomcat7自带的examplesWeb工程,并看看它是如何加到这个Context容器中的。清单2.给Tomcat增加一个Web工程Tomcattomcat=getTomcatInstance();FileappDir=new
5、File(getBuildDirectory(),"webapps/examples");tomcat.addWebapp(null,"/examples",appDir.getAbsolutePath());tomcat.start();ByteChunkres=getUrl("localhost:"+getPort()+"/examples/servlets/servlet/HelloWorldExample");assertTrue(res.toString().indexOf("
6、代码是创立一个Tomcat实例并新增一个Web应用,然后启动Tomcat并调用其中的一个HelloWorldExampleServlet,看有没有正确返回预期的数据。Tomcat的addWebapp方法的代码如下:清单3.Tomcat.addWebapppublicContextaddWebapp(Hosthost,Stringurl,Stringpath){..word.zl...silence(url);Contextctx=newStandardContext();ctx.setPath(url);ctx.setDocBase(path);
7、if(defaultRealm==null){initSimpleAuth();}ctx.setRealm(defaultRealm);ctx.addLifecycleListener(newDefaultWebXmlListener());ContextConfigctxCfg=newContextConfig();ctx.addLifecycleListener(ctxCfg);ctxCfg.setDefaultWebXml("org/apache/catalin/startup/NO_DEFAULT_XML");if(host==null)
8、{getHost().addChild(ctx);}else{host.addChild(ctx);}returnctx;}..word
此文档下载收益归作者所有