??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美亚洲第一区,77777影视视频在线观看,欧美亚洲日本http://www.aygfsteel.com/esprit/AZA~AZA~FIGHTING......zh-cnThu, 19 Jun 2025 23:57:05 GMTThu, 19 Jun 2025 23:57:05 GMT60[转]IE与Firefox对CSS解析的区?/title><link>http://www.aygfsteel.com/esprit/archive/2006/09/21/71099.html</link><dc:creator>esprit</dc:creator><author>esprit</author><pubDate>Thu, 21 Sep 2006 06:49:00 GMT</pubDate><guid>http://www.aygfsteel.com/esprit/archive/2006/09/21/71099.html</guid><wfw:comment>http://www.aygfsteel.com/esprit/comments/71099.html</wfw:comment><comments>http://www.aygfsteel.com/esprit/archive/2006/09/21/71099.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/esprit/comments/commentRss/71099.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/esprit/services/trackbacks/71099.html</trackback:ping><description><![CDATA[ <p>1、IE与Firefox下对CSS解析的区?q是我在使用中的一些经验,拿出来和大家分nQ希望大家l?/p> <p> <strong>寚w度的解析</strong> </p> <p>IEQ将Ҏ内容的高度变化,包括未定义高度的囄内容Q即使定义了高度Q当内容过高度Ӟ用实际高度?/p> <p>FirefoxQ没有定义高度时Q如果内容中包括了图片内容,MF的高度解析是Ҏ印刷标准Q这样就会造成和实际内定w度不W合的情况;当定义了高度,但是内容过高度Ӟ内容会超出定义的高度Q但是区域用的样式不会变化Q造成样式错位?/p> <p>l论Q大家在可以定内容高度的情况下最好定义高度,如果真的没有办法定义高度Q最好不用用边框样式,否则样式肯定会出现؜乱!</p> <p> <strong>img对象alt和title的解?br /></strong>altQ当照片不存在或者load错误时的提示Q?br />titleQ照片的tip说明?br />在IE中如果没有定义titleQalt也可以作为img的tip使用Q但是在MF中,两者完全按照标准中的定义?/p> <p>l论Q大家在定义img对象Ӟ最后将alt和title对象都写全,保证在各U浏览器中都能正怋?/p> <p> <strong>其他的细节差?br /></strong>当你在写css的时候,特别是用float: leftQ或rightQ排列一H图片时Q会发现在firefox里面正常而IE里面有问题。无Z用margin:0,q是border: 0来约束,都无于事?/p> <p>其实q里q有另外一个问题,是IE对于I格的处理,firefox是忽略的而IE对于块与块之间的I格是处理的。也是说一个divl束后要紧接着一个div写,中间不要有回车或者空根{不然也怼有问题,比如3px的偏差,而且q个原因很难发现?/p> <p>非常不走q的是我又碰Cq样的问题,多个img标签q着Q然后定义的float: leftQ希望这些图片可以连h。但是结果在firefox里面正常而IE里面昄的每个img都相隔了3px。我把标{之间的I格都删除都没有作用?/p> <p>后来的解x法是在img外面套liQƈ且对li定义margin: 0Q这样就解决了IE和firefox的显C偏差。IE对于一些模型的解释会生很多错误问题,只有多多试才能发现原因?/p> <p> <strong>2、嵌套DIV:父DIV的高度不能根据子DIV自动变化的解x?/strong> <br /><div id="parent"><br /><div id="content"> </div><br /></div></p> <p>当Content内容多时Q即使parent讄了高?00%或auto,在不同浏览器下还是不能完好的自动伸展?解决Ҏ</p> <p><div id="parent"><br /><div id="content"></div><br /><div style="font: 0px/0px sans-serif;clear: both;display: block"> </div><br /></div></p> <p>在层的最下方产生一个高度ؓ1的空|可解除这个问?/p> <p> <strong>3、CSS DIV 学习W记</strong> <br />一、基本上每个区块的div 都要有自qidQ杜l不同功能的区块用同一个id/class</p> <p>二、每个稍大的区块div 后面都跟一?lt;!?/id ?gt;标记开始、结?/p> <p>三、隐藏文字的又一U方?TEXT-INDENT: -9999px; LINE-HEIGHT: 0</p> <p>四、y妙地处理q列的两?<br />1)<br />叛_为P, width=44.5%, float=left<br />左列为P.first, border-right: #a7a7a7 1px solid, width=45%<br />2)<br />叛_#right, margin-left:50%<br />左列#left, float=left,width=50% border-right:#a7a7a7 1px solid</p> <p>以上两种Ҏ关键点在于选择其中一个ؓfloat=left</p> <p>五、随机的切换囄Q?br />#random {<br />BACKGROUND: url(/rotate.php);<br />}<br />q个Ҏ很y妙?/p> <p>4、关于div的高度自适应<br />   今天尿让我帮他的页子解决一个问题,是div的高度自适应Q也是在一个父Udiv中嵌套一左一右两个子divQ右边的子div内容可无限扩展,? 可以使得父div的高度能被无限拉长,用一般的布局ҎQ在IE中可以正浏览,在Mozilla中父Udiv的高度就固定?0px左右Q无法自适应 高度Qheight:auto也不行,怎么办呢。网上参考到一资料,要实现自适应高度Qdiv层必d有float属性,于是我开始动手试验, float:left的话Qdivp到页面最左边MQ这好办Q我在它的外面再套一层divQ把位置定好Q那么里面的qfloat:left也不会被 Ud位置了?/p> <p>xhtml:<br />===============</p> <p><div id="container_father"><br /> <div id="container"><br />   <div id="panel"> test<br /><br />    test<br /><br />    test<br /><br />     <!?id="panel" ?gt;<br />   </div><br />   <div id="sidebar"><br />    <ul><br />      <li class="current">预安装检?lt;/li><br />      <li>阅读 PFC 授权协议</li><br />      <li>初始化数据库</li><br />      <li>完成安装</li><br />     </ul><br />     <!?id="sidebar" ?gt;<br />   </div><br />   <!?id="container" ?gt;<br /> </div><br /></div></p> <p>CSS<br />=================<br />#container_father {<br />margin-left: auto;<br />margin-right: auto;<br />padding: 0px;<br />width: 750px;<br />}</p> <p>#container {<br />  width: 750px;<br />  border: 1px solid #cccccc;<br />  padding: 8px;<br />  margin: 0px;<br />  background-color: #F1F3F5;<br />  float: left;<br />}</p> <p>FRom: http://ulean.zg163.net/</p> <p> <strong>5? 深入标准  ~  The IE Doubled Float-Margin Bug(IE双倍Q动边界Bug)</strong> <br />什么发生故障?</p> <p>一 D|错的代码把一个居左Q?float:left)的元素放|进一个容器盒(box)Qƈ在Q动元素上使用了左边界(margin-left)来o它和 容器的左边生一D距R看h相当的简单,对吗Q但直至它被在IE/Win中浏览ؓ止,在浏览器中居左Q动元素的边界长度被神U地M一倍!</p> <p>情况应该如何Q?/p> <p>下面的图释展CZ一个简单的div(茶色的盒?包含着一个居左Q动的div(l色的盒?。Q动元素有一?00px的左边界Q容器盒与它的左边~之间生了一?00px的间隙。到现在为止Q一直都q不错?/p> <p>.floatbox {<br />float: left;<br />width: 150px;<br />height: 150px;<br />margin: 5px 0 5px 100px;<br />/*This last value applies the 100px left margin */<br />}</p> <p>陈旧的IE“双倍占据?/p> <p>原样的相同代码被在IE/Win中浏览时以些微不同的方式昄Q下面的N展示了IE/Win在布局上所做的?/p> <p>qؓ什么会发生Q别问这U傻问题Q这是IEQ记得吗Q符合标准只是理想的状况Q不指望实现Q这个简单的事实正验证了?/p> <p>重点</p> <p>q个Bug仅当动边界和Q动元素的方向相同时出现在动元素和容器盒的内边缘之间Q在q之后的L有着怼边界的Q动元素不会呈现双倍边界。只有特定的动行的W一个Q动元素会遭遇q个Bug。像居左的情况一P双倍边界同LU地昄在居右的相同方式?/p> <p>最后,修复办法Q?/p> <p>? 到现?04q??q个Bug一直被认ؓ是无法修复的Q通常用来替代错误的边界的控制Ҏ如:一个不可视动元素的左边距Q连同一个内嵌的盒子一P? 视的盒子装在不可视Q动元素里Q或者用技巧仅对IE/Win讑֮边界?/2倹{这办法生效了,但是是؜q而且搞糟了干净的源代码。不q现在全部结? 了?/p> <p>Steve Clason发现了一个修复办法,描述在他的Guest Demo里,修复了双倍边界和围绕文字~进Bug。这是一个经典的IE的Bug修复办法Q用一个属性来修复影响不相兛_性的Bug?/p> <p>现在如何来做Q?/p> <p>研究它,单地{display: inline;}讄lQ动元素就是全部所需做的Q是的,听v来太单了Q不是吗Q不q这是真的,仅仅一个display?inline"声明已经能够胜Q了?/p> <p>熟悉规则的h知道动元素自动讄?block"元素Q而不他们之前是什么。就如Steve从W3C里指出:</p> <p>9.5.1 Positioning the float: the ‘float?property</p> <p>"This property specifies whether a box should float to the left, right, or not at all. It may be set for elements that generate boxes that are not absolutely positioned. The values of this property have the following meanings:</p> <p>left<br />The element generates a block box that is floated to the left. Content flows on the right side of the box, starting at the top (subject to the ‘clear?property). The ‘display?is ignored, unless it has the value ‘none?</p> <p>right<br />Same as ‘left? but content flows on the left side of the box, starting at the top.</p> <p>none<br />The box is not floated. "</p> <p>q?说明动元素上的{display: inline;}会被忽略Q事实上所有的览器没有呈CQ何改变,包括IE。但是,它不知何故让IE停止Q动元素的边界d。因而,q个修复办法可以? 直接应用Q而没有Q何繁琐的隐藏Ҏ。如果将来的一ƾ浏览器军_对这个修复办法抱恙,只要把这个修复装入IE独用的Tan Hack里,l节如同IE Three Pixel Text-Jog Demo?/p> <p>下面是两个用了前面相同代码的生动演C,W一个照常显CZIE的BugQ下一个对动元素使用?inline"修复?br />.floatbox {<br />float: left;<br />width: 150px;<br />height: 150px;<br />margin: 5px 0 5px 100px;<br />display: inline;<br />}</p> <p> <font color="#ff0000">Update (20060828)Q?br /></font> <strong>6、空<li></li>解析问题</strong>?/p> <p>在FF下空<li></li>是不被解析的Q也是_<li>标签所带的css样式是不被解释的。但是在IE下空<li></li>是一样会被解析的?br />例如我定义如下Css:<br />#sidebar ul li {<br />  list-style-type: none;<br />  list-style-image: none;<br />  margin-bottom: 15px;<br />}</p> <p>而我的sidebar使用了一个空?<li></li> 。那么在FF下不被解析,而在IE下会出现15px的空白?/p> <img src ="http://www.aygfsteel.com/esprit/aggbug/71099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/esprit/" target="_blank">esprit</a> 2006-09-21 14:49 <a href="http://www.aygfsteel.com/esprit/archive/2006/09/21/71099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>收藏?常用的一些javascript技?/title><link>http://www.aygfsteel.com/esprit/archive/2006/07/08/57300.html</link><dc:creator>esprit</dc:creator><author>esprit</author><pubDate>Sat, 08 Jul 2006 15:53:00 GMT</pubDate><guid>http://www.aygfsteel.com/esprit/archive/2006/07/08/57300.html</guid><wfw:comment>http://www.aygfsteel.com/esprit/comments/57300.html</wfw:comment><comments>http://www.aygfsteel.com/esprit/archive/2006/07/08/57300.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/esprit/comments/commentRss/57300.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/esprit/services/trackbacks/57300.html</trackback:ping><description><![CDATA[事g源对象?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />event.srcElement.tagName <br />event.srcElement.type <br /><br /></td></tr></tbody></table><br />捕获释放 <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />event.srcElement.setCapture();  <br />event.srcElement.releaseCapture();<br /><br /></td></tr></tbody></table><br />事g按键<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />event.keyCode <br />event.shiftKey <br />event.altKey <br />event.ctrlKey <br /><br /></td></tr></tbody></table><br />事gq回?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />event.returnValue <br /><br /></td></tr></tbody></table><br />鼠标位置 <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />event.x <br />event.y <br /><br /></td></tr></tbody></table><br />H体zd元素<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />document.activeElement <br /><br /></td></tr></tbody></table><br />l定事g<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />document.captureEvents(Event.KEYDOWN); <br /><br /></td></tr></tbody></table><br />讉KH体元素 <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />document.all("txt").focus(); <br />document.all("txt").select(); <br /><br /></td></tr></tbody></table><br />H体命o <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />document.execCommand <br /><br /></td></tr></tbody></table><br />H体COOKIE <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />document.cookie <br /><br /></td></tr></tbody></table><br />菜单事g <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />document.oncontextmenu<br /><br /></td></tr></tbody></table> <br />创徏元素<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />document.createElement("SPAN"); <br /><br /></td></tr></tbody></table><br />Ҏ鼠标获得元素Q?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />document.elementFromPoint(event.x,event.y).tagName=="TD <br />document.elementFromPoint(event.x,event.y).appendChild(ms)<br /><br /></td></tr></tbody></table><br />H体囄<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />document.images[索引] <br /><br /></td></tr></tbody></table><br />H体事gl定 <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />document.onmousedown=scrollwindow; <br /><br /></td></tr></tbody></table><br />元素 <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />document.H体.elements[索引]<br /><br /></td></tr></tbody></table> <br /><br />对象l定事g <br /><br /><br />插g数目<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />navigator.plugins <br /><br /></td></tr></tbody></table><br />取变量类?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />typeof($js_libpath) == "undefined" <br /><br /></td></tr></tbody></table><br />下拉?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />下拉?options[索引] <br />下拉?options.length <br /><br /></td></tr></tbody></table><br />查找对象 <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />document.getElementsByName("r1"); <br />document.getElementById(id); <br /><br /></td></tr></tbody></table><br /><br />定时 <br /><br /><br />UNCODE~码 <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />escape() ,unescape <br /><br /></td></tr></tbody></table><br />父对象?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />obj.parentElement(dhtml) <br />obj.parentNode(dom)<br /><br /></td></tr></tbody></table><br />交换表的?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />TableID.moveRow(2,1) <br /><br /></td></tr></tbody></table><br />替换CSS <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />document.all.csss.href = "a.css"; <br /><br /></td></tr></tbody></table><br />q排昄 <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />display:inline<br /><br /></td></tr></tbody></table> <br />隐藏焦点 <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />hidefocus=true <br /><br /></td></tr></tbody></table><br />Ҏ宽度换行<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />style="word-break:break-all"<br /><br /></td></tr></tbody></table> <br />自动h <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br /><meta HTTP-EQUIV="refresh" CONTENT="8;URL=http://c98.yeah.net"><br /><br /></td></tr></tbody></table> <br />单邮?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br /><a href="mailto:aaa@bbb.com?subject=ccc&body=xxxyyy"> <br /><br /></td></tr></tbody></table><br />快速{C|?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />obj.scrollIntoView(true)<br /><br /></td></tr></tbody></table> <br />?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br /><a name="first"> <br /><a href="#first">anchors</a> <br /><br /></td></tr></tbody></table><br />|页传递参?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />location.search();<br /><br /></td></tr></tbody></table><br />可编?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />obj.contenteditable=true <br /><br /></td></tr></tbody></table><br />执行菜单命o<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />obj.execCommand <br /><br /></td></tr></tbody></table><br />双字节字W?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />/[^\x00-\xff]/ <br /><br /></td></tr></tbody></table><br />汉字 <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />/[\u4e00-\u9fa5]/ <br /><br /></td></tr></tbody></table><br />让英文字W串出表格宽度自动换行<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />word-wrap: break-word; word-break: break-all; <br /><br /></td></tr></tbody></table><br />透明背景<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br /><IFRAME src="1.htm" width=300 height=180 allowtransparency></iframe> <br /><br /></td></tr></tbody></table><br />获得style内容<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />obj.style.cssText <br /><br /></td></tr></tbody></table><br />HTML标签<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />document.documentElement.innerHTML <br /><br /></td></tr></tbody></table><br />W一个style标签<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />document.styleSheets[0] <br /><br /></td></tr></tbody></table><br />style标签里的W一个样?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />document.styleSheets[0].rules[0] <br /><br /></td></tr></tbody></table><br />防止点击I链接时Q页面往往重置到页首端?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br /><a href="javascript:function()">word</a> <br /><br /></td></tr></tbody></table><br />上一|页?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />asp: <br />request.servervariables("HTTP_REFERER") <br />javascript: <br />document.referrer <br /><br /></td></tr></tbody></table><br />释放内存<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />CollectGarbage();<br /><br /></td></tr></tbody></table><br />止右键 <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />document.oncontextmenu = function() { return false;} <br /><br /></td></tr></tbody></table><br />止保存 <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br /><noscript><iframe src="*.htm"></iframe></noscript><br /><br /></td></tr></tbody></table><br />止选取<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br /><body oncontextmenu="return false" ondragstart="return false" onselectstart ="return false" onselect="document.selection.empty()" oncopy="document.selection.empty()" onbeforecopy="return false"onmouseup="document.selection.empty()> <br /><br /></td></tr></tbody></table><br />止_脓<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br /><input type=text onpaste="return false"> <br /><br /></td></tr></tbody></table><br />地址栏图标?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br /><link rel="Shortcut Icon" href="favicon.ico"><br /><br />favicon.ico 名字最好不?6*16?6?放虚拟目录根目录下?br />收藏栏图标?br /><br /><link rel="Bookmark" href="favicon.ico"> <br /><br /></td></tr></tbody></table><br /><br />查看源码<br /><br /><br />关闭输入?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br /><input style="ime-mode:disabled"> <br /><br /></td></tr></tbody></table><br />自动全?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br /><input type=text name=text1 value="123" onfocus="this.select()"> <br /><br /></td></tr></tbody></table><br />ENTER键可以让光标Ud下一个输入框<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br /><input onkeydown="if(event.keyCode==13)event.keyCode=9"><br /><br /></td></tr></tbody></table><br />文本框的默认?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br /><input type=text value="123" onfocus="alert(this.defaultValue)"> <br /><br /></td></tr></tbody></table><br />title换行<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />obj.title = "123&#13sdfs&#32" <br /><br /></td></tr></tbody></table><br />获得旉所代表的微U?br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />var n1 = new Date("2004-10-10".replace(/-/g, "\/")).getTime() <br /><br /></td></tr></tbody></table><br />H口是否关闭 <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />win.closed <br /><br /></td></tr></tbody></table><br />checkbox扁^<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br /><input type=checkbox style="position: absolute; clip:rect(5px 15px 15px 5px)"> <br /><br /></td></tr></tbody></table><br />获取选中内容 <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />document.selection.createRange().duplicate().text<br /><br /></td></tr></tbody></table><br />自动完成功能<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br /><input  type=text  autocomplete=on>打开该功q?br /><input  type=text  autocomplete=off>关闭该功q?br /><br /></td></tr></tbody></table><br />H口最大化 <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br /><body onload="window.resizeTo(window.screen.width - 4,window.screen.height-50);window.moveTo(-4,-4)"> <br /><br /></td></tr></tbody></table><br />无关闭按钮IE<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />window.open("aa.htm", "meizz", "fullscreen=7"); <br /><br /></td></tr></tbody></table><br />l一~码/解码<br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"> <br />alert(decodeURIComponent(encodeURIComponent("http://你好.com?as= hehe"))) <br />encodeURIComponent?:"?/"?;" 和??"也编码?br /><br /></td></tr></tbody></table><br /><br />表格行指C?br /><br /><br />//各种寸 <br /><br /><table cellspacing="1" width="100%" bgcolor="#cccccc" border="0"><tbody><tr><td bgcolor="#efefef"><br />s  +=  "\r\n|页可见区域宽:"+  document.body.clientWidth;   <br />s  +=  "\r\n|页可见区域高:"+  document.body.clientHeight;   <br />s  +=  "\r\n|页可见区域高:"+  document.body.offsetWeight  +"  (包括边线的宽)";   <br />s  +=  "\r\n|页可见区域高:"+  document.body.offsetHeight  +"  (包括边线的宽)";   <br />s  +=  "\r\n|页正文全文宽:"+  document.body.scrollWidth;   <br />s  +=  "\r\n|页正文全文高:"+  document.body.scrollHeight;   <br />s  +=  "\r\n|页被卷ȝ高:"+  document.body.scrollTop;   <br />s  +=  "\r\n|页被卷ȝ左:"+  document.body.scrollLeft;   <br />s  +=  "\r\n|页正文部分上:"+  window.screenTop;   <br />s  +=  "\r\n|页正文部分左:"+  window.screenLeft;   <br />s  +=  "\r\n屏幕分L率的高:"+  window.screen.height;   <br />s  +=  "\r\n屏幕分L率的宽:"+  window.screen.width;   <br />s  +=  "\r\n屏幕可用工作区高度:"+  window.screen.availHeight;   <br />s  +=  "\r\n屏幕可用工作区宽度:"+  window.screen.availWidth; <br /><br /></td></tr></tbody></table><br /><img src ="http://www.aygfsteel.com/esprit/aggbug/57300.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/esprit/" target="_blank">esprit</a> 2006-07-08 23:53 <a href="http://www.aygfsteel.com/esprit/archive/2006/07/08/57300.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Javascript的IE和Firefox兼容性汇~?/title><link>http://www.aygfsteel.com/esprit/archive/2006/07/08/57298.html</link><dc:creator>esprit</dc:creator><author>esprit</author><pubDate>Sat, 08 Jul 2006 15:50:00 GMT</pubDate><guid>http://www.aygfsteel.com/esprit/archive/2006/07/08/57298.html</guid><wfw:comment>http://www.aygfsteel.com/esprit/comments/57298.html</wfw:comment><comments>http://www.aygfsteel.com/esprit/archive/2006/07/08/57298.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/esprit/comments/commentRss/57298.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/esprit/services/trackbacks/57298.html</trackback:ping><description><![CDATA[以下以 IE 代替 Internet ExplorerQ以 MF 代替 Mozzila Firefox<br /><br /><b>1. document.form.item 问题</b><br />(1)现有问题Q?br />现有代码中存在许多 document.formName.item("itemName") q样的语句,不能在 MF 下运?br />(2)解决ҎQ?br />改用 document.formName.elements["elementName"]<br />(3)其它<br />参见 2<br /><br /><b>2. 集合cd象问?/b><br />(1)现有问题Q?br />现有代码中许多集合类对象取用时用?)QIE 能接受,MF 不能?br />(2)解决ҎQ?br />改用 [] 作ؓ下标q算。如Qdocument.forms("formName") 改ؓ document.forms["formName"]?br />又如Qdocument.getElementsByName("inputName")(1) 改ؓ document.getElementsByName("inputName")[1]<br /><br /><b>3. window.event</b><br />(1)现有问题Q?br />使用 window.event 无法在 MF 上运?br />(2)解决ҎQ?br />MF 的 event 只能在事件发生的现场使用Q此问题暂无法解冟뀂可以这样变通:<br />原代?可在IE中运?Q?br /><input type="button" name="someButton" value="提交" onclick="javascript:gotoSubmit()"/><br />...<br /><script language="javascript"><br />function gotoSubmit() {<br />...<br />alert(window.event); // use window.event<br />...<br />}<br /></script><br /><br />C?可在IE和MF中运?Q?br /><input type="button" name="someButton" value="提交" onclick="javascript:gotoSubmit(event)"/><br />...<br /><script language="javascript"><br />function gotoSubmit(evt) {<br />evt = evt ? evt : (window.event ? window.event : null);<br />...<br />alert(evt); // use evt<br />...<br />}<br /></script><br />此外Q如果新代码中第一行不改,与老代码一L?ꐠgotoSubmit 调用没有l参?Q则仍然只能在IE中运行,但不会出错。所以,q种Ҏ tpl 部分仍与老代码兼宏V?br /><br /><b>4. HTML 对象的 id 作ؓ对象名的问题</b><br />(1)现有问题<br />在 IE 中,HTML 对象的 ID 可以作ؓ document 的下属对象变量名直接使用。在 MF 中不能?br />(2)解决Ҏ<br />用 getElementById("idName") 代替 idName 作ؓ对象变量使用?br /><br /><b>5. 用idName字符串取得对象的问题</b><br />(1)现有问题<br />在IE中,利用 eval(idName) 可以取得 id 为 idName 的 HTML 对象Q在MF 中不能?br />(2)解决Ҏ<br />用 getElementById(idName) 代替 eval(idName)?br /><br /><b>6. 变量名与某 HTML 对象 id 相同的问?/b><br />(1)现有问题<br />在 MF 中,因ؓ对象 id 不作为 HTML 对象的名Uͼ所以可以用与 HTML 对象 id 相同的变量名QIE 中不能?br />(2)解决Ҏ<br />在声明变量时Q一律加上 var Q以避免歧义Q这样在 IE 中亦可正常运行?br />此外Q最好不要取与 HTML 对象 id 相同的变量名Q以减少错误?br />(3)其它<br />参见 问题4<br /><br /><b>7. event.x 与 event.y 问题</b><br />(1)现有问题<br />在IE 中,event 对象有 x, y 属性,MF中没有?br />(2)解决Ҏ<br />在MF中,与event.x {效的是 event.pageX。但event.pageX IE中没有?br />故采用 event.clientX 代替 event.x。在IE 中也有这个变量?br />event.clientX 与 event.pageX 有微妙的差别Q当整个面有滚动条的时候)Q不q大多数时候是{效的?br /><br />如果要完全一P可以E麻烦些Q?br />mX = event.x ? event.x : event.pageX;<br />然后用 mX 代替 event.x<br />(3)其它<br />event.layerX 在 IE 与 MF 中都有,具体意义有无差别未试验?br /><br /><b>8. 关于frame</b><br />(1)现有问题<br />在 IE中 可以用window.testFrame取得该frameQmf中不?br />(2)解决Ҏ<br />在frame的用方面mf和ie的最主要的区别是Q?br />如果在frame标签中书写了以下属性:<br /><frame src="xx.htm" id="frameId" name="frameName" /><br />那么ie可以通过id或者name讉Kq个frame对应的window对象<br />而mf只可以通过name来访问这个frame对应的window对象<br />例如如果上述frame标签写在最上层的window里面的htm里面Q那么可以这栯?br />ieQ window.top.frameId或者window.top.frameName来访问这个window对象<br />mfQ 只能这样window.top.frameName来访问这个window对象<br /><br />另外Q在mf和ie中都可以使用window.top.document.getElementById("frameId")来访问frame标签<br />q且可以通过window.top.document.getElementById("testFrame").src = ‘xx.htm’来切换frame的内?br />也都可以通过window.top.frameName.location = ‘xx.htm’来切换frame的内?br />关于frame和window的描q可以参见bbs的‘window与frame’文?br />以及/test/js/test_frame/目录下面的测?br />----adun 2004.12.09修改<br /><br /><b>9. 在mf中,自己定义的属性必getAttribute()取得</b><br /><br /><b>10.在mf中没有 parentElement parement.children 而用parentNode parentNode.childNodes</b><br />childNodes的下标的含义在IE和MF中不同,MF使用DOM规范QchildNodes中会插入I白文本节点?br />一般可以通过node.getElementsByTagName()来回避这个问题?br />当html中节点缺失时QIE和MF对parentNode的解释不同,例如<br /><form><br /><table><br /><input/><br /></table><br /></form><br />MF中input.parentNode的gؓform, 而IE中input.parentNode的gؓI?br /><br />MF中节Ҏ有removeNodeҎQ必M用如下方法 node.parentNode.removeChild(node)<br /><br /><b>11.const 问题</b><br />(1)现有问题:<br />在 IE 中不能用 const 关键字。如 const constVar = 32; 在IE中这是语法错误?br />(2)解决Ҏ:<br />不用 const Q以 var 代替?br /><br /><b>12. body 对象</b><br />MF的body在body标签没有被浏览器完全d之前存在,而IE则必dbody完全被读入之后才存在<br /><br /><b>13. url encoding</b><br />在js中如果书写urlq接写&不要?amp;amp;例如var url = ‘xx.jsp?objectName=xx&amp;objectEvent=xxx?<br />frm.action = url那么很有可能url不会被正常显CZ至于参数没有正确的传到服务器<br />一般会服务器报错参数没有找?br />当然如果是在tpl中例外,因ؓtpl中符合xml规范Q要?amp;书写?amp;amp;<br />一般MF无法识别js中的&amp;<br /><br /><b>14. nodeName 和 tagName 问题</b><br />(1)现有问题Q?br />在MF中,所有节点均有 nodeName |但 textNode 没有 tagName 倹{在 IE 中,nodeName 的用好?br />有问题(具体情况没有试Q但我的IE已经M好几ơ)?br />(2)解决ҎQ?br />使用 tagNameQ但应检其是否为空?br /><br /><b>15. 元素属?/b><br />IE下 input.type属性ؓ只读Q但是MF下可以修?br /><img src ="http://www.aygfsteel.com/esprit/aggbug/57298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/esprit/" target="_blank">esprit</a> 2006-07-08 23:50 <a href="http://www.aygfsteel.com/esprit/archive/2006/07/08/57298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Session详解【{载?/title><link>http://www.aygfsteel.com/esprit/archive/2006/03/17/35817.html</link><dc:creator>esprit</dc:creator><author>esprit</author><pubDate>Fri, 17 Mar 2006 05:43:00 GMT</pubDate><guid>http://www.aygfsteel.com/esprit/archive/2006/03/17/35817.html</guid><wfw:comment>http://www.aygfsteel.com/esprit/comments/35817.html</wfw:comment><comments>http://www.aygfsteel.com/esprit/archive/2006/03/17/35817.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/esprit/comments/commentRss/35817.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/esprit/services/trackbacks/35817.html</trackback:ping><description><![CDATA[作者:郎云鹏(dev2dev ID: hippiewolfQ?br /><br />摘要Q虽然session机制在web应用E序中被采用已经很长旉了,但是仍然有很多h不清楚session机制的本质,以至不能正确的应用这一技术。本文将详细讨论session的工作机制ƈ且对在Java web application中应用session机制时常见的问题作出解答?br /><br />目录Q?br />一、术语session<br />二、HTTP协议与状态保?br />三、理解cookie机制<br />四、理解session机制<br />五、理解javax.servlet.http.HttpSession<br />六、HttpSession常见问题<br />七、跨应用E序的session׃n<br />八、ȝ<br />参考文?br /><br />一、术语session<br />在我的经验里Qsessionq个词被滥用的程度大概仅ơ于transactionQ更加有的是transaction与session在某些语境下的含义是相同的?br /><br />sessionQ中文经常翻译ؓ会话Q其本来的含义是指有始有l的一pd动作/消息Q比如打电话时从拿v电话拨号到挂断电话这中间的一pdq程可以UCZ?session。有时候我们可以看到这L话“在一个浏览器会话期间Q?..”,q里的会话一词用的就是其本义Q是指从一个浏览器H口打开到关闭这个期?①。最混ؕ的是“用P客户端)在一ơ会话期间”这样一句话Q它可能指用L一pd动作Q一般情况下是同某个具体目的相关的一pd动作Q比如从d到选购商品到结账登样一个网上购物的q程Q有时候也被称Z个transactionQ,然而有时候也可能仅仅是指一ơ连接,也有可能是指含义①,其中的差别只能靠上下文来推断②?br /><br />然而当session一词与|络协议相关联时Q它又往往隐含了“面向连接”和/或“保持状态”这样两个含义, “面向连接”指的是在通信双方在通信之前要先建立一个通信的渠道,比如打电话,直到Ҏ接了电话通信才能开始,与此相对的是写信Q在你把信发出去的时候你q不能确认对方的地址是否正确Q通信渠道不一定能建立Q但对发信h来说Q通信已经开始了。“保持状态”则是指通信的一方能够把一pd的消息关联v来,使得消息之间可以互相依赖Q比如一个服务员能够认出再次光的老顾客ƈ且记得上ơ这个顾客还Ơ店里一块钱。这一cȝ例子有“一个TCP session”或?“一个POP3 session”③?br /><br />而到了web服务器蓬勃发展的时代Qsession在web开发语境下的语义又有了新的扩展Q它的含义是指一cȝ来在客户端与服务器之间保持状态的解决Ҏ④。有时候session也用来指q种解决Ҏ的存储结构,如“把xxx保存在session 里”⑤。由于各U用于web开发的语言在一定程度上都提供了对这U解x案的支持Q所以在某种特定语言的语境下Qsession也被用来指代该语a的解x案,比如l常把Java里提供的javax.servlet.http.HttpSessionUCؓsession⑥?br /><br />鉴于q种混ؕ已不可改变,本文中session一词的q用也会Ҏ上下文有不同的含义,请大家注意分辨?br />在本文中Q用中文“浏览器会话期间”来表达含义①,使用“session机制”来表达含义④,使用“session”表辑֐义⑤Q用具体的“HttpSession”来表达含义?br /><br />二、HTTP协议与状态保?br />HTTP 协议本n是无状态的Q这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器h下蝲某些文gQ无论是客户端还是服务器都没有必要纪录彼此过ȝ行ؓQ每一ơ请求之间都是独立的Q好比一个顾客和一个自动售货机或者一个普通的Q非会员Ӟ大卖Z间的关系一栗?br /><br />然而聪明(或者贪心?Q的Z很快发现如果能够提供一些按需生成的动态信息会使web变得更加有用Q就像给有线电视加上Ҏ功能一栗这U需求一斚wqHTML逐步d了表单、脚本、DOM{客L行ؓQ另一斚w在服务器端则出现了CGI规范以响应客L的动态请求,作ؓ传输载体的HTTP协议也添加了文g上蝲?cookieq些Ҏ。其中cookie的作用就是ؓ了解决HTTP协议无状态的~陷所作出的努力。至于后来出现的session机制则是又一U在客户端与服务器之间保持状态的解决Ҏ?br /><br />让我们用几个例子来描qC下cookie和session机制之间的区别与联系。笔者曾l常ȝ一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠Q然而一ơ性消?杯咖啡的Z微乎其微Q这时就需要某U方式来U录某位֮的消Ҏ量。想象一下其实也无外乎下面的几种ҎQ?br />1、该店的店员很厉宻I能记住每位顾客的消费数量Q只要顾客一走进咖啡店,店员q道该怎么对待了。这U做法就是协议本w支持状态?br />2、发l顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每ơ消ҎQ如果顾客出C张卡片,则此ơ消费就会与以前或以后的消费相联pv来。这U做法就是在客户端保持状态?br />3、发l顾客一张会员卡Q除了卡号之外什么信息也不纪录,每次消费Ӟ如果֮出示该卡片,则店员在店里的纪录本上找到这个卡号对应的U录d一些消费信息。这U做法就是在服务器端保持状态?br /><br />׃HTTP协议是无状态的Q而出于种U考虑也不希望使之成ؓ有状态的Q因此,后面两种Ҏ成为现实的选择。具体来说cookie机制采用的是在客L保持状态的ҎQ而session机制采用的是在服务器端保持状态的Ҏ。同时我们也看到Q由于采用服务器端保持状态的Ҏ在客L也需要保存一个标识,所以session机制可能需要借助于cookie机制来达C存标识的目的Q但实际上它q有其他选择?br /><br />三、理解cookie机制 <br />cookie机制的基本原理就如上面的例子一L单,但是q有几个问题需要解冻I“会员卡”如何分发;“会员卡”的内容Q以及客户如何用“会员卡”?br /><br />正统的cookie分发是通过扩展HTTP协议来实现的Q服务器通过在HTTP的响应头中加上一行特D的指示以提C浏览器按照指示生成相应的cookie。然而纯_的客户端脚本如JavaScript或者VBScript也可以生成cookie?br /><br />而cookie 的用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器查所有存储的cookieQ如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置Q则把该cookie附在h资源的HTTPh头上发送给服务器。意思是麦当劳的会员卡只能在麦当劳的店里出示Q如果某家分店还发行了自q会员卡,那么q这家店的时候除了要出示麦当劳的会员卡,q要出示q家店的会员卡?br /><br />cookie的内容主要包括:名字Q|q期旉Q\径和域?br />其中域可以指定某一个域比如.google.comQ相当于d招牌Q比如宝z公司,也可以指定一个域下的具体某台机器比如www.google.com或者froogle.google.comQ可以用飘柔来做比?br />路径是跟在域名后面的URL路径Q比?或?foo{等Q可以用某飘柔专柜做比?br />路径与域合在一起就构成了cookie的作用范围?br />如果不设|过期时_则表C个cookie的生命期为浏览器会话期间Q只要关闭浏览器H口Qcookie消׃。这U生命期为浏览器会话期的 cookie被称Z话cookie。会话cookie一般不存储在硬盘上而是保存在内存里Q当然这U行为ƈ不是规范规定的。如果设|了q期旉Q浏览器׃把cookie保存到硬盘上Q关闭后再次打开览器,q些cookie仍然有效直到过讑֮的过期时间?br /><br />存储在硬盘上的cookie 可以在不同的览器进E间׃nQ比如两个IEH口。而对于保存在内存里的cookieQ不同的览器有不同的处理方式。对于IEQ在一个打开的窗口上?Ctrl-NQ或者从文g菜单Q打开的窗口可以与原窗口共享,而用其他方式新开的IEq程则不能共享已l打开的窗口的内存cookieQ对?Mozilla Firefox0.8Q所有的q程和标{N都可以共享同Lcookie。一般来说是用javascript的window.open打开的窗口会与原H口׃n内存cookie。浏览器对于会话cookie的这U只认cookie不认人的处理方式l常l采用session机制的web应用E序开发者造成很大的困扰?br /><br />下面是一个goolge讄cookie的响应头的例?br />HTTP/1.1 302 Found<br />Location: http://www.google.com/intl/zh-CN/<br />Set-Cookie: PREF=ID=0565f77e132de138:NW=1:TM=1098082649:LM=1098082649:S=KaeaCFPo49RiA_d8; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com<br />Content-Type: text/html<br /><img height="293" alt="image002.jpg" src="http://www.aygfsteel.com/images/blogjava_net/esprit/image002.jpg" width="408" border="0" /><br />q是使用HTTPLookq个HTTP Sniffer软g来俘LHTTP通讯U录的一部分<br /><img height="344" alt="image004.jpg" src="http://www.aygfsteel.com/images/blogjava_net/esprit/image004.jpg" width="432" border="0" /><br />览器在再次讉Kgoolge的资源时自动向外发送cookie<br /><img height="305" alt="image006.jpg" src="http://www.aygfsteel.com/images/blogjava_net/esprit/image006.jpg" width="421" border="0" /><br />使用Firefox可以很容易的观察现有的cookie的?br />使用HTTPLook配合Firefox可以很容易的理解cookie的工作原理?br /><img height="248" alt="image008.jpg" src="http://www.aygfsteel.com/images/blogjava_net/esprit/image008.jpg" width="324" border="0" /><br />IE也可以设|在接受cookie前询?br /><img height="249" alt="image010.jpg" src="http://www.aygfsteel.com/images/blogjava_net/esprit/image010.jpg" width="239" border="0" /><br />q是一个询问接受cookie的对话框?br />四、理解session机制<br />session机制是一U服务器端的机制Q服务器使用一U类g散列表的l构Q也可能是使用散列表)来保存信息?br /><br />当程序需要ؓ某个客户端的h创徏一个session的时候,服务器首先检查这个客L的请求里是否已包含了一个session标识 - UCؓ session idQ如果已包含一个session id则说明以前已lؓ此客L创徏qsessionQ服务器按照session id把这?session索出来用(如果索不刎ͼ可能会新Z个)Q如果客Lh不包含session idQ则为此客户端创Z个sessionq且生成一个与此session相关联的session idQsession id的值应该是一个既不会重复Q又不容易被扑ֈ规律以仿造的字符Ԍq个 session id被在本ơ响应中q回l客L保存?br /><br />保存q个session id的方式可以采用cookieQ这样在交互q程中浏览器可以自动的按照规则把q个标识发挥l服务器。一般这个cookie的名字都是类gSEEESIONIDQ而。比如weblogic对于web应用E序生成的cookieQJSESSIONID= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764Q它的名字就?JSESSIONID?br /><br />׃cookie可以被h为的止Q必L其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一U技术叫做URL重写Q就是把session id直接附加在URL路径的后面,附加方式也有两种Q一U是作ؓURL路径的附加信息,表现形式为http://...../xxx;jsessionid= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764<br />另一U是作ؓ查询字符串附加在URL后面Q表现Ş式ؓhttp://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764<br />q两U方式对于用h说是没有区别的,只是服务器在解析的时候处理的方式不同Q采用第一U方式也有利于把session id的信息和正常E序参数区分开来?br />Z在整个交互过E中始终保持状态,必d每个客户端可能请求的路径后面都包含这个session id?br /><br />另一U技术叫做表单隐藏字Dc就是服务器会自动修改表单,d一个隐藏字D,以便在表单提交时能够把session id传递回服务器。比如下面的表单<br /><form name="testform" action="/xxx"><br /><input type="text"><br /></form><br />在被传递给客户端之前将被改写成<br /><form name="testform" action="/xxx"><br /><input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"><br /><input type="text"><br /></form><br />q种技术现在已较少应用Q笔者接触过的很古老的iPlanet6(SunONE应用服务器的前n)׃用了q种技术?br />实际上这U技术可以简单的用对action应用URL重写来代ѝ?br /><br />在谈论session机制的时候,常常听到q样一U误解“只要关闭浏览器Qsession消׃”。其实可以想象一下会员卡的例子,除非֮d对店家提出销卡,否则店家l对不会L删除֮的资料。对session来说也是一LQ除非程序通知服务器删除一个sessionQ否则服务器会一直保留,E序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会d在关闭之前通知服务器它要关闭Q因此服务器Ҏ不会有机会知道浏览器已经关闭Q之所以会有这U错觉,是大部分session机制都用会话cookie来保存session idQ而关闭浏览器后这?session id消׃Q再ơ连接服务器时也无法找到原来的session。如果服务器讄的cookie被保存到盘上,或者用某U手D|写浏览器发出的HTTPh_把原来的session id发送给服务器,则再ơ打开览器仍然能够找到原来的session?br /><br />恰恰是由于关闭浏览器不会Dsession被删除,q服务器ؓseesion讄了一个失效时_当距dL上一ơ用session的时间超q这个失效时间时Q服务器可以认为客L已经停止了活动,才会把session删除以节省存储空间?br /><br />五、理解javax.servlet.http.HttpSession<br />HttpSession是Javaq_对session机制的实现规范,因ؓ它仅仅是个接口,具体到每个web应用服务器的提供商,除了对规范支持之外,仍然会有一些规范里没有规定的细微差异。这里我们以BEA的Weblogic Server8.1作ؓ例子来演C?br /><br />首先QWeblogic Server提供了一pd的参数来控制它的HttpSession的实玎ͼ包括使用cookie的开关选项Q用URL重写的开关选项Qsession持久化的讄Qsession失效旉的设|,以及针对cookie的各U设|,比如讄cookie的名字、\径、域Q?cookie的生存时间等?br /><br />一般情况下Qsession都是存储在内存里Q当服务器进E被停止或者重启的时候,内存里的session也会被清I,如果讄了session的持久化Ҏ,服务器就会把session保存到硬盘上Q当服务器进E重新启动或q些信息能够被再次使用Q?Weblogic Server支持的持久性方式包括文件、数据库、客Lcookie保存和复制?br /><br />复制严格说来不算持久化保存,因ؓsession实际上还是保存在内存里,不过同样的信息被复制到各个cluster内的服务器进E中Q这样即使某个服务器q程停止工作也仍然可以从其他q程中取得session?br /><br />cookie生存旉的设|则会媄响浏览器生成的cookie是否是一个会话cookie。默认是使用会话cookie。有兴趣的可以用它来试验我们在第四节里提到的那个误解?br /><br />cookie的\径对于web应用E序来说是一个非帔R要的选项QWeblogic Server对这个选项的默认处理方式得它与其他服务器有明昄区别。后面我们会专题讨论?br /><br />关于session的设|参考[5] http://e-docs.bea.com/wls/docs70/webapp/weblogic_xml.html#1036869<br /><br />六、HttpSession常见问题<br />Q在本小节中session的含义ؓ⑤和⑥的混合Q?br /><br /><br />1、session在何时被创徏<br />一个常见的误解是以为session在有客户端访问时p创徏Q然而事实是直到某server端程序调?HttpServletRequest.getSession(true)q样的语句时才被创徏Q注意如果JSP没有昄的用?lt;% @page session="false"%> 关闭sessionQ则JSP文g在编译成Servlet时将会自动加上这样一条语?HttpSession session = HttpServletRequest.getSession(true);q也是JSP中隐含的 session对象的来历?br /><br />׃session会消耗内存资源,因此Q如果不打算使用sessionQ应该在所有的JSP中关闭它?br /><br />2、session何时被删?br />l合前面的讨论,session在下列情况下被删除a.E序调用HttpSession.invalidate();或b.距离上一ơ收到客L发送的session id旉间隔过了session的超时设|?或c.服务器进E被停止Q非持久sessionQ?br /><br />3、如何做到在览器关闭时删除session<br />严格的讲Q做不到q一炏V可以做一点努力的办法是在所有的客户端页面里使用javascript代码window.oncolose来监视浏览器的关闭动作,然后向服务器发送一个请求来删除session。但是对于浏览器崩溃或者强行杀死进E这些非常规手段仍然无能为力?br /><br />4、有个HttpSessionListener是怎么回事<br />你可以创Llistenerȝ控session的创建和销毁事Ӟ使得在发生这L事g时你可以做一些相应的工作。注意是session的创建和销毁动作触发listenerQ而不是相反。类似的与HttpSession有关的listenerq有 HttpSessionBindingListenerQHttpSessionActivationListener?HttpSessionAttributeListener?br /><br />5、存攑֜session中的对象必须是可序列化的?br />不是必需的。要求对象可序列化只是ؓ了session能够在集中被复制或者能够持久保存或者在必要时server能够暂时把session交换出内存。在 Weblogic Server的session中放|一个不可序列化的对象在控制C会收C个警告。我所用过的某个iPlanet版本如果 session中有不可序列化的对象Q在session销毁时会有一个ExceptionQ很奇怪?br /><br />6、如何才能正的应付客户端禁止cookie的可能?br />Ҏ有的URL使用URL重写Q包括超链接Qform的actionQ和重定向的URLQ具体做法参见[6]<br />http://e-docs.bea.com/wls/docs70/webapp/sessions.html#100770<br /><br />7、开两个览器窗口访问应用程序会使用同一个sessionq是不同的session<br />参见W三节对cookie的讨论,对session来说是只认id不认人,因此不同的浏览器Q不同的H口打开方式以及不同的cookie存储方式都会对这个问题的{案有媄响?br /><br />8、如何防止用h开两个览器窗口操作导致的session混ؕ<br />q个问题与防止表单多ơ提交是cM的,可以通过讄客户端的令牌来解冟뀂就是在服务器每ơ生成一个不同的idq回l客LQ同时保存在session里,客户端提交表单时必须把这个id也返回服务器Q程序首先比较返回的id与保存在session里的值是否一_如果不一致则说明本次操作已经被提交过了。可以参看《J2EE核心模式》关于表C层模式的部分。需要注意的是对于用javascript window.open打开的窗口,一般不讄q个idQ或者用单独的idQ以防主H口无法操作Q徏议不要再window.open打开的窗口里做修Ҏ作,q样可以不用设|?br /><br />9、ؓ什么在Weblogic Server中改变session的值后要重新调用一ơsession.setValue<br />做这个动作主要是Z在集环境中提示Weblogic Server session中的值发生了改变Q需要向其他服务器进E复制新的session倹{?br /><br />10、ؓ什么session不见?br />排除session正常失效的因素之外,服务器本w的可能性应该是微乎其微的,虽然W者在iPlanet6SP1加若q补丁的Solaris版本上倒也遇到q;览器插件的可能性次之,W者也遇到q?721插g造成的问题;理论上防火墙或者代理服务器在cookie处理上也有可能会出现问题?br />出现q一问题的大部分原因都是E序的错误,最常见的就是在一个应用程序中去访问另外一个应用程序。我们在下一节讨个问题?br /><br />七、跨应用E序的session׃n<br /><br />常常有这L情况Q一个大目被分割成若干项目开发,Z能够互不q扰Q要求每个小目作ؓ一个单独的web应用E序开发,可是C最后突然发现某几个项目之间需要共享一些信息,或者想使用session来实现SSO(single sign on)Q在session中保存login的用户信息,最自然的要求是应用E序间能够访问彼此的session?br /><br />然而按照Servlet规范Qsession的作用范围应该仅仅限于当前应用程序下Q不同的应用E序之间是不能够互相讉KҎ的session的。各个应用服务器从实际效果上都遵守了q一规范Q但是实现的l节却可能各有不同,因此解决跨应用程序session׃n的方法也各不相同?br /><br />首先来看一下Tomcat是如何实现web应用E序之间session的隔ȝQ从 Tomcat讄的cookie路径来看Q它对不同的应用E序讄的cookie路径是不同的Q这样不同的应用E序所用的session id是不同的Q因此即使在同一个浏览器H口里访问不同的应用E序Q发送给服务器的session id也可以是不同的?br /><br /><img height="219" alt="image012.jpg" src="http://www.aygfsteel.com/images/blogjava_net/esprit/image012.jpg" width="288" border="0" /><img height="215" alt="image014.jpg" src="http://www.aygfsteel.com/images/blogjava_net/esprit/image014.jpg" width="257" border="0" /><br />  <br /><br />Ҏq个Ҏ,我们可以推测Tomcat中session的内存结构大致如下?br /><br /><img height="278" alt="image016.jpg" src="http://www.aygfsteel.com/images/blogjava_net/esprit/image016.jpg" width="444" border="0" /><br /> <br /><br />W者以前用q的iPlanet也采用的是同L方式Q估计SunONE与iPlanet之间不会有太大的差别。对于这U方式的服务器,解决的思\很简单,实际实行h也不难。要么让所有的应用E序׃n一个session idQ要么让应用E序能够获得其他应用E序的session id?br /><br />iPlanet中有一U很单的Ҏ来实现共享一个session idQ那是把各个应用程序的cookie路径都设?Q实际上应该?NASAppQ对于应用程序来讲它的作用相当于根)?br /><session-info><br /><path>/NASApp</path><br /></session-info><br /><br />需要注意的是,操作׃n的session应该遵@一些编E约定,比如在session attribute名字的前面加上应用程序的前缀Q?setAttribute("name", "neo")变成setAttribute("app1.name", "neo")Q以防止命名I间冲突Q导致互相覆盖?br /><br /><br />在Tomcat中则没有q么方便的选择。在Tomcat版本3上,我们q可以有一些手D|׃nsession。对于版?以上的TomcatQ目前笔者尚未发现简单的办法。只能借助于第三方的力量,比如使用文g、数据库、JMS或者客LcookieQURL参数或者隐藏字D늭手段?br /><br />我们再看一下Weblogic Server是如何处理session的?br /><br /><br />  <img height="208" alt="image018.jpg" src="http://www.aygfsteel.com/images/blogjava_net/esprit/image018.jpg" width="288" border="0" /><img height="207" alt="image020.jpg" src="http://www.aygfsteel.com/images/blogjava_net/esprit/image020.jpg" width="269" border="0" /><br /><br />从截屏画面上可以看到Weblogic ServerҎ有的应用E序讄的cookie的\径都?Q这是不是意味着在Weblogic Server中默认的可以共享session了呢Q然而一个小实验卛_证明即不同的应用程序用的是同一个sessionQ各个应用程序仍然只能访问自己所讄的那些属性。这说明Weblogic Server中的session的内存结构可能如?br /><br /><img height="290" alt="image022.jpg" src="http://www.aygfsteel.com/images/blogjava_net/esprit/image022.jpg" width="420" border="0" /><br /> <br /><br />对于q样一U结构,?session机制本n上来解决session׃n的问题应该是不可能的了。除了借助于第三方的力量,比如使用文g、数据库、JMS或者客L cookieQURL参数或者隐藏字D늭手段Q还有一U较为方便的做法Q就是把一个应用程序的session攑ֈServletContext中,q样另外一个应用程序就可以从ServletContext中取得前一个应用程序的引用。示例代码如下,<br /><br />应用E序A<br />context.setAttribute("appA", session); <br /><br />应用E序B<br />contextA = context.getContext("/appA");<br />HttpSession sessionA = (HttpSession)contextA.getAttribute("appA"); <br /><br />值得注意的是q种用法不可ULQ因为根据ServletContext的JavaDocQ应用服务器可以处于安全的原因对于context.getContext("/appA");q回I|以上做法在Weblogic Server 8.1中通过?br /><br />那么Weblogic ServerZ么要把所有的应用E序的cookie路径都设?呢?原来是ؓ了SSOQ凡是共享这个session的应用程序都可以׃n认证的信息。一个简单的实验可以证明这一点,修改首先d的那个应用程序的描述Wweblogic.xmlQ把cookie路径修改?appA 讉K另外一个应用程序会重新要求dQ即使是反过来,先访问cookie路径?的应用程序,再访问修改过路径的这个,虽然不再提示dQ但是登录的用户信息也会丢失。注意做q个实验时认证方式应该用FORMQ因为浏览器和web服务器对basic认证方式有其他的处理方式Q第二次h的认证不是通过 session来实现的。具体请参看[7] secion 14.8 AuthorizationQ你可以修改所附的CZE序来做q些试验?br /><br />八、ȝ<br />session机制本nq不复杂Q然而其实现和配|上的灵zL却使得具体情况复杂多变。这也要求我们不能把仅仅某一ơ的l验或者某一个浏览器Q服务器的经验当作普遍适用的经验,而是始终需要具体情况具体分析?br /><br />关于作者:<br />郎云鹏(dev2dev ID: hippiewolfQ,软g工程师,从事J2EE开?br />电子邮gQlangyunpeng@yahoo.com.cn<br />地址Q大qY件园?1L技大厦A座大q博涵咨询服务有限公?br /><br />参考文档:<br />[1] Preliminary Specification http://wp.netscape.com/newsref/std/cookie_spec.html<br />[2] RFC2109 http://www.rfc-editor.org/rfc/rfc2109.txt<br />[3] RFC2965 http://www.rfc-editor.org/rfc/rfc2965.txt<br />[4] The Unofficial Cookie FAQ http://www.cookiecentral.com/faq/<br />[5] http://e-docs.bea.com/wls/docs70/webapp/weblogic_xml.html#1036869<br />[6] http://e-docs.bea.com/wls/docs70/webapp/sessions.html#100770<br />[7] RFC2616 <a >http://www.rfc-editor.org/rfc/rfc2616.txt</a><br /><img src ="http://www.aygfsteel.com/esprit/aggbug/35817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/esprit/" target="_blank">esprit</a> 2006-03-17 13:43 <a href="http://www.aygfsteel.com/esprit/archive/2006/03/17/35817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下EclipseQMyeclipse安装http://www.aygfsteel.com/esprit/archive/2006/01/19/28628.htmlespritespritThu, 19 Jan 2006 03:03:00 GMThttp://www.aygfsteel.com/esprit/archive/2006/01/19/28628.htmlhttp://www.aygfsteel.com/esprit/comments/28628.htmlhttp://www.aygfsteel.com/esprit/archive/2006/01/19/28628.html#Feedback2http://www.aygfsteel.com/esprit/comments/commentRss/28628.htmlhttp://www.aygfsteel.com/esprit/services/trackbacks/28628.html我这Ҏ用的是eclipse3.1 + Myeclipse4.0?BR>
下蝲必要的YӞ
      eclipse-SDK-3.1-linux-gtk.tar.gzQ?A >http://download.eclipse.org/eclipse/downloads/drops/R-3.1-200506271435/index.php
   EnterpriseWorkbenchInstaller_4.0GA_E3.1.binQ?A >http://downloads.myeclipseide.com/downloads/products/eworkbench/4.0GA/EnterpriseWorkbenchInstaller_4.0GA_E3.1.bin
   myeclipse_4_0_keygen.exeQ?A >http://www.matrix.org.cn/resource/upload/content/2005_09_02_094042_poSETmYBSq.rar

