??xml version="1.0" encoding="utf-8" standalone="yes"?>一区二区三区免费在线观看,98精品国产高清在线xxxx天堂,精品久久五月天http://www.aygfsteel.com/haha/zh-cnSat, 17 May 2025 11:58:15 GMTSat, 17 May 2025 11:58:15 GMT60史上最Ơ扁的脑{急{?http://www.aygfsteel.com/haha/archive/2006/10/25/77231.html~哈哈~~哈哈~Wed, 25 Oct 2006 08:39:00 GMThttp://www.aygfsteel.com/haha/archive/2006/10/25/77231.htmlhttp://www.aygfsteel.com/haha/comments/77231.htmlhttp://www.aygfsteel.com/haha/archive/2006/10/25/77231.html#Feedback0http://www.aygfsteel.com/haha/comments/commentRss/77231.htmlhttp://www.aygfsteel.com/haha/services/trackbacks/77231.html 提问Q茉莉花、太阌、玫瑰花哪一朵花最没力Q?


回答Q茉莉花?


原因Q好一늾?没力)的茉莉花?


提问Q猩猩最讨厌什么线Q?


回答Q^行线?


原因Q^行线没有怺(香蕉)?


提问Q橡皮、老虎皮、狮子皮哪一个最不好Q?


回答Q橡皮?


