??xml version="1.0" encoding="utf-8" standalone="yes"?>国产+人+亚洲,国产一区二区三区不卡视频网站 ,一区二区三区四区乱视频http://www.aygfsteel.com/mlw2000/category/13103.htmlBe happy here...zh-cnThu, 01 Mar 2007 02:14:24 GMTThu, 01 Mar 2007 02:14:24 GMT60Servlet 2.1规范概述Q中文版Q『{?/title><link>http://www.aygfsteel.com/mlw2000/articles/86179.html</link><dc:creator>mlw2000</dc:creator><author>mlw2000</author><pubDate>Thu, 07 Dec 2006 14:00:00 GMT</pubDate><guid>http://www.aygfsteel.com/mlw2000/articles/86179.html</guid><wfw:comment>http://www.aygfsteel.com/mlw2000/comments/86179.html</wfw:comment><comments>http://www.aygfsteel.com/mlw2000/articles/86179.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/mlw2000/comments/commentRss/86179.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/mlw2000/services/trackbacks/86179.html</trackback:ping><description><![CDATA[1概述 <br />和传l的Server端扩展机制相比,Servlet有如下优点:(x) <br />1Q?比CGI脚本快,因ؓ(f)Servlet采用?jin)不同的处理模式?br />2Q?Servlet使用的标准API为大多数Web Server所接受?br />3Q?因ؓ(f)是Java语言开发的Q所以拥有Java的所有优点,包括易于开发和q_无关{?<br />4Q?可以方便地访问大量的Javacd资源?<br /><br />2 Servlet生命周期 <br />一个Servlet有一个生命周期,定义?jin)一个Servlet 如何被加载和被初始化Q它怎样接收h、响应请求、怎样提供服务?br /><br />在代码中QServlet生命周期由接口:(x)javax.servlet.Servlet 所定义?所有的Java Servlet 必须Q直接或间接地实现javax.servlet.Servlet接口Q这h能在Servlet Engine上运行。Servlet Engine提供network Service, 响应MIME request, q行Servlet Container?javax.servlet.Servlet接口定义?jin)一些方法,在Servlet 的生命同期中q些Ҏ(gu)?x)在特定旉按照一定的序被调用。如下图Q?br /><br />2.1 Servlet 如何被加载(LoadQ,被实例化QInstantiatedQ?br />Servlet Engine 负责实例化和加蝲ServletQ这个过E可以在Servlet Engine 加蝲时执行,可以在Servlet 响应h时执行,也可以在两者之间的M时候执行?<br /><br />2.2 Servlet如何被初始化(Initialized) <br />Servlet Engine 加蝲好Servlet 后,必须要初始化它。初始化时Servlet 可以从数据库里读取初始数据,建立JDBC ConnectionQ或者徏立对其它有h(hun)值的资源的引用?<br />在初始化阶段QInit( )Ҏ(gu)被调用。这个方法在javax.servlet.Serlet接口中定义。Init( )Ҏ(gu)以一个Servlet 配置文gQServletConfig 型)(j)为参数。Servlet configuration 对象由Servlet Engine 实现Q可以让Servlet 从中d一些name-value对的参数倹{ServletConfig对象q可以让Servlet access 一个Servlet Context对象?<br /><br />2.3 Servlet 如何处理h <br />Servlet 被初始化以后Q就处于能响应请求的qA状态。每个对Servlet 的请求由一个Servlet Request 对象代表。Servlet l客L(fng)的响应由一个Servlet Response对象代表?<br />当客L(fng)有一个请求时QServlet Engine ServletRequest 和ServletResponse对象都{发给ServletQ这两个对象以参数的形式传给ServiceҎ(gu)。这个方法由javax.servlet.Servlet定义、ƈ由具体的Servlet 实现?br />Servletq可以实?ServletRequest 和ServletResponse接口。ServletRequest接口可以让Servlet 获取客户端请求中的参数。如form data, request信息Q协议类型等{。Servlet 可以从ServletInputStream中drequest 数据。ServletResponse接口允许Servlet讄response headers和status codes 。实现这个接口可以Servlet能访问ServletOutputStream用来向客户端返回数据?<br /><br />2.4 多线E和映射QMappingQ?<br />在多U程环境中,大多数Servlet 必须能处理同时发生的多个h。但一U情况例外,是当一个Servlet 实现?SingleThreadModel接口Q这L(fng)Servlet 只会(x)响应同一旉的一个请求?br />ServletҎ(gu)Servlet Engine 的Mapping 来响应客L(fng)h、MappingURL和Servlet实例相对应。比如:(x)/hello/index.html可以对应HelloServlet?然而,一个对应也可以一个URL和多个Servlet实例相对应。比如,一个分布式的Servlet Engine q行在多台机器上Ӟ 同一个Servlet 可以有多个实例运行在不同的服务器上,以均衡处理的负蝲。作Z个Servlet 开发者。你不能假定Servlet来只有一个实例?br /><br />2.5 Servlet如何被释?<br />Servlet Engine 没有必要在Servlet 生命周期的每一D|间内都保持Servlet的状态。Servlet Engine可以随时随意使用或释放Servlet。因此,你不能依赖Servlet class或其成员来存贮信息?<br />当Servlet Engine 判断一个Servlet应当被释放时Q(比如说engine准备Shut down 或需要回收资源)(j)engine必须让Servlet 能释攑օ正在使用的Q何资源,q保存持l性的状态信息。这些可以通过调用Servlet的destroyҎ(gu)来实现?<br />当Servlet Engine 释放一个servlet 以前必须让其完成当前实例的serviceҎ(gu)或是{到timeoutQ如果engine定义?jin)timeoutQ。当engine释放一个Servlet以后Qengine不能再请求{发给它,engine必须d释放该servletq将其标明ؓ(f)可回收的Q给garbage collectionQ?<br /><br />3 Servlet Mapping技?<br />作ؓ(f)一个Servlet Engine 开发者,你可以随意规定如何将客户端的h映射到Servlets。Specification本nq不强制q种规则Q然而你可以使用下面M一U徏议:(x)<br /><br />1Q?你可以一个servlet 只和一个URL对应?如:(x)URL/feedback/index.html对应feedBack class?br />2Q?可以认ؓ(f)指定的某些目录下全是Servlet?br />3Q?可以指定以特D的后缀名结h为Servleth?如:(x)*.thtml认ؓ(f)是Servlet?<br />4Q?使用特定的URL:/servlet/servlet_name. <br />5Q?可以直接用Servlet的class名来Ȁzd?如:(x)/servlet/com.foo.servlet.MailServlet.<br /><br />4 Servlet Context ServletContext 接口 <br />定义?jin)一个Servlet context 对象Q保存着Servlet engine 的信息。通过Servlet context, Servlet 可以记日志文Ӟ可以获取资源和对象(比如RequestDispatcherQ。一个Servlet 只能在一个Servlet context 下运行,但不同的Servlet能拥有Servlet Engine 的不同视图?br />如果一个Servlet Engine支持虚拟LQ每个虚拟主机拥有一个Servlet context,它不能被多个虚拟L׃n?br />Servlet Engine 可以让Servlet Context拥有自己的范_(d)p作ؓ(f)URL的一部分。如一个Servlet Context 属于一个银行应用,可以被映到/bankQ这时一个getContexth(?bank/fooServlet发出)返?bank的Servlet Context?<br /><br />5 HTTP Sessions <br />HTTP是一个stateless的协议,Z(jin)建立有效的Web Server Application, 你必能识别来自q程客户端的众多h中哪些是属于同一个客L(fng)的。有许多q踪session的方法,但都很复杂,难于使用?<br />但是Java Servlet API提供?jin)一个简单的接口Q允许Servlet Engine来通过M途径q踪一个用L(fng)session?br /><br />5.1创徏一个session <br />因ؓ(f)HTTP是一U?h--应答"式的协议。一个sessionL被认为是新的Q直到有客户端joinq来。Join意思是客户端向Server端返回了(jin)session的追t信息,指明?jin)session已经被徏立?br />如果客户端没有join一个sessionQ你׃能假定接下来的客L(fng)响应是属于当前的session?<br />如果有下q情况出现sessionp认ؓ(f)是新?<br />1.客户端还不知道Q何关于此session的信息?<br />2. 客户端选择不加入sessionQ比如客L(fng)拒绝接受cookies?<br />作ؓ(f)一个servlet开发者,你必设计Web Application能处理客L(fng)没有或不能加入一个session的情c(din)Server保持session对象一D|_(d)q个旉可以由Server或Servlet指定。当一个sessionq期后,Server释放session对象和其它与之绑定在一L(fng)所有对象?br /><br />5.2 l定对象C个session <br />如果有需要,比如能帮助你处理应用中的数据需要,你可能会(x)l定一些对象到一个session中。你可以l定M对象到HttpSession对象中,只要用唯一的标识名。Q何绑定到session中的对象对其它Q何一个处理同一个session中的h的Servlet来讲Q都是可见的。一些对象需要知道自׃么时候被攑օ或移Z个sessionQ你可以通过HttpSession Binding Listener接口来获得这些信息。当你的servlet在session中存储或释放数据Ӟservlet engine(g)查对象是否通过实现Http Session Binding Listener的类来绑定,如果是,接口中的Ҏ(gu)通知对象Q它已被l定?<img src ="http://www.aygfsteel.com/mlw2000/aggbug/86179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/mlw2000/" target="_blank">mlw2000</a> 2006-12-07 22:00 <a href="http://www.aygfsteel.com/mlw2000/articles/86179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ǭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ȷ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">³</a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank">˫</a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank">ͳ</a>| <a href="http://" target="_blank">ְ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ӡ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ͱ</a>| <a href="http://" target="_blank">ij</a>| <a href="http://" target="_blank">ȫ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ݸ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ղ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>