安装EclipseQ?BR>
   其实安装Eclipseq是蛮简单的Q我q边其解压?usr/java目录?BR>   [root@esprit java]tar -zxvf /PATH/eclipse-SDK-3.1-linux-gtk.tar.gz
   q里PATH是你存放eclipse-SDK-3.1-linux-gtk.tar.gz的目录,解压后,?usr/java目录下就有了eclipseq个目录
   接下来,我来为eclipse创徏一个图形界面快速启动项Q类gwindows下的桌面快捷方式Q,叛_囑Ş界面——〉选择"新徏启动?New Launcher)"——〉名UͼNameQ输入Eclipse——〉命令(CommandQ选择Eclipse解压目录/usr/java/eclipse——〉图标(IconQ可以选择Eclipse的图标——〉点ȝ定完成,然后你就可以双击囑Ş界面中的快速启动来启动你的eclipse了,当然也可以在shell下执行eclipse根目录下的执行文件来启动eclipseQ?BR>   eclipse启动后还需要一些必要的配置Q这里就不讲?

安装MyeclipseQ?BR>
   下面来安装MyeclipseQMyeclipse的安装跟windows下的安装q无多大区别
   shell下执?SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: SimSun; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">EnterpriseWorkbenchInstaller_4.0GA_E3.1.bin文gQ?BR>   [root@esprit java]# ./PATH/EnterpriseWorkbenchInstaller_4.0GA_E3.1.bin
   按回车后它会先检你pȝ中的环境Q待完毕,正常的话会出现Myeclipse安装画面Q这下来的操作跟windows下的操作是一LQ这里面会先让你选择eclipse的安装目录,我这里就?usr/java/eclipseQ然后再选择安装目录Q输?usr/java/myeclipseQ然后一路nextp?^_^
   安装完成后,启动eclipseQ点击菜单项Help——〉Software Updates——〉Manager Configuration
   在打开的窗口中可以看到已经有myeclipse在那里了
   接着我们来运行myeclipse_4_0_keygen.exeQ这个我是在windows下执行的Q得到注册码后,eclipse中选择Myeclipse——〉Update SubscriptionQ弹出的H口中输入刚才得到的注册码确定,完成注册Q?BR>
配置TomcatQ?BR>
   eclipse中选择window——〉preferencesQ在弹出的窗口选择Myeclipse——〉Application Servers——〉Tomcat5
接着在Tomcat serverq里选择"Enable",下面Tomcat Home Directory选择你tomcat安装的目录,然后右下角的Apply应用Q确定退出!Qlinuxq不太熟Q就不截图了 Q?BR>
到这里,Java 开发的环境是搭徏完了Q可以做你想做了Q?IMG height=19 src="http://www.aygfsteel.com/Emoticons/teeth_smile.gif" width=19 border=0>
   


esprit 2006-01-19 11:03 发表评论
]]>
Linux下TomcatQMysql安装http://www.aygfsteel.com/esprit/archive/2006/01/18/28536.htmlespritespritWed, 18 Jan 2006 09:35:00 GMThttp://www.aygfsteel.com/esprit/archive/2006/01/18/28536.htmlhttp://www.aygfsteel.com/esprit/comments/28536.htmlhttp://www.aygfsteel.com/esprit/archive/2006/01/18/28536.html#Feedback1http://www.aygfsteel.com/esprit/comments/commentRss/28536.htmlhttp://www.aygfsteel.com/esprit/services/trackbacks/28536.html
1.下蝲相关软gQ?BR>      jakarta-tomcat-5.0.28.tar.gz:http://mirror.vmmatrix.net/apache/tomcat/tomcat-5/v5.0.28/bin/jakarta-tomcat-5.0.28.tar.gz
   mysql-standard-5.0.18-linux-i686-glibc23.tar.gz:http://dev.mysql.com/downloads/mysql/5.0.html
   我下载的都是源码包,所以解压到指定目录卛_
