??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有如下优点: <br />1Q?比CGI脚本快,因ؓServlet采用了不同的处理模式?br />2Q?Servlet使用的标准API为大多数Web Server所接受?br />3Q?因ؓ是Java语言开发的Q所以拥有Java的所有优点,包括易于开发和q_无关{?<br />4Q?可以方便地访问大量的Javacd资源?<br /><br />2 Servlet生命周期 <br />一个Servlet有一个生命周期,定义了一个Servlet 如何被加载和被初始化Q它怎样接收h、响应请求、怎样提供服务?br /><br />在代码中QServlet生命周期由接口: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接口定义了一些方法,在Servlet 的生命同期中q些Ҏ会在特定旉按照一定的序被调用。如下图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值的资源的引用?<br />在初始化阶段QInit( )Ҏ被调用。这个方法在javax.servlet.Serlet接口中定义。Init( )Ҏ以一个Servlet 配置文gQServletConfig 型)为参数。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的响应由一个Servlet Response对象代表?<br />当客L有一个请求时QServlet Engine ServletRequest 和ServletResponse对象都{发给ServletQ这两个对象以参数的形式传给ServiceҎ。这个方法由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这LServlet 只会响应同一旉的一个请求?br />ServletҎServlet Engine 的Mapping 来响应客Lh、MappingURL和Servlet实例相对应。比如:/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 或需要回收资源)engine必须让Servlet 能释攑օ正在使用的Q何资源,q保存持l性的状态信息。这些可以通过调用Servlet的destroyҎ来实现?<br />当Servlet Engine 释放一个servlet 以前必须让其完成当前实例的serviceҎ或是{到timeoutQ如果engine定义了timeoutQ。当engine释放一个Servlet以后Qengine不能再请求{发给它,engine必须d释放该servletq将其标明ؓ可回收的Q给garbage collectionQ?<br /><br />3 Servlet Mapping技?<br />作ؓ一个Servlet Engine 开发者,你可以随意规定如何将客户端的h映射到Servlets。Specification本nq不强制q种规则Q然而你可以使用下面M一U徏议:<br /><br />1Q?你可以一个servlet 只和一个URL对应?如:URL/feedback/index.html对应feedBack class?br />2Q?可以认ؓ指定的某些目录下全是Servlet?br />3Q?可以指定以特D的后缀名结h为Servleth?如:*.thtml认ؓ是Servlet?<br />4Q?使用特定的URL:/servlet/servlet_name. <br />5Q?可以直接用Servlet的class名来Ȁzd?如:/servlet/com.foo.servlet.MailServlet.<br /><br />4 Servlet Context ServletContext 接口 <br />定义了一个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拥有自己的范_p作ؓURL的一部分。如一个Servlet Context 属于一个银行应用,可以被映到/bankQ这时一个getContexth(?bank/fooServlet发出)返?bank的Servlet Context?<br /><br />5 HTTP Sessions <br />HTTP是一个stateless的协议,Z建立有效的Web Server Application, 你必能识别来自q程客户端的众多h中哪些是属于同一个客L的。有许多q踪session的方法,但都很复杂,难于使用?<br />但是Java Servlet API提供了一个简单的接口Q允许Servlet Engine来通过M途径q踪一个用Lsession?br /><br />5.1创徏一个session <br />因ؓHTTP是一U?h--应答"式的协议。一个sessionL被认为是新的Q直到有客户端joinq来。Join意思是客户端向Server端返回了session的追t信息,指明了session已经被徏立?br />如果客户端没有join一个sessionQ你׃能假定接下来的客L响应是属于当前的session?<br />如果有下q情况出现sessionp认ؓ是新?<br />1.客户端还不知道Q何关于此session的信息?<br />2. 客户端选择不加入sessionQ比如客L拒绝接受cookies?<br />作ؓ一个servlet开发者,你必设计Web Application能处理客L没有或不能加入一个session的情cServer保持session对象一D|_q个旉可以由Server或Servlet指定。当一个sessionq期后,Server释放session对象和其它与之绑定在一L所有对象?br /><br />5.2 l定对象C个session <br />如果有需要,比如能帮助你处理应用中的数据需要,你可能会l定一些对象到一个session中。你可以l定M对象到HttpSession对象中,只要用唯一的标识名。Q何绑定到session中的对象对其它Q何一个处理同一个session中的h的Servlet来讲Q都是可见的。一些对象需要知道自׃么时候被攑օ或移Z个sessionQ你可以通过HttpSession Binding Listener接口来获得这些信息。当你的servlet在session中存储或释放数据Ӟservlet engine查对象是否通过实现Http Session Binding Listener的类来绑定,如果是,接口中的Ҏ通知对象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"></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>