﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-Rukas - Oh, My Blog!-随笔分类-web技术</title><link>http://www.cnitblog.com/rukas/category/1697.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 29 Sep 2011 04:16:47 GMT</lastBuildDate><pubDate>Thu, 29 Sep 2011 04:16:47 GMT</pubDate><ttl>60</ttl><item><title>Web 框架比较</title><link>http://www.cnitblog.com/rukas/archive/2006/01/05/6022.html</link><dc:creator>Rukas - Oh, My Blog!</dc:creator><author>Rukas - Oh, My Blog!</author><pubDate>Thu, 05 Jan 2006 07:02:00 GMT</pubDate><guid>http://www.cnitblog.com/rukas/archive/2006/01/05/6022.html</guid><wfw:comment>http://www.cnitblog.com/rukas/comments/6022.html</wfw:comment><comments>http://www.cnitblog.com/rukas/archive/2006/01/05/6022.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/rukas/comments/commentRss/6022.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/rukas/services/trackbacks/6022.html</trackback:ping><description><![CDATA[<A href="http://www.ywsy.net/muyu/archives/000155.html">http://www.ywsy.net/muyu/archives/000155.html</A><BR><BR>
<DIV align=left>
<P>Web框架比较：Struts、Spring MVC、WebWork、Tapestry和JSF（by Matt Raible）</P>
<P>　　Matt Raible，J2EE5.0专家组成员、开源项目Roller Weglogger、XDoclet、Struts Menu，DisplayTag，AppFuse提交者。</P>
<P>各自优缺点： <BR>1、 Struts<BR>优点：<BR>　　业界“标准”（很多成功案例），学习资源丰富，HTML标签非常优秀<BR>缺点：<BR>　　ActionForms使用不便、无法进行单元测试（StrutsTestCase只能用于集成）<BR>2、 Spring MVC<BR>优点：<BR>　　Lifecyle for overriding binding, validation, etc.；易于同其它View框架（Titles等）无缝集成，采用IOC便于测试<BR>缺点：<BR>　　使用人数少、jsp中要写很多代码、控制器过于灵活，缺少一个公用控制器<BR>3、 WebWork<BR>优点：<BR>　　结构简单易于扩展、标签库易于定制、拦截器非常出色<BR>缺点：<BR>　　文档示例很少、客户端验证技术不成熟 <BR>4、 Tapestry <BR>优点：<BR>　　很好用只要你能学会、Html模板、Healthy and smart user community <BR>缺点：<BR>　　文档太概念，不利于编程，学习曲线太陡，不能测试 <BR>5、 JSF <BR>优点：<BR>　　J2EE标准、易于开发、丰富的导航框架<BR>缺点：<BR>　　JSP标签差、技术不成熟、No single source for implementation </P>
<P>如果排名的话：<BR>第一Struts <BR>由于许多问题已经被解决，使用它开发容易。HTML标签是它最优秀的地方。<BR>第二 Spring MVC<BR>它也不错，但缺乏很好的表单标签。<BR>第三 WebWork 客户端验证技术很差。<BR>第四 Tapestry Matt Raible目前还没学会怎么使用它。<BR>第五 JSF </P>
<P>需要多听听开发人员的意见框架选择：<BR>　　项目时间紧迫且没有太高要求，Struts是首选；对于大规模的企业级项目，考虑Tapestry，因为它的可重用组件；如果你是一名开源项目的开发人员，考虑WebWork，因为它要求你对它本身的运行机制要清楚（强迫你分析它的源代码） <BR><BR><BR></P></DIV><img src ="http://www.cnitblog.com/rukas/aggbug/6022.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/rukas/" target="_blank">Rukas - Oh, My Blog!</a> 2006-01-05 15:02 <a href="http://www.cnitblog.com/rukas/archive/2006/01/05/6022.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CSS 结构和规则</title><link>http://www.cnitblog.com/rukas/archive/2005/12/25/5766.html</link><dc:creator>Rukas - Oh, My Blog!</dc:creator><author>Rukas - Oh, My Blog!</author><pubDate>Sun, 25 Dec 2005 04:39:00 GMT</pubDate><guid>http://www.cnitblog.com/rukas/archive/2005/12/25/5766.html</guid><wfw:comment>http://www.cnitblog.com/rukas/comments/5766.html</wfw:comment><comments>http://www.cnitblog.com/rukas/archive/2005/12/25/5766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/rukas/comments/commentRss/5766.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/rukas/services/trackbacks/5766.html</trackback:ping><description><![CDATA[<A href="http://www.htmlhelp.com/zh/reference/css/structure.html">http://www.htmlhelp.com/zh/reference/css/structure.html</A><BR><BR>
<H2><A name=syntax>基本语法</A></H2>
<H3>规则</H3>
<H4>选择符</H4>
<P>任何HTML元素都可以是一个CSS1的选择符。<DFN>选择符</DFN>仅仅是指向特别样式的元素。例如，</P><PRE><CODE class=css>P { text-indent: 3em }</CODE></PRE>
<P>当中的选择符是<STRONG class=css>P</STRONG>。</P>
<H5>类选择符</H5>
<P>单一个选择符能有不同的<DFN>CLASS</DFN>(类)，因而允许同一元素有不同样式。例如，一个网页制作者也许希望视其语言而定，用不同的颜色显示代码 :</P><PRE><CODE class=css>code.html { color: #191970 }
code.css  { color: #4b0082 }</CODE></PRE>
<P>以上的例子建立了两个类，<STRONG class=css>css</STRONG>和<STRONG class=css>html</STRONG>，供HTML的<STRONG class=html>CODE</STRONG>元素使用。<STRONG class=html><A href="http://www.htmlhelp.com/zh/reference/css/style-html.html#class">CLASS</A></STRONG>属性是用于在HTML中以指明元素的类，例如，</P><PRE><CODE class=html>&lt;P CLASS=warning&gt;每个选择符只允许有一个类。
例如，code.html.proprietary是无效的。&lt;/p&gt;</CODE></PRE>
<P>类的声明也可以无须相关的元素:</P><PRE><CODE class=css>.note { font-size: small }</CODE></PRE>
<P>在这个例子，名为<STRONG class=css>note</STRONG>的类可以被用于任何元素。</P>
<P class=note>一个良好的习惯是在命名类的时候，根据它们的<EM>功能</EM>而不是根据它们的<EM>外观</EM>。上述例子中的<STRONG class=css>note</STRONG>类也可以命名为<STRONG class=css>small</STRONG>，但如果网页制作者决定改变这个类的样式，使得它不再是小字体的话，那么这个名字就变得毫无意义了。</P>
<H5>ID 选择符</H5>
<P><DFN>ID 选择符</DFN>个别地定义每个元素的成分。这种选择符应该尽量少用，因为他具有一定的局限。一个ID选择符的指定要有指示符"#"在名字前面。例如，ID选择符可以指定如下:</P><PRE><CODE class=css>#svp94O { text-indent: 3em }</CODE></PRE>
<P>这点可以参考HTML中的<STRONG class=html><A href="http://www.htmlhelp.com/zh/reference/css/style-html.html#id">ID</A></STRONG>属性:</P><PRE><CODE class=html>&lt;P ID=svp94O&gt;文本缩进3em&lt;/P&gt;</CODE></PRE>
<H5>关联选择符</H5>
<P><DFN>关联选择符</DFN>只不过是一个用空格隔开的两个或更多的单一选择符组成的字符串。这些选择符可以指定一般属性，而且因为层叠顺序的规则，它们的优先权比单一的选择符大。例如， 以下的上下文选择符</P><PRE><CODE class=css>P EM { background: yellow }</CODE></PRE>
<P>是<STRONG class=css>P EM</STRONG>。这个值表示段落中的强调文本会是黄色背景；而标题的强调文本则不受影响。</P>
<H4>声明</H4>
<H5>属性</H5>
<P>一个<DFN>属性</DFN>被指定到选择符是为了使用它的样式。<A href="http://www.htmlhelp.com/zh/reference/css/properties.html">属性</A>的例子包括<STRONG class=css><A href="http://www.htmlhelp.com/zh/reference/css/color-background/color.html">颜色</A></STRONG>、<STRONG class=css><A href="http://www.htmlhelp.com/zh/reference/css/box/margin.html">边界</A></STRONG>和<STRONG class=css><A href="http://www.htmlhelp.com/zh/reference/css/font/font.html">字体</A>。</STRONG></P>
<H5>值</H5>
<P>声明的<DFN>值</DFN>是一个属性接受的指定。例如，属性<STRONG class=css>颜色</STRONG>能接受值<STRONG class=css>red。</STRONG></P>
<H3>组合</H3>
<P>为了减少样式表的重复声明，<DFN>组合</DFN>的选择符声明是允许的。例如，文档中所有的标题可以通过组合给出相同的声明:</P><PRE><CODE class=css>H1, H2, H3, H4, H5, H6 {
  color: red;
  font-family: sans-serif }</CODE></PRE>
<H3>继承</H3>
<P>实际上，所有在选择符中嵌套的选择符都会继承外层选择符指定的属性值，除非另外更改。例如，一个<STRONG class=html>BODY</STRONG>定义了的<STRONG class=css><A href="http://www.htmlhelp.com/zh/reference/css/color-background/color.html">颜色</A></STRONG>值也会应用到段落的文本中。</P>
<P>有些情况是内部选择符不继承周围的选择符的值，但理论上这些都是特殊的。例如，<A href="http://www.htmlhelp.com/zh/reference/css/box/margin-top.html"><STRONG class=css>上边界</STRONG></A>属性是不会继承的；直觉上，一个段落不会有同文档<STRONG class=html>BODY</STRONG>一样的上边界值。</P>
<H3>注解</H3>
<P>样式表里面的注解使用C语言编程中一样的约定方法去指定。CSS1注解的例子如以下格式:</P><PRE><CODE class=css>/* COMMENTS CANNOT BE NESTED */</CODE></PRE>
<H2><A name=pseudo>伪类和伪元素</A></H2>
<P><DFN>伪类</DFN>和<DFN>伪元素</DFN>是特殊的类和元素，能自动地被支持CSS的浏览器所识别。伪类区别开不同种类的元素(<I>例如</I>，visited links(已访问的连接)和active links(可激活连接)描述了两个定位锚(anchors)的类型)。伪元素指元素的一部分，例如段落的第一个字母。</P>
<P>伪类或伪元素规则的形式如</P><PRE><CODE class=css>选择符:伪类 { 属性: 值 }</CODE></PRE>
<P>或</P><PRE><CODE class=css>选择符:伪元素 { 属性: 值 }</CODE></PRE>
<P>伪类和伪元素不应用HTML的<STRONG class=html><A href="http://www.htmlhelp.com/zh/reference/css/style-html.html#class">CLASS</A></STRONG>属性来指定。一般的类可以与伪类和伪元素一起使用，如下:</P><PRE><CODE class=css>选择符.类: 伪类 { 属性: 值 }</CODE></PRE>
<P>或</P><PRE><CODE class=css>选择符.类: 伪元素 { 属性: 值 }</CODE></PRE>
<H3>定位锚伪类</H3>
<P>伪类可以指定<STRONG class=html>A</STRONG>元素以不同的方式显示连接(links)、已访问连接(visited links)和可激活连接(active links)。定位锚元素可给出伪类<STRONG class=css>link</STRONG>、<STRONG class=css>visited</STRONG>或<STRONG class=css>active</STRONG>。一个已访问连接可以定义为不同颜色的显示，甚至不同字体大小和风格。</P>
<P>一个有趣的效果是使当前(或“可激活”)连接以不同颜色、更大的字体显示。然后，当网页的已访问连接被重选时，又以不同颜色、更小字体显示。这个样式表的示例如下:</P><PRE><CODE class=css>A:link    { color: red }
A:active  { color: blue; font-size: 125% }
A:visited { color: green; font-size: 85% }</CODE></PRE>
<H3>首行伪元素</H3>
<P>通常在报纸上的文章，例如<CITE lang=en>Wall Street Journal</CITE>中的，文本的首行都会以粗印体而且全部大写地展示。CSS1包括了这个功能，将其作为一个伪元素。<STRONG class=css>首行</STRONG>伪元素可以用于任何<A href="http://www.htmlhelp.com/reference/html40/block.html" hreflang=en charset=ISO-8859-1>块级元素</A>(例如<STRONG class=html>P</STRONG>、<STRONG class=html>H1</STRONG>等等)。以下是一个<STRONG class=css>首行</STRONG>伪元素的例子:</P><PRE><CODE class=css>P:first-line {
  font-variant: small-caps;
  font-weight: bold }</CODE></PRE>
<H3>首个字母伪元素</H3>
<P><STRONG class=css>首个字母</STRONG>伪元素用于加大(drop caps)和其他效果。含有已指定值选择符的文本的首个字母会按照指定的值展示。一个<STRONG class=css>首个字母</STRONG>伪元素可以用于任何<A href="http://www.htmlhelp.com/reference/html40/block.html" hreflang=en charset=ISO-8859-1>块级元素</A>。例如:</P><PRE><CODE class=css>P:first-letter { font-size: 300%; float: left }</CODE></PRE>
<P>会比普通字体加大三倍。</P>
<H2><A name=cascade>层叠顺序</A></H2>
<P>当使用了多个样式表，样式表需要争夺特定选择符的控制权。在这些情况下，总会有样式表的规则能获得控制权。以下的特性将决定互相对立的样式表的结果。 
<OL>
<LI><STRONG>! important</STRONG> 
<P>规则可以用指定的<STRONG class=css>!&nbsp;important</STRONG> 特指为重要的。一个特指为重要的样式会凌驾于与之对立的其它相同权重的样式。同样地，当网页制作者和读者都指定了重要规则时，网页制作者的规则会超越读者的。以下是<STRONG class=css>!&nbsp;important</STRONG> 声明的例子:</P><PRE><CODE class=css>BODY { background: url(bar.gif) white;
       background-repeat: repeat-x ! important }</CODE></PRE>
<LI><STRONG>Origin of Rules (Author's vs. Reader's)</STRONG> 
<P>正如以前所提及的，网页制作者和读者都有能力去指定样式表。当两者的规则发生冲突，网页制作者的规则会凌驾于读者的其它相同权重的规则。而网页制作者和读者的样式表都超越浏览器的内置样式表。</P>
<P>网页制作者应该小心地使用<STRONG class=css>!&nbsp;important</STRONG> 规则，因为它们会超越用户任何的<STRONG class=css>!&nbsp;important</STRONG> 规则。例如，一个用户由于视觉关系，会要求大字体或指定的颜色，而且这样的用户会有可能声明确定的样式规则为<STRONG class=css>!&nbsp;important</STRONG>，因为这些样式对于用户阅读网页是极为重要的。任何的<STRONG class=css>!&nbsp;important</STRONG> 规则会超越一般的规则，所以建议网页制作者使用一般的规则以确保有特殊样式需要的用户能阅读网页。</P>
<LI><STRONG>选择符规则: 计算特性</STRONG> 
<P>基于它们的特性级别，样式表也可以超越与之冲突的样式表，一个较高特性的样式永远都凌驾于一个较低特性的样式。这只不过是计算选择符的指定个数的一个统计游戏。 
<OL type=a>
<LI>统计选择符中的<STRONG class=html>ID</STRONG>属性个数。 
<LI>统计选择符中的<STRONG class=html>CLASS</STRONG>属性个数。 
<LI>统计选择符中的HTML标记名格式。 </LI></OL>
<P>最后，按正确的顺序写出三个数字，不要加空格或逗号，得到一个三位数。( 注意，你需要将数字转换成一个以三个数字结尾的更大的数。)相应于选择符的最终数字列表可以很容易确定较高数字特性凌驾于较低数字的。以下是一个按特性分类的选择符的列表:</P><PRE><CODE class=css>#id1         {xxx} /* a=1 b=0 c=0 --&gt; 特性 = 100 */
UL UL LI.red {xxx} /* a=0 b=1 c=3 --&gt; 特性 = 013 */
LI.red       {xxx} /* a=0 b=1 c=1 --&gt; 特性 = 011 */
LI           {xxx} /* a=0 b=0 c=1 --&gt; 特性 = 001 */</CODE></PRE>
<LI><STRONG>特性的顺序</STRONG> 
<P>为了方便使用，当两个规则具同样权重时，取后面的那个。</P></LI></OL><img src ="http://www.cnitblog.com/rukas/aggbug/5766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/rukas/" target="_blank">Rukas - Oh, My Blog!</a> 2005-12-25 12:39 <a href="http://www.cnitblog.com/rukas/archive/2005/12/25/5766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>