2.先来安装mysqlQ?BR>   [root@esprit local]# groupadd mysql               #d一个用Lmysql
   [root@esprit local]# useradd -g mysql mysql      #d一个用户mysql到组mysql
   [root@esprit local]# tar -zxvf /PATH/mysql-standard-5.0.18-linux-i686-glibc23.tar.gz    #q里的PATH是你的mysql包放|的目录Q我q里解压?usr/local目录?BR>   [root@esprit local]# ln -s mysql-standard-5.0.18-linux-i686-glibc23 mysql      #创徏一个文仉?BR>   [root@esprit local]# cd mysql
   [root@esprit mysql]# scripts/mysql_install_db --user=mysql            #初始化数据库Q创建数据库和表Q?BR>   修改文g的所有者:   
   [root@esprit mysql]# chown -R root .
   [root@esprit mysql]# chown -R mysql data
   [root@esprit mysql]# chgrp -R mysql .
   接下来我们可以启动mysql了:
   [root@esprit mysql]# bin/mysqld_safe --user=mysql &
   启动后我们可以用mysql -u root -p dQ默认密码ؓI?BR>   可以通过mysqladmin -u root -p password 新密码来修改密码
   好了Qmysql的安装就到这里!
3.安装TomcatQ?BR>   [root@esprit java]# tar -zxvf /PATH/jakarta-tomcat-5.0.28.tar.gz      #同样q里的PATH是你tomcat包放|的目录Q我q里解压?usr/java目录?BR>   [root@esprit java]# ln -s jakarta-tomcat-5.0.28 tomcat                #同样创徏一个文仉?BR>   接下来配|CATALINA_HOME:   
   [root@esprit java]# vi /etc/profile
   在文件尾d 
   CATALINA_HOME=/usr/java/tomcat
   export CATALINA_HOME
   :wq 保存退?BR>   重新启动pȝ佉K|生?BR>   接着可以启动tomcat?nbsp;  
   [root@esprit tomcat]# bin/startup.sh
   正常的话会看到shell下输出:
   Using CATALINA_BASE:   /usr/java/tomcat
   Using CATALINA_HOME:   /usr/java/tomcat
   Using CATALINA_TMPDIR: /usr/java/tomcat/temp
   Using JAVA_HOME:       /usr/java/jdk1.5.0_06
   然后在浏览器中输入:http://localhost:8080 ׃出现tomcatƢ迎面 ^_^
   假如发生了错误你可以察看/logs/catalina.outq个文gQ?BR>4.理tomcat
   [root@esprit tomcat]# vi conf/tomcat-users.xml
   ?lt;tomcat-users>?lt;/tomcat-users>之间加入Q?BR>   <user username="admin" password="admin" roles="admin,manager"/>
   q样览器中输入:http://localhost:8080/admin d后就可以来管理了
   输入http://localhost:8080/manager/html 来管理你的工E项目了