原因Q橡皮擦(皮??


提问Q布和纸怕什么?


回答Q布怕一万,U怕万一?


原因Q不(?怕一万,?U?怕万一?


提问Q铅W姓什么?


回答Q萧?


原因Q削(?铅笔?



提问Q麒麟到了北极会变成什么?



回答Q冰淇凌?



原因Q冰淇凌(冰麒??



提问Q哪位历史h物最Ơ扁Q?



回答Q苏武?



原因Q苏武牧北(被v??



提问Q从1?哪个数字最勤劳Q哪个数字最懒惰Q?



回答Q?懒惰Q?勤劳?



原因Q一(1)不做?2)不休?



提问Q怎样佉K雀安静下来Q?



回答Q压它一下?



原因Q鸦雀无声(压雀无声)?



提问Q历史上哪个的最?



回答Q曹?



原因Q说ҎҎ?



问题Q米她妈是谁



{案Q花



原因Q花生米



白加小白等于什么?



{于白?



原因Q小白TWO




30-50哪个数字比熊的大便厉?!



{案:40(事实胜于???/font>


~哈哈~ 2006-10-25 16:39 发表评论
]]>
集群的相关知?/title><link>http://www.aygfsteel.com/haha/archive/2006/10/25/77146.html</link><dc:creator>~哈哈~</dc:creator><author>~哈哈~</author><pubDate>Wed, 25 Oct 2006 03:15:00 GMT</pubDate><guid>http://www.aygfsteel.com/haha/archive/2006/10/25/77146.html</guid><wfw:comment>http://www.aygfsteel.com/haha/comments/77146.html</wfw:comment><comments>http://www.aygfsteel.com/haha/archive/2006/10/25/77146.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/haha/comments/commentRss/77146.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/haha/services/trackbacks/77146.html</trackback:ping><description><![CDATA[ <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <strong> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">一、集的基本概念</span> </strong> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"> <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Arial">Cluster</span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">集群技术可如下定义</span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Arial">:</span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">一l相互独立的服务器在|络中表Cؓ单一的系l,q以单一pȝ的模式加以管理。此单一pȝ为客户工作站提供高可靠性的服务?/span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">大多数模式下Q集中所有的计算机拥有一个共同的名称Q集内Mpȝ上运行的服务可被所有的|络客户所使用?/span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Arial">Cluster</span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">必须可以协调理各分ȝlg的错误和p|Qƈ可透明地向</span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Arial">Cluster</span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">中加入组件?/span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">一?/span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Arial">Cluster</span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">包含多台</span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Arial">(</span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">臛_二台</span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Arial">)</span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">拥有׃n数据存储I间的服务器。Q何一台服务器q行一个应用时Q应用数据被存储在共享的数据I间内。每台服务器的操作系l和应用E序文g存储在其各自的本地储存空间上?/span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Arial"> <o:p> </o:p> </span> </p> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-font-kerning: 1.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Cluster</span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">内各节点服务器通过一内部局域网怺通讯。当一台节Ҏ务器发生故障Ӟq台服务器上所q行的应用程序将在另一节点服务器上被自动接。当一个应用服务发生故障时Q应用服务将被重新启动或被另一台服务器接管。当以上M故障发生Ӟ客户能很快q接到新的应用服务上?br /><br /><strong>二、jboss-4.0.2集群配置指南</strong><br /><span style="COLOR: brown">版权x</span>: 转蝲请保留以下作者信?br />作?<br /><a target="_new">bromon</a>原创<br />关键?JBoss 4.0.2  Clustering<br /><br />本文主要讲解JBoss cluster的基本知识以及简单的配置ҎQ其间涉及了一些jboss的补充知识?br /><br /><b><span style="FONT-SIZE: 16px">一、材料准备:</span></b><br /><br /><b>1、JBoss 4.0.2 </b>   <br /><br />JBoss各个版本之间差异比较大,即同ؓjboss 4.x的版本,内部lg的版本也不一_所以请量使用同一版本的server。目前已l证明可以配|cluster的版本多为jboss 3.2.6和jboss 4.0.2?br /><br /><b>2、Apache 2.0.54</b><br />   下蝲地址Q?a >http://archive.apache.org/dist/httpd/httpd-2.0.54.tar.gz</a><br /><b>3、Apache mod_jk-1-2-13-apache-2-0-54<br /></b>   下蝲地址Q?a >http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.14/jakarta-tomcat-connectors-jk-1.2.14-linux-rhel3-i386-prefork.so</a><br /><br /><span style="FONT-SIZE: 16px">二、安装:</span><br /><br />1、jboss4.0.2与apache 2.0.54的安装请自行搞定。假设jboss的安装目录ؓ%jboss%Qapache安装目录?apache%?br /><br />2、mod_jk的安装?br /><br />从apache.org获得文gmod_jk-1-2-13-apache-2-0-54.soQ将该文件拷贝到%apache%\ modules?br /><br /><span style="FONT-SIZE: 16px">三、jboss cluster入门</span><br /><br />    Jboss 支持如下cd的clusterQEJB、web、JNDI、JMSQ我们主要了解web cluster?br /><br />Web cluster实际上可以划分ؓ两个话题Q负载均?(load balance) 和状态同步。它们是互相独立的,单独配置?br /><br />负蝲均衡的概忉|较简单,重要的是负蝲均衡的粒度。可以选择针对每个request的均衡,或者是针对每个用户的均衡。选择不同的粒度,需要不同的状态同步方式?br /><br /><b>1、基于request的负载均?/b><br /><br />     该种方式下,负蝲均衡?(load balancer)会根据各个node的状况,把每个http requestq行分发。用这L均衡{略Q就必须在多个node之间复制用户的sessionQ实时保持整个cluster的用L态同步,q种操作被称为session复制 (session replication)。Jboss的实现原理是使用拦截?interceptor)Q根据用L同步{略拦截requestQ做同步处理后再交给server产生响应?br /><br />    该方法的优点是客户不会被l定都具体的nodeQ只要还有一个node存活Q用L态都不会丢失Qcluster都能够l工作。缺Ҏnode之间通信频繁Q响应速度有媄响,多ƈ发、高频操作的情况下性能下降比较厉害?br /><br /><b>2、基于用L负蝲均衡</b><br /><br />该种方式下,当用户发出第一个request后,负蝲均衡器动态的把该用户分配到某个节点,q记录该节点的jvm路由Q以后该用户的所有request都会被绑定这个jvm路由Q用户只会与该server发生交互Q这U策略被UCؓ_性session(session sticky)?br /><br />该方法的优点是响应速度快,多个节点之间无须通信。缺点也很明显,某个nodeL以后Q它负责的所有用户都会丢失session?br /><br /><b><span style="FONT-SIZE: 16px">四、实?/span></b><br /><br /><b>1、负载均?/b><br /><br />    Jboss的负载均衡目前有两种ҎQ一是用apache的mod_jkQ二是用jboss自带的负载均衡模块。下面分别讲解这两种配置?br /><br />mod_jk的配|?br /><br />1、请认%apache%\modules下已l有mod_jk-1-2-13-apache-2-0-54.so文g?br /><br />2、修?apache%\conf\httpd.conf    在文件末添?    Include conf/mod_jk2.conf<br /><br />3、在%apache%\conf下新建文件    mod_jk2.conf        文g内容如下Q?br /><br /><pre class="overflow" title="pre code"># Load mod_jk module. Specify the filename<br /># of the mod_jk lib you’ve downloaded and<br /># installed in the previous section<br />LoadModule jk_module modules/mod_jk-1-2-13-apache-2-0-54.so<br /># Where to find workers.properties<br />JkWorkersFile conf/workers2.properties<br /># Where to put jk logs<br />JkLogFile logs/mod_jk.log<br /># Set the jk log level [debug/error/info]<br />JkLogLevel info<br /># Select the log format<br />JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "<br /># JkOptions indicate to send SSL KEY SIZE,<br />JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories<br /># JkRequestLogFormat set the request format<br />JkRequestLogFormat "%w %V %T"<br />JkMount /* loadbalancer</pre><br /><br />其中JkMount /* loadbalancer的意思是Q把所有的h都发lloadbalancer处理。可以通过修改url来控制发送某些request?br /><br />4、在%apache%\conf下新建文件    workers2.properties        其内容ؓQ?br /><br /><pre class="overflow" title="pre code">worker.list=loadbalancer,server1,server2<br /><br /># Define the first node...<br />worker.server1.port=8009<br />worker.server1.host=172.16.0.116<br />worker.server1.type=ajp13<br />worker.server1.lbfactor=1<br />worker.server1.local_worker=1<br />worker.server1.cachesize=10<br /><br /># Define the first node...<br />worker.server2.port=8009<br />worker.server2.host=172.16.32.88<br />worker.server2.type=ajp13<br />worker.server2.lbfactor=1<br />worker.server2.local_worker=1<br />worker.server2.cachesize=10<br /><br /># Now we define the load-balancing behaviour<br />worker.loadbalancer.type=lb<br />worker.loadbalancer.balanced_workers=server1,server2<br />worker.loadbalancer.sticky_session=1</pre><br /><br />其中对于node的命名规则是worker.节点?xxxx。所以上q文件定义了两个节点Qserver1和server2?009端口是jboss默认的ajp端口Q另外需要注意的是worker.server2.lbfactor参数Q它是节点的负蝲加权Q它的D大,获得负蝲的机会就大。可以根据node的硬件性能q行调整。worker.loadbalancer.sticky_session参数是指定是否用粘性session?br /><br />所有需要负载均衡的节点Q都必须在worker.loadbalancer.balanced_workers参数中列丑և来?br /><br />误住所有node的名U和它对应着哪台机器Q后面的配置中会使用?br /><br />试启动apacheQ?apache\bin\apache.exeQ正常情况下没有M提示。如果你使用的jk?.0的,那么配置文g的写法完全不同,׃mod_jk2已经停止开发,所以apacheq没有提供Q何讲解,对于配置文g的编写也没有M指导?br /><br />Jboss自带均衡器的配置<br /><br />     文件夹%jboss%\docs\examples\varia\loadbalancer\loadbalancer.sar拯?jboss%\ server\all\deploy下,q且修改loadbalancer.sar\loadbalancer.sar\META-INF\jboss- service.xmlQ在<host>标签中类出所有节点,?lt;sticky-session>标签中指定是否用粘?session。配|完成?br /><br />    该均衡器的缺Ҏ负蝲能力相对不高Q配|参数太,比如无法指定不同节点的负载加权,所以后面都以mod_jkZQ不再讲解jboss自带的负载均衡器的内宏V?br /><br /><br />    负蝲均衡的配|基本完成,启动jbossQ其中过E中会列出DefaultPatition中所有的节点Q?br /><br /><span style="COLOR: blue">run.bat -c all</span><br /><br /><b>2、session sticky配置</b><br /><br />    apache 应该会以_性session的方式分发请求。部|一个应用测试一下,你会发现_性session没有起作用。因为我们还没有ljboss配置jvm路由 ( jvmRoute)Qapache无法知道究竟哪些session是属于哪个节点的。我们l往下:<br /><br />    修改server1机器上的jboss的配|文Ӟ%jboss%\server\all\deploy\jbossweb-tomcat55.sar\ META-INF\ jboss-service.xml<br /><br />    ?10行有Q?lt;attribute name="UseJK">false</attribute>Q将它改为true。值得注意的是在这行标{上面有一D|释,要求你在server.xml中必LQ?br />Engine name="jboss.web" jmvRoute="Node1" defaultHost="localhost"<br /><br />    h意这里有一个气Mh不偿命的bugQjboss的官Ҏ档把 jvmRoute写成了jmvRouteQ就是v和m两个字母的颠倒让我郁闷了三天Q翻遍了jboss.com和theserverside.com。都是直接拷贝的错,吐血吐到脱水啊?br /><br />    下面需要修改server1上的%jboss%\server\all\deploy\jbossweb-tomcat55.sar\ server.xmlQ在32行左xQ?br /><br /><pre class="overflow" title="pre code"><Engine name="jboss.web" defaultHost="localhost"></pre><br /><br />l它增加一个jvmRoute属性:<br /><br /><pre class="overflow" title="pre code"><Engine jvmRoute="server1" name="jboss.web" defaultHost="localhost"></pre><br /><br />h意,jvmRoute的值必dmod_jk中的节点名字正确对应Q否则无法正\由。Cluster中的所有节炚w应该做相应的配置?br /><br />Jboss的配|完成了Q下面需要在你的web应用中修攚w|文Ӟ让它支持集群?br /><br />在WEB-INF\web.xml中加入属性:    <distributable/><br /><br />OkQ基于用Lcluster完成了,每个用户会绑定都某个节点上进行交互。这U绑定是如何完成的呢Q原来apache把客户分发到节点后,该节点会在用Lsession id后面加上此节点的路由名称Q变成这个样子:<br /><br /><span style="COLOR: blue">Efdfxxd98daja87daj76da2dka**,server1</span><br /><br />    有了q个标志Q就能分辨该session属于哪个节点?br /><br /><b>3、session replication配置</b><br /><br />     下面要做的是Zrequest的clusterQ也p各个节点之间互相复制session状态。有两种复制模式Q同步与异步。用同步的方式Q?jboss会把session复制的操作和对request的响应放C个应用事?application transaction)Qsession 复制完成后才d理request。异步复制则发送session复制的消息后马上处理requestQsession复制则会E有延迟。但是在多框架的 web面中,q样的集方式会有问题。由于frame在同一旉发出多个requestQ会造成一些؜乱,q也是采用基于用L集群方式的原因之一?br /><br />    JBoss 4.0.2 中采用了Jboss cache来实现session复制Q实际上是一个分布式~存Q由于session id中包含了jvm routeQ所以能够分辨session属于哪个节点。Session的更新类ghibernate中的乐观锁,有了更新之后psession的版本号增加Q其他节炚w过Ҏ版本h军_是否同步session状态?br /><br />    配置session replication首先需要编?br />%jboss% server\all\deploy\jbossweb-tomcat55.sar\META-INF\ jboss-service.xmlQ?8行左xQ?br /><br /><pre class="overflow" title="pre code"><attribute name="SnapshotMode">instant</attribute></pre><br /><br />q就是刚才提到的复制模式Qinstant为立卛_Ӟ如果设ؓinterval 那么pȝ会在延迟一D|间再q行复制Q时间长度在< attribute name="SnapshotInterval">2000</attribute>中指定,单位是毫U?br /><br />单独配置q一个地方还不够Q在%jboss% server\all\deploy\ tc5-cluster-service.xml中有Q?br /><br /><pre class="overflow" title="pre code"><attribute name="CacheMode">REPL_ASYNC</attribute></pre><br /><br />q里才真正决定复制是同步的还是异步的Q可以指定ؓREPL_ASYNC(异步)或者REPL_SYNC(同步)?br /><br />在这个文件下面一点,q有一个config标签Q里面指定了各个节点在进行session复制的时候如何通信Q有udp和tcp两种可选,如果使用udp方式Q那么应该将udp的lookback属性指定ؓtrueQ因为windows上有一个叫做media sense的东西会影响 udp multicast。注意如果你不了解multi address的ip规则Q请不要随便修改mcast_addr的倹{如果采用tcp方式的话Q应该指定bind_addr的gؓ本机ipQƈ且在TCPPING标签的initial_hosts属性中列出所有节点,格式是”机器名[端口号]”,比如在我们的例子中,应该这样配|tcp(以其中一个节点ؓ?Q?br /><br /><pre class="overflow" title="pre code"><config><br /><TCP bind_addr="172.16.0.116" start_port="7810" loopback="true"/><br /><TCPPING initial_hosts="172.16.0.116[7810],172.16.32.88[7810]" port_range="3" timeout="3500"<br />num_initial_members="3" up_thread="true" down_thread="true"/><br /><MERGE2 min_interval="5000" max_interval="10000"/><br /><FD shun="true" timeout="2500" max_tries="5" up_thread="true" down_thread="true" /><br /><VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false" /><br />    <pbcast.NAKACK down_thread="true" up_thread="true" gc_lag="100"<br />         retransmit_timeout="3000"/><br />    <pbcast.STABLE desired_avg_gossip="20000" down_thread="false" up_thread="false" /><br />    <pbcast.GMS join_timeout="5000" join_retry_timeout="2000" shun="false"<br />print_local_addr="true" down_thread="true" up_thread="true"/><br /><pbcast.STATE_TRANSFER up_thread="true" down_thread="true"/><br /></config></pre><br /><br />    JBoss的clustering版主量使用udp。不q在Sobey内部Q徏议用tcp方式Q经试可能有不明物体在影响udp通信Q导致Timeout异常?br /><br />     ?jboss%\ server\all\deploy\ cluster-service.xml中也有关于udp和tcp的配|信息,?.0以前版本的jboss中,会以q个文gZ配置Q?.0以后都以tc5-cluster-service.xmlZ配置?br /><br />    Jboss的配|完成了Q最后需要在web应用中增加配|信息,控制session复制的粒度。在WEB-INF\    jboss-web.xml中增加以下内容:<br /><br /><pre class="overflow" title="pre code"><replication-config><br />    <replication-trigger>SET_AND_NON_PRIMITIVE_GET</replication-trigger><br />    <replication-granularity>SESSION</replication-granularity><br />  </replication-config></pre><br /><br />其中replication-trigger是指定哪些操作引发session的版本更斎ͼ它的取值有Q?br /><br /><pre class="overflow" title="pre code">SET_AND_GET        <br />SET_AND_NON_PRIMITIVE_GET<br />SET</pre><br /><br />replication-granularity是复制粒度,可以取session或attribute。如果取为attribute有可能导致复制失败,q是目前版本的jboss cache的一个bugQ等待修正?br /><br />部v目Q测试,如果配置没有问题Q可以在%jboss%\0server\all\log\server.log中发现类gq样的信息:<br /><br /><pre class="overflow" title="pre code">DEBUG [org.jboss.web.tomcat.tc5.session.JBossCacheManager] check to see if needs to store and replicate session with id Im9-qpuaXppMS+xXwE3M+Q**.server1 <br /><br />DEBUG [org.jboss.web.tomcat.tc5.session.ClusteredSession] processSessionRepl(): session is dirty. Will increment version from: 20 and replicate.</pre><br /><br />    Session replication配置的成功率比较低,情况也很复杂Q请仔细操作?br /><br /><b><span style="FONT-SIZE: 16px">五、分布式热部|?distributable hot deploy)</span></b><br /><br />     在一个节点很多的cluster中,如果部v应用的时候必LE序文g拯到每个机器上的话Q那实在太愚蠢了Q幸好通过all启动的jboss自动支持分布式热部v。把支持cluster的应用(通常需要打包成war文gQ,攑ֈ%jboss%\server\all\farm下,那么处于同一 cluster中的其他节点会自动下载ƈ且部|Ԍjboss把这个称为Farm deploy。如下图Q?br /><br /><img onmouseover="function anonymous() { ImgShowTip(this); }" style="DISPLAY: inline" onclick="function anonymous() { ImgClick(this); }" height="300" alt="image" src="http://www.linuxfans.org/nuke/modules/Forums/files/farm.jpg" width="286" onload="function anonymous() { ImgLoad(this); }" border="0" resized="1" /><br /><p></p></span> <img src ="http://www.aygfsteel.com/haha/aggbug/77146.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/haha/" target="_blank">~哈哈~</a> 2006-10-25 11:15 <a href="http://www.aygfsteel.com/haha/archive/2006/10/25/77146.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>耉CAS配置http://www.aygfsteel.com/haha/archive/2006/09/11/68899.html~哈哈~~哈哈~Mon, 11 Sep 2006 02:33:00 GMThttp://www.aygfsteel.com/haha/archive/2006/09/11/68899.htmlhttp://www.aygfsteel.com/haha/comments/68899.htmlhttp://www.aygfsteel.com/haha/archive/2006/09/11/68899.html#Feedback2http://www.aygfsteel.com/haha/comments/commentRss/68899.htmlhttp://www.aygfsteel.com/haha/services/trackbacks/68899.html CAS 配置

cas.war ?/span> tomcat/webapps

casclient.jar ?/span> tomcat/common/lib ?/span>

d下面的配|到自己 war ?/span> web.xml

<filter>

    <filter-name>CAS Filter</filter-name>

    <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>

    <init-param>

      <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>

      <param-value>https://localhost:8443/cas/login</param-value>

    </init-param>

    <init-param>

      <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>

      <param-value>https://localhost:8443/cas/proxyValidate</param-value>

    </init-param>

    <init-param>

      <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>

      <param-value>localhost:8080</param-value>

    </init-param>

  </filter>

 

  <filter-mapping>

    <filter-name>CAS Filter</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>

 

tomcat/conf/server.xml 打开 8443 那个 connector.

如果没有添?/span> :

   <Connector port="8443" maxHttpHeaderSize="8192"

               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

               enableLookups="false" disableUploadTimeout="true"

               acceptCount="100" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS" />

执行 :

%java_home%\bin\keytool -genkey -alias tomcat -keyalg RSA

 

名字 : localhost.

密码 :changeit

其他 , 随便

Export the certificate from the .keystore file to a file called server.crt.

 

       %java_home%\bin\keytool -export -alias tomcat -file server.crt

 

Import the certificate into the default jvm truststore.

 

       %java_home%\bin\keytool -import -file server.crt -keystore ./jre/lib/security/cacerts

密码 :changeit

Test the SSL configuration by entering https://localhost:8443.

讉K应用 :http://localhost:8080/?.


配置是经帔R到的报错Q?/span>

1 ?/span> C:\Program Files\Java\jdk1.5.0_06\bin>keytool -genkey -alias tomcat -keyalg RSA

输入 keystore 密码Q?/span>   changeit

keytool 错误Q?/span> java.io.IOException: Keystore was tampered with, or password was i

ncorrect

原因Q系l中有了 *.keystore 文gQ删除此文g可解决问题。此文g通常?/span> C:\Documents and Settings\Administrator 目录之下?/span>

2 ?/span> C:\Program Files\Java\jdk1.5.0_06>keytool -import -file server.crt -keystore ./j

re/lib/security/cacerts

输入 keystore 密码Q?/span>   changeit

keytool 错误Q?/span> java.io.FileNotFoundException: server.crt ( pȝ找不到指定的文g?/span> )

原因Q?/span>

是否做了下面q一步:

C:\Program Files\Java\jdk1.5.0_06\bin>keytool -export -alias tomcat -file server

.crt

输入 keystore 密码Q?/span>   changeit

保存在文件中的认?/span> <server.crt>

做完q步之后Q稍{片刻,因ؓ server.crt 是在q步生成的,但是生成的时间比较长。通常在你操作下一步的时候它q没有生成,因此在配|的时候可能报错?/span>

 

操作q程Q?/span>

1 ?/span> C:\Program Files\Java\jdk1.5.0_06\bin>keytool -genkey -alias tomcat -keyalg RSA

输入 keystore 密码Q?/span>   changeit

您的名字与姓氏是什么?

  [Unknown] Q?/span>   localhost

您的l织单位名称是什么?

  [Unknown] Q?/span>   er

您的l织名称是什么?

  [Unknown] Q?/span>   se

您所在的城市或区域名U是什么?

  [Unknown] Q?/span>   sd

您所在的州或省䆾名称是什么?

  [Unknown] Q?/span>   sdf

该单位的两字母国家代码是什?/span>

  [Unknown] Q?/span>   sdf

CN=localhost, OU=er, O=se, L=sd, ST=sdf, C=sdf 正确吗?

  [ ?/span> ] Q?/span>   y

 

2 、输?/span> <tomcat> 的主密码

        Q如果和 keystore 密码相同Q按回RQ:   changeit

 

3 ?/span> C:\Program Files\Java\jdk1.5.0_06\bin>keytool -export -alias tomcat -file server

.crt

输入 keystore 密码Q?/span>   changeit

保存在文件中的认?/span> <server.crt>

4 ?/span> C:\Program Files\Java\jdk1.5.0_06>keytool -import -file server.crt -keystore ./j

re/lib/security/cacerts

输入 keystore 密码Q?/span>   changeit

Owner: CN=localhost, OU=er, O=se, L=sd, ST=sdf, C=sdf

发照者: CN=localhost, OU=er, O=se, L=sd, ST=sdf, C=sdf

序号Q?/span> 4504c0e7

有效期间Q?/span> Mon Sep 11 09:50:31 CST 2006 臻I Sun Dec 10 09:50:31 CST 2006

认证指纹Q?/span>

         MD5 Q?/span>   58:1E:6A:C2:9C:BB:8C:DF:5B:5C:79:B9:2E:FF:EE:45

         SHA1 Q?/span> 02:7C:32:16:24:B1:7F:32:8C:84:96:E6:77:87:0A:1C:31:7B:C8:32

信Qq个认证Q?/span> [ ?/span> ] Q?/span>   y

认证已添加至 keystore ?/span>



~哈哈~ 2006-09-11 10:33 发表评论
]]>
使用JDOM解析XMLQ{载,单又详细Q?/title><link>http://www.aygfsteel.com/haha/archive/2006/09/01/67153.html</link><dc:creator>~哈哈~</dc:creator><author>~哈哈~</author><pubDate>Fri, 01 Sep 2006 08:58:00 GMT</pubDate><guid>http://www.aygfsteel.com/haha/archive/2006/09/01/67153.html</guid><wfw:comment>http://www.aygfsteel.com/haha/comments/67153.html</wfw:comment><comments>http://www.aygfsteel.com/haha/archive/2006/09/01/67153.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/haha/comments/commentRss/67153.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/haha/services/trackbacks/67153.html</trackback:ping><description><![CDATA[ <h4 class="TextColor1" id="subjcns!A6EBDD34E505A945!192" style="MARGIN-BOTTOM: 0px"> <font color="#000080">使用JDOM解析XMLQ{载,单又详细Q?</font> </h4> <div class="wmqeeuq" id="msgcns!A6EBDD34E505A945!192"> <div> <font color="#000080">一、前a<br />    JDOM是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000q初QJDOM作ؓ一个开放源代码目正式开始研发。JDOM是一U解析XML的Java工具包?</font> <p> <font color="#000080">    DOM适合于当今流行的各种语言Q包括Java,JavaScripte,VB,VBScriptQPerl,C,C++{。它了ؓHTML和XML文档提供了一个可应用于不同^台的~程接口。W3C DOM的最C息可从http://www.w3.org/TR2001/WD-DOM-Lever-3-Core-20010913查阅。微软在http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmconxmldomuserguide.asp上也有DOM的详l技术信息?/font> </p> <p> <font color="#000080">   DOM的设计ؓ了适用于不同的语言Q它保留了不同语a中非常相似的API。但是它q不适合于Java~程者的习惯。而JDOM作ؓ一U轻量API被制定,它最核心的要求是以JavaZ心,只适合于Java语言Q它遵@DOM的接口主要规则,除去了DOM中ؓ了兼容各语言而与Java习惯的不同?/font> </p> <p> <font color="#000080">二、用JDOM的前提条?br />   要有SAX、DOM解析器的cLӞJDOM只是一U适合JavaE序员来使用的Java XML解析器,目前行的Java XML解析器还有:Apache Xerces Java、JAXP?br />Xerces Java解析器是完全用Java~写的XML解析器,最新版本是2.5Q它支持以下标准和APIQ?br />Q?Q?XML1.0规范Q第二版本)<br />Q?Q?XML命名I间规范<br />Q?Q?DOM2核心标准规范<br />Q?Q?SAX2核心扩展<br />Q?Q?JAXP1.2 Q是Sun提供的用Java处理XML的接口API?br />Q?Q?XML Schemal构和数据类型标?/font> </p> <p> <font color="#000080">      q有最好的是它开放源代码Q我们可以在http://xml.apache.org/dist/xerces-j/ 处去下蝲。下载文件Xerces-J-bin.2.5.0.zip?br />解压下蝲文gQ得到四个压~包加到目的\径中Q其实不要全加,但不熟的情况下考虑q么做)?br />JDOM的二q制版本下蝲Qhttp://www.jdom.org/downloads/index.html<br />把解压后的jdom.jar文g加到目的类路径中,另外便于调试Q还要下载它的源代码?/font> </p> <p> <font color="#000080">三、用JDOM解析XML<br />     好了Q现在该是正题了。下面通过一个简单的例子说明一下怎么用JDOMq一适合JavaE序员习惯的工具包来解析XML文档?br />Z单,我用了如下XML作ؓ要解析的XML文gQ?br /><?xml version="1.0" encoding="gb2312"?><br /><books><br />   <book email="zhoujunhui"><br />     <name>rjzjh</name><br />     <price>60.0</price><br />  </book><br /></books><br />够简单的吧,但它对于我们兛_的东襉K有了Q子节点Q属性?br />下面是用于解析这个XML文g的Java文gQ?br /></font> </p> <pre> <font color="#000080">1 public class JDomParse { 2 public JDomParse(){ 3 String xmlpath="library.xml"; 4 SAXBuilder builder=new SAXBuilder(false); 5 try { 6 Document doc=builder.build(xmlpath); 7 Element books=doc.getRootElement(); 8 List booklist=books.getChildren("book"); 9 for (Iterator iter = booklist.iterator(); iter.hasNext();) { 10 Element book = (Element) iter.next(); 11 String email=book.getAttributeValue("email"); 12 System.out.println(email); 13 String name=book.getChildTextTrim("name"); 14 System.out.println(name); 15 book.getChild("name").setText("alterrjzjh"); 16 17 } 18 19 XMLOutputter outputter=new XMLOutputter(); 20 outputter.output(doc,new FileOutputStream(xmlpath)); 21 22 } catch (JDOMException e) { 23 e.printStackTrace(); 24 } catch (IOException e) { 25 e.printStackTrace(); 26 } 27 } 28 public static void main(String[] args) { 29 new JDomParse(); 30 } 31}</font> </pre> <font color="#000080">不到30行代码,现在我对代码解释一下:<br />四、解释代?br />引用的类Q?br />import java.io.FileOutputStream;<br />import java.io.IOException;<br />import java.util.Iterator;<br />import java.util.List;<br />//下面是引用到JDOM中的c?br />import org.jdom.Document;<br />import org.jdom.Element;<br />import org.jdom.JDOMException;<br />import org.jdom.input.SAXBuilder;<br />import org.jdom.output.XMLOutputter;<br />Q?Q用JDOM首先要指定用什么解析器。如Q?br />        SAXBuilder builder=new SAXBuilder(false); q表CZ用的是默认的解析?br />Q?Q得到DocumentQ我们以后要q行的所有操作都是对q个Document操作的:<br />        Document doc=builder.build(xmlpath);<br />Q?Q得到根元素Q?br />        Element books=doc.getRootElement();<br />在JDOM中所有的节点QDOM中的概念Q都是一个org.jdom.Elementc,当然他的子节点也是一个org.jdom.ElementcR?br />Q?Q得到元素(节点Q的集合Q?br />      List booklist=books.getChildren("book");<br />q表C得到“books”元素的所在名UCؓ“book”的元素Qƈ把这些元素都攑ֈ一个List集合?br />Q?Q轮循List集合<br />     for (Iterator iter = booklist.iterator(); iter.hasNext();) {<br />       Element book = (Element) iter.next();<br />    ?br />q有一U轮循方法是Q?br />    for(int i=0;I<booklist.size();I++){<br />      Element book=(Element)booklist.get(i);<br />    }<br />Q?Q取得元素的属性:<br />    String email=book.getAttributeValue("email");<br />   取得元素book的属性名为“email”的属性倹{?br />Q?Q取得元素的子元素(为最低层元素Q的|<br />    String name=book.getChildTextTrim("name");<br />    注意的是Q必ȝ定book元素的名为“name”的子元素只有一个?br />Q?Q改变元素(为最低层元素Q的|<br />    book.getChild("name").setText("alterrjzjh");<br />    q只是对Document的修改,q没有在实际的XML文档中进行修?br />Q?Q保存Document的修改到XML文g中:<br />   XMLOutputter outputter=new XMLOutputter();<br />    outputter.output(doc,new FileOutputStream(xmlpath));<br /><br />我们先要有一个XMLOutputterc,再把已经修改了的Document保存qXML文档中?br />到此。用JDOM解析和处理XML文档讲解完了Q麻雀虽小Q五脏俱全。现在已对JDOM有个整体上的概念了吧</font> </div> </div> <img src ="http://www.aygfsteel.com/haha/aggbug/67153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/haha/" target="_blank">~哈哈~</a> 2006-09-01 16:58 <a href="http://www.aygfsteel.com/haha/archive/2006/09/01/67153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中随机数产生的相关知?/title><link>http://www.aygfsteel.com/haha/archive/2006/08/25/65697.html</link><dc:creator>~哈哈~</dc:creator><author>~哈哈~</author><pubDate>Fri, 25 Aug 2006 02:17:00 GMT</pubDate><guid>http://www.aygfsteel.com/haha/archive/2006/08/25/65697.html</guid><wfw:comment>http://www.aygfsteel.com/haha/comments/65697.html</wfw:comment><comments>http://www.aygfsteel.com/haha/archive/2006/08/25/65697.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.aygfsteel.com/haha/comments/commentRss/65697.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/haha/services/trackbacks/65697.html</trackback:ping><description><![CDATA[ <p> <font color="#000080"> <strong>Class Random的常用的Method:<br /></strong> <a href="mk:@MSITStore:D:\books\jdk150.chm::/jdk150/api/java/util/Random.html#nextInt()"> <font face="Courier New" color="#002c99"> <strong>nextInt</strong> </font> </a> <font color="#000000"> <font face="Courier New">()</font> </font> <br /> <a href="mk:@MSITStore:D:\books\jdk150.chm::/jdk150/api/java/util/Random.html#nextInt(int)"> <font face="Courier New"> <strong>nextInt</strong> </font> </a> <font color="#000000"> <font face="Courier New">(int n)<br /><a href="mk:@MSITStore:D:\books\jdk150.chm::/jdk150/api/java/util/Random.html#nextBytes(byte[])"><font color="#002c99"><strong>nextBytes</strong></font></a>(byte[] bytes) <br /><a href="mk:@MSITStore:D:\books\jdk150.chm::/jdk150/api/java/util/Random.html#nextDouble()"><font color="#002c99"><strong>nextDouble</strong></font></a>() <br /><a href="mk:@MSITStore:D:\books\jdk150.chm::/jdk150/api/java/util/Random.html#nextFloat()"><font color="#002c99"><strong>nextFloat</strong></font></a>() <br /></font> <a href="mk:@MSITStore:D:\books\jdk150.chm::/jdk150/api/java/util/Random.html#nextLong()"> <strong> <font face="Courier New">nextLong</font> </strong> </a> <font face="Courier New">()<br /></font> </font> <a href="mk:@MSITStore:D:\books\jdk150.chm::/jdk150/api/java/util/Random.html#nextBoolean()"> <strong> <font face="Courier New" color="#002c99">nextBoolean</font> </strong> </a> <font color="#000000"> <font face="Courier New">()</font> <br /> </font> <font color="#ff1493"> <font color="#ff0000">׃RandomcM没有nextChar(),nextString()q样的方法,所以要随机产生一个字W或字符串应该自己手动编写Code</font> <br /> </font> <strong>下面的例子就是一个自动生字W的c?/strong>Q?br /></font> <font face="Tahoma" color="#000080">import java.util.*;</font> </p> <p> <font face="Tahoma" color="#000080">public class RandomChar{<br /> private static Random rand=new Random();<br /> private static String  source="ABCEDFGHIGKLMNOPQRSTUVWXYZabcedfghijklmnopqrstuvwxuyz";<br /> private static char[] sur=source.toCharArray();<br /> public static char nextChar(){<br />  return sur[rand.nextInt(source.length())];<br /> }<br /> public static void main(String args[])<br /> {<br />  System.out.println(nextChar());<br /> }<br />}<br /></font> <font color="#000080"> <br />再编写一个随Z生字W串的类Q?br /><font face="Tahoma">import java.util.*;<br />public  class RandomString{<br /> private static Random rand=new Random();<br />private static int len;//字符串的长度<br />public RandomString(int len){ this.len=len;}<br />private static String   source="ABCEDFGHIGKLMNOPQRSTUVWXYZabcedfghijklmnopqrstuvwxuyz";<br /> private static char[] sur=source.toCharArray();<br />public static char nextChar(){<br />  return sur[rand.nextInt(source.length())];<br /> }<br />private static String nextString(){<br />char [] buf=new char[len];<br />for(int i=0;i<len;i++)<br />buf[i]=nextChar();<br />return new String(buf);}<br /> public static void main(String args[])<br /> {<br />  RandomString randStr=new RandomString(5);<br />  System.out.println(randStr.nextString());<br /> }</font></font> </p> <p> <font color="#000080"> <font face="Tahoma">}</font> </font> </p> <p> <font color="#000080"> <font face="Tahoma"> </font> </font> </p> <p> <font color="#000080"> <font face="Tahoma"> </font> <font face="Tahoma"> <br /></font> </font> </p> <img src ="http://www.aygfsteel.com/haha/aggbug/65697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/haha/" target="_blank">~哈哈~</a> 2006-08-25 10:17 <a href="http://www.aygfsteel.com/haha/archive/2006/08/25/65697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关闭Tapestry~存池,提高开发效?/title><link>http://www.aygfsteel.com/haha/archive/2006/08/11/63012.html</link><dc:creator>~哈哈~</dc:creator><author>~哈哈~</author><pubDate>Fri, 11 Aug 2006 07:16:00 GMT</pubDate><guid>http://www.aygfsteel.com/haha/archive/2006/08/11/63012.html</guid><wfw:comment>http://www.aygfsteel.com/haha/comments/63012.html</wfw:comment><comments>http://www.aygfsteel.com/haha/archive/2006/08/11/63012.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/haha/comments/commentRss/63012.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/haha/services/trackbacks/63012.html</trackback:ping><description><![CDATA[ <p>Tapestry寚w面有自己的缓存策略。一旦页面被W一ơ访问,面对象׃被加载到~存中。因此,每次对HTML、page或java的修改,效ƈ不会马上生,必须重新启动服务器。在我们开发程序的时候,q样相当不方ѝ因此我们可以关闭Tapestry的缓存策略,{到目发布的时候,再开启?br /></p> <p>可以止html在客L的浏览器中缓存,如果用户点击“后退”按钮,览器自动再ơ从服务器上获得最新的面?br /><br />HTML:<br /><META HTTP-EQUIV="pragma" CONTENT="no-cache"><br /><META HTTP-EQUIV="Cache-Control" CONTENT="no-store, must-revalidate"><br /><META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT"><br /><META HTTP-EQUIV="expires" CONTENT="0"><br /><br />在MyTapestry.application中添加:</p> <div id="wmqeeuq" class="code"> <div id="wmqeeuq" class="codeContent"> <pre class="code-java"><meta key=<span id="wmqeeuq" class="code-quote">"org.apache.tapestry.disable-caching"</span> value=<span id="wmqeeuq" class="code-quote">"<span id="wmqeeuq" class="code-keyword">true</span>"</span>/> <meta key=<span id="wmqeeuq" class="code-quote">"org.apache.tapestry.enable-reset-service"</span> value=<span id="wmqeeuq" class="code-quote">"<span id="wmqeeuq" class="code-keyword">true</span>"</span>/></pre> </div> </div> <p>q在JVM中添加:</p> <div id="wmqeeuq" class="code"> <div id="wmqeeuq" class="codeContent"> <pre class="code-java">-Dorg.apache.tapestry.disable-caching=<span id="wmqeeuq" class="code-keyword">true</span> -Dorg.apache.tapestry.enable-reset-service=<span id="wmqeeuq" class="code-keyword">true<br /><br /><br /><br />部分资料摘自Q?a >q煸四季?/a>Q?a >http://www.javaeye.com/pages/viewpage.action?pageId=717</a>Q?/span></pre> </div> </div> <img src ="http://www.aygfsteel.com/haha/aggbug/63012.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/haha/" target="_blank">~哈哈~</a> 2006-08-11 15:16 <a href="http://www.aygfsteel.com/haha/archive/2006/08/11/63012.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tapestry相关知识Q?/title><link>http://www.aygfsteel.com/haha/archive/2006/08/11/62971.html</link><dc:creator>~哈哈~</dc:creator><author>~哈哈~</author><pubDate>Fri, 11 Aug 2006 05:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/haha/archive/2006/08/11/62971.html</guid><wfw:comment>http://www.aygfsteel.com/haha/comments/62971.html</wfw:comment><comments>http://www.aygfsteel.com/haha/archive/2006/08/11/62971.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/haha/comments/commentRss/62971.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/haha/services/trackbacks/62971.html</trackback:ping><description><![CDATA[ <a >http://www.javaeye.com/pages/viewpage.action?pageId=566</a> <br />从这个例子中我们能掌握很多Tapestry的相关知识,下面我把自己对这个例子理解以及涉及到的一些知识作一些介l?<br />购物车较隄一部分是客户选择的商品的保存问题Q?br />此例提供了一个很好的解决ҎQ将客户选择的商品都攑֜session中:<br />那么Q在Tapestry中如何利用session?q就要从Tapestry中的Visit对象说v?br /><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-char-indent-size: 10.5pt; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt">Visit</span><span>对象是一个应用程序空_用来储存应用E序逻辑和数据。这个对象能被应用程序中所有的面和组件访?font color="#000000">Qƈ且包?/font>WEB应用E序中某一个客L的特D信?/span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。一个单一</span><span lang="EN-US" style="mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt">Visit</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象实例被应用程序中所有的面׃n。该对象cM</span><span lang="EN-US" style="mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt">HttpSession</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在典?/span><span lang="EN-US" style="mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt">servlet</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应用E序中扮演的角色。实际上Q?/span><span lang="EN-US" style="mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt">Visit</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象最l作Z?/span><span lang="EN-US" style="mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt">HttpSession</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性被储存?/span><span lang="EN-US" style="mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-char-indent-size: 10.5pt; mso-layout-grid-align: none" align="left"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Z在应用程序中使用一些通用数据Q?/span><span lang="EN-US" style="mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt">Tapestry</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">认可</span><span lang="EN-US" style="mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt">Visit</span><span>对象。Tapestryq不知道也不兛_Visit对象的类?/span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。在框架中也没有定义Ҏ?/span><span lang="EN-US" style="mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt">Visit</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">c,每一个应用程序自己定?/span><span lang="EN-US" style="mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt">Visit</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">cR页面方法访?/span><span lang="EN-US" style="mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt">Visit</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象时ƈ不会指定具体的类型:</span><span lang="EN-US" style="mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="FONT-FAMILY: Courier; mso-bidi-font-size: 8.0pt; mso-font-kerning: 0pt">public Object getVisit();<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-char-indent-size: 10.5pt; mso-layout-grid-align: none" align="left"><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-ascii-font-family: NewBaskervilleITCbyBT-Roman; mso-hansi-font-family: NewBaskervilleITCbyBT-Roman">注意强制转换cdQ?/span><span lang="EN-US" style="FONT-FAMILY: NewBaskervilleITCbyBT-Roman; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="FONT-FAMILY: Courier; mso-bidi-font-size: 8.0pt; mso-font-kerning: 0pt">Visit visit = (Visit)getVisit();<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="FONT-FAMILY: Courier; mso-bidi-font-size: 8.0pt; mso-font-kerning: 0pt">Visit</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 8.0pt; mso-font-kerning: 0pt; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier">对象是框架自动生成的Q在W一ơ运行时被引用。你必须配置</span><span lang="EN-US" style="FONT-FAMILY: Courier; mso-bidi-font-size: 8.0pt; mso-font-kerning: 0pt">Tapestry</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 8.0pt; mso-font-kerning: 0pt; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier">提供实例化,一?/span><span lang="EN-US" style="FONT-FAMILY: Courier; mso-bidi-font-size: 8.0pt; mso-font-kerning: 0pt">Visit</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 8.0pt; mso-font-kerning: 0pt; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier">对象生成Q就会持久化储存在</span><span lang="EN-US" style="FONT-FAMILY: Courier; mso-bidi-font-size: 8.0pt; mso-font-kerning: 0pt">HttpSession</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 8.0pt; mso-font-kerning: 0pt; mso-ascii-font-family: Courier; mso-hansi-font-family: Courier">中?br /></span><span lang="EN-US" style="FONT-FAMILY: Courier; mso-bidi-font-size: 10.0pt; mso-font-kerning: 0pt"><o:p></o:p></span></p>      此例子中q有一些其他的相关知识点:<br />       Tapestry4.0中新增加的自定义的Validator功能<br />       一D늻典的E序代码Q?pre class="code-java">ValidationDelegate delegate = (ValidationDelegate)<span id="wmqeeuq" class="code-keyword">this</span>.getBeans().getBean(<span id="wmqeeuq" class="code-quote">"delegate"</span>); <span id="wmqeeuq" class="code-keyword">if</span>(delegate.getHasErrors()) { <span id="wmqeeuq" class="code-keyword">return</span><span id="wmqeeuq" class="code-keyword">this</span>.getPage().getPageName(); }<br /><br /><font color="#000080">学习Tapestry4.0 q程中逐渐明白的一些东?br /></font>从代码开始分?br />在EmploeeList.html文g中的一D代码:</pre><pre class="code-java"><tr jwcid="@Foreach" source="ognl:userList" value="ognl:customer" element="tr"><br />      <td width="7%"  align="center" bgcolor="#FFFFFF"><span jwcid="@Insert" value="ognl:(customer.getAttributeValue('sex')==1)?'Male':'Female'"/></td><br />       <td width="19%" align="center" bgcolor="#FFFFFF"><span jwcid="@Insert" value="ognl:customer.getAttributeValue('workemail')"/></td><br />   <td width="7%"  align="center" bgcolor="#FFFFFF"><span jwcid="@ExternalLink" page="xmlsync/EmployeeUpdate"       parameters="ognl:customer.getAttributeValue('employeecode')"> ??</span></td><br />   <td width="8%"  align="center" bgcolor="#FFFFFF"><span jwcid="deleteUser" parameters="ognl:customer.getAttributeValue('employeecode')" onclick="javascript:return window.confirm('定要删除该用户?');">??lt;/span></td><br /></tr><br />在EmploeeList.page文g中的一D代码:<br /><page-specification class="com.ce.myceaas.tapestry.page.xmlsync.EmployeeList"><br /> <description>Login Page</description><br />     <property name="userList"/><br />     <property name="customer"/><br />    <component id="deleteUser" type="DirectLink"><br />   <binding name="listener" value="listeners.deleteUser"/><br />    </component><br /></page-specification>  <br />在EmploeeList.java文g中的一D代码:<br />public abstract class EmployeeList extends BasePage implements PageRenderListener {<br /> public abstract List getUserList();<br /> public abstract void setUserList(List list);<br /> @InjectObject("spring:xmlService")<br /> public abstract XmlService getXmlService();<br /> @InjectPage("xmlsync/EmployeeList")<br /> public abstract IPage getEmployeeList();<br /> public void pageBeginRender(PageEvent event) {<br />  this.setUserList(this.getXmlService().getUsersList());<br /> }<br /> <br /> public void deleteUser(IRequestCycle cycle) {<br />  Object[] obj = cycle.getServiceParameters();</pre><pre class="code-java">  if (obj[0] != null) {<br />   if (obj[0] instanceof String) {<br />    getXmlService().deleteUsers(obj[0].toString());<br />    FowardUtil.forwardUrl((EmployeeList)getEmployeeList());<br />    <br />   } else {<br />    }<br />  } else {<br />   }<br />}<br />在XmlService.java文g中的一D代码:<br />public List getUsersList(){<br />  <br />  List list = new ArrayList();<br />  SAXBuilder builder = new SAXBuilder();<br />     try {<br />       File inFile = new File(url);    //get the xmlfile  <br />       Document doc = builder.build(inFile);<br />       Element root = doc.getRootElement();<br />      <br />       list = root.getChildren("employeeinfo");<br />     }<br />     catch (JDOMException e) { <br />       System.out.println(" is not well-formed.");<br />       System.out.println(e.getMessage());<br />     }  <br />     catch (IOException e) { <br />       System.out.println(e);<br />     }<br />  return list;<br />   }<br />可以在EmploeeList.html看到q段代码</pre><pre class="code-java"> "ognl:(customer.getAttributeValue('sex')==1)?'Male':'Female"<br />其中的customer是从<tr jwcid="@Foreach" source="ognl:userList" value="ognl:customer" element="tr">q里来的<br />userList是Listcd 其中的元素是customerQcustomer的类型是Element,再看customer.getAttributeValue('sex')Q这里ؓ什么能用getAttributeValue()呢,q就要问Tapestry4.0的实现机制了Q当|页表现旉到ognl:userList时会在EmploeeList.page中找?br /><property name="userList"/><br />而在EmploeeList.java中有<br />      public abstract List getUserList();<br /> public abstract void setUserList(List list);<br />q两个抽象函数将完成对ognl:userList的赋g修改工作<br />下面q段代码<br />       @InjectObject("spring:xmlService")//调用XmlService对象<br />        ······<br /> public abstract XmlService getXmlService();<br />  public void pageBeginRender(PageEvent event) {<br />  this.setUserList(this.getXmlService().getUsersList());//真正的实现userList的传递的工作<br /> }<br />q段代码EmploeeList.html和XmlService.java联系hQ这也就是ؓ什么在 EmploeeList.html能用getAttributeValue('sex')Ҏ的原因!<br /></pre><img src ="http://www.aygfsteel.com/haha/aggbug/62971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/haha/" target="_blank">~哈哈~</a> 2006-08-11 13:32 <a href="http://www.aygfsteel.com/haha/archive/2006/08/11/62971.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>