好了Q先说这么多了!嘿嘿—?BR>
   


esprit 2006-01-18 17:35 发表评论
]]>
Linux下jdk的安?/title><link>http://www.aygfsteel.com/esprit/archive/2006/01/18/28489.html</link><dc:creator>esprit</dc:creator><author>esprit</author><pubDate>Wed, 18 Jan 2006 07:05:00 GMT</pubDate><guid>http://www.aygfsteel.com/esprit/archive/2006/01/18/28489.html</guid><wfw:comment>http://www.aygfsteel.com/esprit/comments/28489.html</wfw:comment><comments>http://www.aygfsteel.com/esprit/archive/2006/01/18/28489.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/esprit/comments/commentRss/28489.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/esprit/services/trackbacks/28489.html</trackback:ping><description><![CDATA[ <p>q两天闲着没事Q就用VMware装了个LinuxQRedHat9.0Q玩玩,现记录linux下java环境的配|?br /><br />1.下蝲Q?font face="Simsun"><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: SimSun; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">jdk-1_5_0_06-linux-i586-rpm.bin<br />   地址Q?a >http://java.sun.com/j2se/1.5.0/download.jsp</a><br /></span></font><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: SimSun; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">2.l文件加上可执行权限<br />   [root@esprit java]# chmod +x <span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: SimSun; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">jdk-1_5_0_06-linux-i586-rpm.bin<br />3.执行<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: SimSun; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">jdk-1_5_0_06-linux-i586-rpm.bin<br /></span></span>   [root@esprit java]# ./<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: SimSun; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">jdk-1_5_0_06-linux-i586-rpm.bin<br />   执行后生?span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: SimSun; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">jdk-1_5_0_06-linux-i586-rpm<br />4.安装<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: SimSun; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">jdk-1_5_0_06-linux-i586-rpm<br /></span></span></span>   [root@esprit java]# rpm -ivh <span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: SimSun; mso-fareast-language: JA; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">jdk-1_5_0_06-linux-i586-rpm</span><br style="mso-special-character: line-break" />   q里我jdk安装?usr/java目录?br />5.配置环境变量<br />   环境变量配置有三U方法(分别是:修改/etc/profile文gQ修改用L录下?bashrc文gQ直接在shell下修改)<br />q里我只讲我用到的修?etc/profile文g<br />   [root@esprit java]# vi /etc/profile<br />   打开文g后,?I 键,在文件后dQ?br /></span></p> <p> </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> <span style="COLOR: #000000">JAVA_HOME</span> <span style="COLOR: #000000">=/</span> <span style="COLOR: #000000">usr</span> <span style="COLOR: #000000">/</span> <span style="COLOR: #000000">java</span> <span style="COLOR: #000000">/</span> <span style="COLOR: #000000">jdk1.</span> <span style="COLOR: #000000">5</span> <span style="COLOR: #000000">.0_06<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />PATH</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">$JAVA_HOME</span> <span style="COLOR: #000000">/</span> <span style="COLOR: #000000">bin:$PATH<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />CLASSPATH</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">.:$JAVA_HOME</span> <span style="COLOR: #000000">/</span> <span style="COLOR: #000000">lib</span> <span style="COLOR: #000000">/</span> <span style="COLOR: #000000">tools.jar:$JAVA_HOME</span> <span style="COLOR: #000000">/</span> <span style="COLOR: #000000">lib</span> <span style="COLOR: #000000">/</span> <span style="COLOR: #000000">dt.jar<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />export JAVA_HOME PATH CLASSPATH<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span> </div> <p>   按esc ?br />   输入:wq 保存退出?br />   重新d<br />6.试配置环境<br />   写个单的HelloWorld来测试一?br />   [root@esprit java]# vi HelloWorld.java<br />   文g中输入:   </p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <img id="Codehighlighter1_23_125_Open_Image" onclick="this.style.display='none'; Codehighlighter1_23_125_Open_Text.style.display='none'; Codehighlighter1_23_125_Closed_Image.style.display='inline'; Codehighlighter1_23_125_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> <img id="Codehighlighter1_23_125_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_23_125_Closed_Text.style.display='none'; Codehighlighter1_23_125_Open_Image.style.display='inline'; Codehighlighter1_23_125_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000"> HelloWorld</span> <span id="Codehighlighter1_23_125_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.aygfsteel.com/images/dot.gif" /> </span> <span id="Codehighlighter1_23_125_Open_Text"> <span style="COLOR: #000000">{<br /><img id="Codehighlighter1_66_123_Open_Image" onclick="this.style.display='none'; Codehighlighter1_66_123_Open_Text.style.display='none'; Codehighlighter1_66_123_Closed_Image.style.display='inline'; Codehighlighter1_66_123_Closed_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_66_123_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_66_123_Closed_Text.style.display='none'; Codehighlighter1_66_123_Open_Image.style.display='inline'; Codehighlighter1_66_123_Open_Text.style.display='inline';" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />   </span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">static</span> <span style="COLOR: #000000"> </span> <span style="COLOR: #0000ff">void</span> <span style="COLOR: #000000"> main(String args[])</span> <span id="Codehighlighter1_66_123_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"> <img src="http://www.aygfsteel.com/images/dot.gif" /> </span> <span id="Codehighlighter1_66_123_Open_Text"> <span style="COLOR: #000000">{<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />      System.out.println(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">Hello World in Linux!!</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">);<br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   }</span> </span> <span style="COLOR: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span> </span> <span style="COLOR: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /> </span> </div> <p>   :wq 保存退?br />   [root@esprit java]# javac HelloWorld.java<br />   没有错误Q接着<br />   [root@esprit java]# java HelloWorld<br />   shell下输?<font size="2">Hello World in Linux!!<br /></font>   成功了!^_^<br />   </p> <img src ="http://www.aygfsteel.com/esprit/aggbug/28489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/esprit/" target="_blank">esprit</a> 2006-01-18 15:05 <a href="http://www.aygfsteel.com/esprit/archive/2006/01/18/28489.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>