关于作者

姓名:韩

性别:男

出生日期:1981-07-20

地区:辽宁-沈阳

联系电话:

QQ:18578654婚否:保密
用户名:0101121501
笔名:0101121501
地区: 辽宁-沈阳
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

快速通道

在线留言



访问统计:
文章个数:36
评论个数:9
留言条数:8




Powered by BlogDriver 2.1

一杯咖啡 一支香烟

 

播下一种思想,收获一种行为;播下一种行为,收获一种习惯; 播下一种习惯,收获一种性格;播下一种性格,收获一种命运。

文章

35岁以前成功的12条黄金法则  (作者置顶)
摘要:成功 查看全文

- 作者: 0101121501 2005年06月29日, 星期三 16:51  回复(2) |  引用(0) 加入博采

61条面向对象设计的经验原则  (作者置顶)
摘要:面向对象设计的经验原则 查看全文

- 作者: 0101121501 2005年06月29日, 星期三 16:50  回复(1) |  引用(0) 加入博采

[转帖]Log4J学习笔记
摘要:Log4J学习笔记 查看全文

- 作者: 0101121501 2005年10月24日, 星期一 19:17  回复(0) |  引用(0) 加入博采

[转帖]探索Google排名新算法
摘要:Google排名新算法 查看全文

- 作者: 0101121501 2005年09月19日, 星期一 09:18  回复(0) |  引用(0) 加入博采

[转帖]Web 的未来XHTML 2.0

Nicholas Chase
总裁, Chase and Chase, Inc.
2003 年 1 月

多年以来,HTML 只是在不断变大,却从未变小,因为新版本必须维护向后兼容性。这一情况将得以改变。XHTML 2.0 的第一个工作草案于 2002 年 8 月 5 日发布,一大新闻就是取消了向后兼容性;该语言终于得以继续发展。那么,作为一名开发人员您将得到什么回报呢?健壮的表单和事件表现如何呢?它们是研究不需要大量 JavaScript 的框架以及甚至层次结构菜单的更佳方法。

本文概述了 XHTML 2.0 中的新增功能以及将来可能会如何使用它。读者应该熟悉 HTML 和/或 XHTML 1.0。熟悉级联样式表(Cascading Style Sheet (CSS))是有帮助的,但不是必需的。

告别向后兼容性,引入结构
当万维网联盟(World Wide Web Consortium (W3C))于 2002 年 8 月 5 日发布 XHTML 2.0 的第一个工作草案时, 最让人吃惊的是:与其先前的版本不同,它不是向后兼容的。 对于先前的发行版,如从 HTML 4.01 转到 XHTML 1.0 以及后来从 XHTML 1.0 到 XTHML 1.1,变化都是添加一些内容; 可以读取 XHTML 1.0(过渡的)文档的浏览器也可以理解 HTML 4.01 文档。而 XHTML 2.0 不是那样的。

如果您在两年前宣布我们今天将研究不带 img 标记或 bold 标记的 HTML 版本,那么大多数 Web 开发人员都会用怀疑的眼光看着您。然而,现在就是这样。除了彻底替换表单和框架外,XHTML 2.0 还除去了 biimg 标记(以及 bigsmalltt ), 甚至不赞成使用 br ,以准备从将来的发行版中除去它。但这是为什么呢?

原因在于大多数标记都是 表示性的 。它们的唯一目的就是给予浏览器指令,规定有关其内容应该如何显示, 但却完全未提供有关其内容是什么的信息。例如,请考虑下面两个句子:



Presentational elements are, <i>for the most part</i>, <b>gone</b>.




Presentational elements are, <em>for the most part</em>, <strong>gone</strong>.

在没有样式表的情况下,这两个句子在浏览器中看起来是一样的,但只有第二个句子提供了有关原因的信息。 事实上,从一开始 em (强调)和 strong 标记就出现在 HTML 中了, 但多年以来作者们基本上已经忽略了它们,而专注于表现形式,这是以牺牲内容为代价的。

但这并不意味着只要您想使某些内容变成粗体或斜体,就应该将它们硬塞进这两个标记中。 相反,除去表示性元素的整个目的是设法完成 CSS 的发明者的初衷, 即应该根据内容所表示的东西来标记内容,而样式表应该用于美化内容。例如, 清单 1使用类别(class)来指出内容类型。

清单 1. 使用类别指定内容类型


<html>

<head><title>Employee Notice</title>

<style type="text/css">

.duedate { color: red;

font-weight: bold; }

.holiday { color: green;

font-style: italic }

</style>

</head>

<body>

<h1>Notice</h1>

<p>Employees should take note of the following important dates:</p>

<ul>

<li class="duedate">8/28/2002 (Progress reports due)</li>

<li class="holiday">9/1/2002 (Labor Day)</li>

<li class="duedate">10/28/2002 (Final reports due)</li>

</ul>

</body>

</html>

在该页面中,日期类型可以由内容本身来确认,浏览器可以使用类别信息来决定如何为其设计样式。

用这种观点研究它:断开( br )标记的目的无外乎是为了显示,因为实际上它并无任何内容。XHTML 2.0 不赞成使用 br 标记,而提倡使用 line 标记。 line 标记指定一种特殊的内容: 通常是以后跟换行和回车这种方式呈现的一行文本或其它内容。例如,文本:



<p>

public class HelloWorld {<br />

public static void main (String[] args){<br />

System.out.println("Hello world!");<br />

}<br />

}

</p>

变成



<p>

<line>public class HelloWorld {</line>

<line>public static void main (String[] args){ </line>

<line>System.out.println("Hello world!"); </line>

<line>}</line>

<line>}</line>

</p>

这样,文档就有了一个表示行的实际对象,同样,段( p )标记表示一段内容。

为什么所有这些都很重要呢?因为 Web 不仅正日益成为人与人之间通信的场所, 而且还日益成为软件应用程序(如服务器和搜索引擎索引器)之间进行通信的场所。 而且,每个人(或者说几乎每个人)都使用相同浏览器的时代已经一去不复返了。 开发人员正不断为不同设备(如 PDA 和移动电话)重新设计内容。语音触发的(voice-activated)系统已经离我们不远了。内容的结构意义正变得几乎与内容本身一样重要。


因此,XHTML 2.0 添加了节(section)和标题(heading)。HTML 一直都包含编号的标题 ― h1h6 , 直到 2002 年 8 月 5 日的工作草案,还未将其撤消,但这只是一个时间问题。 而 XHTML 2.0 使用通用标题和节。例如,可以嵌套节,从而赋予标题含义。 以前用编号标题呈现的文档( 清单 2):

清单 2. 文档中的编号标题




<html>

<head><title>Adding sections</title></head>

<body>

<h1>The Web's future: XHTML 2.0</h1>

<p>by Nicholas Chase</p>

<h2>Good-bye backward compatibility, hello structure</h2>

<p>Why backward compatibility is over.</p>

<h3>Presentation versus Structure</h3>

<p>Using style sheets rather than presentational elements.</p>

<h3>Lines</h3>

<p>Line breaks are deprecated.</p>

<h2>Sections</h2>

<p>Creating more reasonable sections.</p>

<h2>Navigation lists and menus</h2>

<p>Hierarchical menus.</p>

<h2>Links, links, everywhere</h2>

<p>Adding links.</p>

</body>

</html>

可以用通用标题和节替换( 清单 3):

清单 3. 通用标题和节



<html>

<head><title>Adding sections</title></head>

<body>

<section>

<h>The Web's future: XHTML 2.0</h>

<p>by Nicholas Chase</p>

<section>

<h>Good-bye backward compatibility, hello structure</h>

<p>Why backward compatibility is over.</p>

<section>

<h>Presentation vs. Structure</h>

<p>Using style sheets rather than presentational elements.</p>

</section>

<section>

<h>Lines</h>

<p>Line breaks are deprecated.</p>

</section>

</section>

<section>

<h>Sections</h>

<p>Creating more reasonable sections.</p>

</section>

<section>

<h>Navigation lists and menus</h>

<p>Hierarchical menus.</p>

</section>

<section>

<h>Links, links, everywhere</h>

<p>Adding links.</p>

</section>

</section>

</body>

</html>

这种结构有两个优点。首先,应用程序(如搜索引擎 crawler)能够更容易地了解内容的相对重要性, 其次,节是自包含的。在 HTML 中,节以其标题开始,所以在标题的前面不会出现内容(如介绍性内容)。 section 元素取消了这种约束,因为其内部的任何内容都是节的一部分。

导航列表和菜单
增加了一个会让 Web 开发人员大大受益的结构,那就是导航列表。由 nl 标记指定的导航列表的工作原理与其“表亲”有序列表( ol )和无序列表( ul )非常相似,但有一点不一样:导航列表的项仅在列表激活时才出现。 因此,导航列表与层次结构的弹出菜单十分相似,这种弹出菜单很受欢迎,因为它们提供了许多导航信息,而且不会占据太多的屏幕空间。 例如,肥皂剧站点可能有以下菜单( 清单 4):

清单 4. 使用导航列表


<nl>

<name>Character Options</name>

<li href="/stay.html">Stay</li>

<nl>

<name>Leave</name>

<li href="/newjob.html">Job transfer</li>

<li href="/divorce.html">Divorce</li>

<li href="fataldisease.html">Fatal disease</li>

</nl>

<li href="/backburner.html">Back Burner</li>

</nl>

当用户激活名称( Character Options )时,出现列表项。 关于当用户激活主列表时子列表(如 Leave 菜单)是否会出现,还是用户必须激活子列表项本身以使其出现,工作草案并未说清楚。 最终作者可能通过样式或事件来控制这一行为。在任何情况下,当输入焦点从主元素移开时,列表项就会消失。

链接,链接无处不在
您可能已经注意到:即使打算将前一个示例作为菜单, 但它没有锚( a )标记。而 href 属性已经被正确放在了 li 元素上。这不是导航列表的特性,而是 XHTML 2.0 的新特性。与超文本相关的属性(如 hreftargetaccesskey )现在是公共属性集合(Common Attribute Collection)的一部分,它包括核心属性( classidtitle )、国际化属性( xml:lang , 它替换了 XHTML 1.1 中的 lang )和事件属性,事件属性来自 XML Events 建议书,正如您将在下面看到的。

这意味只要将 href 属性添加到任何元素,就可以将它转换成链接,而不一定要用锚标记包围单个元素。

这是否表示经过四年的努力,XLink 已经被 XHTML 2.0 采用了吗?总而言之,没有。 事实上,XLink 和 XHTML 2.0 中规定的链接之间的差异是那些正从事各自建议书的开发人员之间争论的根源, 所以在这个最初的公开工作草案和最后的建议书之间可能会做些更改。 同时,可以组合使用该功能、导航列表、 link 元素,以及资源描述框架(Resource Description Framework (RDF))来复制 XLink 的大多数功能。

XForms 是一个与 XML 相关的建议书,并确实已经成为 XHTML 2.0 的一部分。

XForms
XML 表单语言(XML Forms Language (XForms)) 是研究表单的一种全新方法 ― 它象 XHTML 的其余部分一样 ― 内容、结构和表现是完全独立的。XForms 页面指定一个模型, 该模型拥有有关表单自身的信息,然后,可以在页面周围散布表单元素,而不是被局限于单个表单元素。 这意味着,您甚至可以在页面的同一区域中合并不同表单的元素。 可以通过实例文档填充表单,实例文档是从表单元素上的 XPath 表达式引用的。 表单元素自身也代表了特殊类型的对象,而不是描述在页面上它们是如何显示的。 当更新表单元素中的数据时,会更新实例文档。 当用户提交表单时,实际发送的是实例文档。例如,采用下面的简单表单( 清单 5):

清单 5. 简单的 HTML 表单




<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>Preference Form</title>

</head>

<body>



<h1>Preferences Form</h1>

<form action="myformprocessor.jsp">

<p>

Username: <input type="text" name="userid" />

<br />

Password: <input type="password" name="pass"/>

</p>



<p>

Area preference:

<select name="seatingpreference">

<option value="1">One</option>

<option value="2">Two</option>

<option value="3">Three</option>

</select>

</p>

<p>

<input type="submit" />

</p>

</form>

</body>

</html>

清单 6显示了 XForms 版本的表单:

清单 6. XForms 版本的表单



<html xmlns="http://www.w3.org/1999/xhtml"

xmlns:xforms="http://www.w3.org/2002/01/xforms">

<head>

<title>Preference Form</title>



<xforms:model>



<xforms:submitInfo method="postxml"/>



<xforms:instance xmlns="">

<preferences>

<person userid="">

<password></password>

</person>

<seatingpreference></seatingpreference>

</preferences>

</xforms:instance>

</xforms:model>



</head>

<body>



<h1>Preferences Form</h1>



<p>

<xforms:input ref="preferences/person@userid">

<xforms:caption>Username: </xforms:caption>

</xforms:input>



<br />


<xforms:secret ref="preferences/person/password">

<xforms:caption>Password: </xforms:caption>

</xforms:secret>

</p>



<p>



<xforms:selectOne ref="preferences/seatingpreference" selectUI="listbox">

<xforms:caption>Area preference: </xforms:caption>

<xforms:item>

<xforms:value>1</xforms:value>

<xforms:caption>One</xforms:caption>

</xforms:item>

<xforms:item>

<xforms:value>2</xforms:value>

<xforms:caption>Two</xforms:caption>

</xforms:item>

<xforms:item>

<xforms:value>3</xforms:value>

<xforms:caption>Three</xforms:caption>

</xforms:item>

</xforms:selectOne>



</p>

<p>

<xforms:submit>

<xforms:caption>Submit Report</xforms:caption>

</xforms:submit>

</p>


</body>

</html>



术语说明:XForms 建议书特别说明了不存在单个表单的 XForms。它是多个 XForms 页面,不再是单个 XForm 页面。

表单一般需要进行验证。换句话说,数据字段必须包含有效数据等。XForms 使用 XML 模式来约束所提交的数据。另外,可以通过添加 XML Events(它也包括在 XHTML 2.0 中)来进一步增强 XForms 页面的功能。

XML Events
您可能已经熟悉了通过添加如 onclickonmouseover 之类的事件在 Web 页面上使用事件。不会再有了。这些熟悉的属性已经被集成到 XHTML 2.0 中的 XML Events 模块所替代。XML Events 提供了一种通用的方法来指定事件发生时应该采取的操作。 它的优点是您不受限于如鼠标单击之类的预定义事件。 相反,可以定义您自己的事件以及触发它们时会发生什么。

XML Events 包含下列组件。如鼠标单击之类的事件可以作为目标。例如,在 清单 7所示的页面中:

清单 7. 要单击的页面



<html>

<head><title>Rides</title></head>

<body>

<ul id="ridelist">

<li href="monorail.html">Monorail</li>

<li href="Matterhorn.html">Matterhorn</li>

<li href="/coaster.html">Roller coaster</li>

</ul>

</body>

</html>

用户可能单击第二个 li 元素 Matterhorn。当这发生时,鼠标单击事件从文档根行进到目标( li )并再次返回。顺序是:



(root) -- html -- body -- ul -- li -- ul -- body -- html -- (root)

向下行进到目标称为捕捉(capture)阶段,而再次向上行进称为冒泡(bubbling)阶段(并不是所有的事件都会冒泡)。在行进期间的任何时候,事件都可以传递已经被注册为观察器的对象(这表示它正在观察特定的事件),如果它看到事件,则执行特定操作。侦听器创建观察器。例如,在下面的序列中:



<ev:listener observer="ridelist" event="mousedown" handler="#myscript"/>

侦听器使 ul 元素(或者更准确一点说,是整个列表)成为观察器, 因而,当用户单击任何列表项目时,观察器( ridelist )执行 myscript (但仍必须确定调用任意脚本的机制)。

XFrames
广受指责的框架也在 XHTML 2.0 中被替换了。XFrames 的第一个工作草案于 2002 年 8 月 6 日初次登场,此前一天 XHTML 2.0 宣布它将使用 XFrames 并试图解决传统 HTML 框架出现的问题。 大多数问题是有关难于创建书签和刷新页面,以及不支持框架的搜索引擎无法索引适当内容。

在 XFrames 文档中,所包含内容的 URI 成为整个文档 URI 的一部分。 例如,下面 清单 8中的页面可能表示带三个框架的 HTML 页面:

清单 8. XFrames 页面


<html>

<head><title>XFrames</title></head>

<body>

<row>

<frame id="header" />

<column>

<frame id="menu"/>

<frame id="content"/>

</column>



</row>

</body>

</html>

请注意,没有指定每个框架的 URI,但每个框架都有其自己唯一的标识符。 因此,这个文档的 URI 可能是:



site.xfm#frames(header=header.xhtml,menu=menu.xhtml,content=main.xhtml)

然后,理解 XFrames 的浏览器将每个框架的内容与适当的 URI 相关联。当用户单击链接并更改个别框架的内容时,页面的整个 URI 都会更改, 所以它始终显示用户正在查看的实际内容,“收藏”和“后退”按钮提供了准确的内容。

图像作为对象
2002 年 8 月 5 日工作草案的最后一个主要的更改包括 除去了 img 标记并用 object 标记替代它。 object 标记实际上在 HTML 4.01 中就已经出现, 但开发人员主要将它用于嵌入多媒体和 Java applet。 然而,它一直都能支持图像。使用 object 标记的主要优点在于,它被设计成向下级联。 换句话说,如果浏览器不能显示一个特定对象,那么它将显示该对象的内容。 例如,遇到下列代码片断的浏览器首先试图装入电影。如果装入电影失败,则装入图像。如果装入图像失败,那么它只显示文本。



<object data="rides.mpeg" type="application/mpeg">

<object data="rollercoaster.jpg" type="image/jpg">

Jack tries to expand his horizons on the racing coasters.

</object>

</object>

后续步骤
2002 年 8 月 5 日的 XHTML 2.0 工作草案中唯一可以确定的事就是不能确定任何事情。 在现在的草案和被作为建议书采纳的过程中,几乎可以肯定它将在某些方面发生变化, 但强调结构和语义的目标不可能变化。出于这个原因, 最好研究您现在构建的页面,并开始养成适当使用结构和样式的习惯。 使用标记来指定某些事物是什么,而不是如何显示它们,并使用 CSS 来完成其余工作。 总的来说,更多地考虑文档的结构以及您想要它们干什么,而不必太多地考虑它们将如何显示。

参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.

  • 请参阅 XHTML 2.0的最新版本,以了解它目前包含哪些内容。

  • 请查找有关如何用 XML Events控制页面和任何 XML 文档中事件的信息。

  • 请阅读使用 XForms的下一代 Web 表单。

  • 请阅读文章“ Get ready for XForms”( developerWorks,2002 年 9 月), 学习有关 XForms 的更多知识。

  • 请快速阅读 XFrames

  • 请阅读 Modularization of XHTML 或阅读 developerWorksWeb 体系结构专区上的 XHTML的模块化教程(2001 年 10 月),了解 XHTML 2.0 是如何构造的。

  • 请在 XHTML 2.0 The Latest Trick 中参考 Kendall Grant Clark 有关 XHTML 2.0 以及 Semantic Web 的注释。

  • 请在 XLink: Who Cares? 中阅读 Bob DuCharme 有关 XLink 及其前景的想法。

  • 下载 X-Smiles,它是一种 XForms 浏览器。
关于作者
Nicholas Chase 曾参与过很多公司(如 Lucent Technologies、Sun Microsystems、Oracle 和 Tampa Bay Buccaneers 等)的网站开发。Nick 曾是一名高中物理教师、低辐射废物设备管理人员、在线科幻杂志编辑、多媒体工程师和 Oracle 讲师。 最近,他成为 Site Dynamics Interactive Communications(位于佛罗里达州的 Clearwater)的 CTO, 而且还是三本有关 Web 开发书籍的作者,包括 Java and XML from Scratch(Que) 和即将出版的 Primer Plus XML Programming(Sams)。他乐意听取读者意见,可以通过
nicholas@nicholaschase.com与他联系。

- 作者: 0101121501 2005年09月19日, 星期一 09:04  回复(0) |  引用(0) 加入博采

[转帖]web标准的好处之理解表现和结构相分离
作者:阿捷 2004-6-25 10:13:01

对于初学者,我们常看见web标准的好处之一是“能做到表现和结构相分离”,那这到底是什么意思呢?我将以一个实际的例子来详细说明。首先我们必须先明白一些基本的概念:内容、结构、表现和行为。

1.内容

内容就是页面实际要传达的真正信息,包含数据、文档或者图片等。注意这里强调的“真正”,是指纯粹的数据信息本身。比如一个不包含辅助的信息,比如导航菜单、装饰性图片等。举个例子,有下面一段文本是我们页面要表现的信息。

忆江南(1)唐.白居易江南好,风景旧曾谙。(2)日出江花红胜火,春来江水绿如蓝,(3)能不忆江南。作者介绍772-846 ,字乐天,太原(今属山西)人。唐德宗朝进士,元和三年(808)拜左拾遗,后贬江州(今属江西)司马,移忠州(今属四川)刺史,又为苏州(今属江苏)、同州(今属陕西大荔)刺史。晚居洛阳,自号醉吟先生、香山居士。其诗政治倾向鲜明,重讽喻,尚坦易,为中唐大家。也是早期词人中的佼佼者,所作对后世影响甚大。注释(1)据《乐府杂录》,此词又名《谢秋娘》,系唐李德裕为亡姬谢秋娘作。又名《望江南》、《梦江南》等。分单调、双调两体。单调二十七字,双凋五十四字,皆平韵。(2)谙(音安):熟悉。(3)蓝:蓝草,其叶可制青绿染料。品评此词写江南春色,首句“江南好”,以一个既浅切又圆活的“好”字,摄尽江南春色的种种佳处,而作者的赞颂之意与向往之情也尽寓其中。同时,唯因“好”之已甚,方能“忆”之不休,因此,此句又已暗逗结句“能不忆江南”,并与之相关阖。次句“风景旧曾谙”,点明江南风景之“好”,并非得之传闻,而是作者出牧杭州时的亲身体验与亲身感受。这就既落实了“好”字,又照应了“忆”字,不失为勾通一篇意脉的精彩笔墨。三、四两句对江南之“好”进  行形象化的演绎,突出渲染江花、江水红绿相映的明艳色彩,给人以光彩夺目的强烈印象。其中,既有同色间的相互烘托,又有异色间的相互映衬,充分显示了作者善于著色的技巧。篇末,以“能不忆江南”收束全词,既托出身在洛阳的作者对江南春色的无限赞叹与怀念,又造成一种悠远而又深长的韵味,把读者带入余情摇漾的境界中。

2.结构(Structure)

可以看到上面的文本信息本身已经完整。但是混乱一团,难以阅读和理解,我们必须给它格式化一下。把它分成标题、作者、章、节、段落和列表等。

标题忆江南(1)
作者 唐.白居易
正文
江南好,风景旧曾谙。(2)
日出江花红胜火,春来江水绿如蓝,(3)
能不忆江南。
节1作者介绍
772-846 ,字乐天,太原(今属山西)人。唐德宗朝进士,元和三年(808)拜左拾遗,后贬江州(今属江西)司马,移忠州(今属四川)刺史,又为苏州(今属江苏)、同州(今属陕西大荔)刺史。晚居洛阳,自号醉吟先生、香山居士。其诗政治倾向鲜明,重讽喻,尚坦易,为中唐大家。也是早期词人中的佼佼者,所作对后世影响甚大。
节2注释
列表
(1)据《乐府杂录》,此词又名《谢秋娘》,系唐李德裕为亡姬谢秋娘作。又名《望江南》、《梦江南》等。分单调、双调两体。单调二十七字,双凋五十四字,皆平韵。
(2)谙(音安):熟悉。
(3)蓝:蓝草,其叶可制青绿染料。
节3品评
此词写江南春色,首句“江南好”,以一个既浅切又圆活的“好”字,摄尽江南春色的种种佳处,而作者的赞颂之意与向往之情也尽寓其中。同时,唯因“好”之已甚,方能“忆”之不休,因此,此句又已暗逗结句“能不忆江南”,并与之相关阖。次句“风景旧曾谙”,点明江南风景之“好”,并非得之传闻,而是作者出牧杭州时的亲身体验与亲身感受。这就既落实了“好”字,又照应了“忆”字,不失为勾通一篇意脉的精彩笔墨。三、四两句对江南之“好”进  行形象化的演绎,突出渲染江花、江水红绿相映的明艳色彩,给人以光彩夺目的强烈印象。其中,既有同色间的相互烘托,又有异色间的相互映衬,充分显示了作者善于著色的技巧。篇末,以“能不忆江南”收束全词,既托出身在洛阳的作者对江南春色的无限赞叹与怀念,又造成一种悠远而又深长的韵味,把读者带入余情摇漾的境界中。

类似上面标题、作者、章、节、段落和列表,我们就把它称做结构。结构使内容更加具有逻辑性,易用性。

2.表现(Presentation)

虽然定义了结构,但是内容还是原来的样式没有改变,例如标题字体没有变大,正文的颜色也没有变化,没有背景,没有修饰。所有这些用来改变内容外观的东西,我们称之为“表现”。下面是对上面文本用表现处理过后的效果:

忆江南(1)
唐.白居易
江南好,风景旧曾谙。(2)
日出江花红胜火,春来江水绿如蓝,(3)
能不忆江南。
作者介绍

772-846 ,字乐天,太原(今属山西)人。唐德宗朝进士,元和三年(808)拜左拾遗,后贬江州(今属江西)司马,移忠州(今属四川)刺史,又为苏州(今属江苏)、同州(今属陕西大荔)刺史。晚居洛阳,自号醉吟先生、香山居士。其诗政治倾向鲜明,重讽喻,尚坦易,为中唐大家。也是早期词人中的佼佼者,所作对后世影响甚大。

注释
  • (1)据《乐府杂录》,此词又名《谢秋娘》,系唐李德裕为亡姬谢秋娘作。又名《望江南》、《梦江南》等。分单调、双调两体。单调二十七字,双凋五十四字,皆平韵。
  • (2)谙(音安):熟悉。
  • (3)蓝:蓝草,其叶可制青绿染料。
品评

此词写江南春色,首句“江南好”,以一个既浅切又圆活的“好”字,摄尽江南春色的种种佳处,而作者的赞颂之意与向往之情也尽寓其中。同时,唯因“好”之已甚,方能“忆”之不休,因此,此句又已暗逗结句“能不忆江南”,并与之相关阖。次句“风景旧曾谙”,点明江南风景之“好”,并非得之传闻,而是作者出牧杭州时的亲身体验与亲身感受。这就既落实了“好”字,又照应了“忆”字,不失为勾通一篇意脉的精彩笔墨。三、四两句对江南之“好”进  行形象化的演绎,突出渲染江花、江水红绿相映的明艳色彩,给人以光彩夺目的强烈印象。其中,既有同色间的相互烘托,又有异色间的相互映衬,充分显示了作者善于著色的技巧。篇末,以“能不忆江南”收束全词,既托出身在洛阳的作者对江南春色的无限赞叹与怀念,又造成一种悠远而又深长的韵味,把读者带入余情摇漾的境界中。

噢,很明显,我们加了2种背景,将标题字体变大并居中,将小标题加粗并变成红色,等等等等。所有这些,都是“表现”的作用。它使你的内容看上去漂亮、可爱多了!形象一点的比喻:内容是模特,结构标明头和四肢等各个部位,表现则是服装,将模特打扮得漂漂亮亮。(请原谅我用模特打比方,很多时候模特比web标准更具有吸引力。)

那么行为是什么?

3.行为(Behavior)

行为就是对内容的交互及操作效果。例如,我们最熟悉不过的JavaScript。使用JavaScript我们可以使内容动起来,可以判断一些表单提交,可以相应你的一些操作。这个我就不再举例子了。

所有HTML和XHTML页面就是由“结构、表现和行为”这三方面组成的。抽象一点理解,内容是基础层,然后是附加上去结构层和表现层,作后再对它们做点“行为”,示意草图如下:

标识语言3组成部分示意图

4.传统的HTML方法

传统的HTML3.2/4.0标签里既有控制结构的标签,例如<title>,<p>,又有控制表现的标签,例如<font>,<b>,还有本意用于结构后来被滥用于控制表现的标签,例如:<h1>,<table>等。结构标签与表现标签混杂在一起。

例如上面举例的页面,你可能很熟练的2-5个表格来控制边框、背景和文本居中;用<h2><h3>来定义标题和小节标题;用<font>和<b>来控制字体大小、颜色和粗体。轻而易举地就能制作好页面。聪明些的设计师还采用CSS样式表来统一控制一些字体的表现。下面的代码是我们最熟悉不过的了:

<table border="0" width="100%"><tr><td align="center"><h1><font color="#C61C18">忆江南</font></h1></td></tr></table>

传统的方法看上去并没有什么问题。(我们已经很习惯了,从来没有想过会有什么问题。)但是既然W3C放弃HTML,推荐XHTML和XML就一定有它的道理和原因,问题出在哪里?

问题就出在结构层和表现层混杂在一起!当我们只发布一些简单页面,没什么影响。当我们发布了大量页面,问题就来了。

第一个问题是:如何改版。假如由于某些原因我们需要把背景替换成黑色,边框变成1px黄色,文字变成白色,所有文字居中。你可能就要一页一页的修改。好,你说你用了CSS,那么恭喜你,你可以直接修改样式表,轻松实现这样简单的改版。(复杂改版暂且不提。)

第二个问题是:数据的利用。本质上讲所有页面信息都是数据。当我发布了唐诗300首,宋词100首,就是一个可观的数据库,这个应该不难理解。那么好,是数据就存在数据查询,处理和交换的问题。假如我所有的页面上都不需要显示“品评”这一小节;假如我要将页面数据转成excel格式;假如我要打印一个干净内容的页面(不要背景、导航、版权等不相干信息)怎么办?传统的解决方法是:一页一页删除“品评”小节;一页一页地拷贝粘贴到excel,一页一页地制作"打印友好页"。这样做显然不是有效率的办法。

实际上,第一个问题实质是批量改变"表现"。由于传统HTML方法的结构并不明显,甚至可以视作只有表现,我们就象设计时尚杂志那样精心画出每一页。严谨的设计师可以控制到每1px的细节。内容与表格紧密的嵌套、混杂在一起,结构只是用表现来表现出来,而不是用标签。这种设计方法下,任何内容的变化,结构的变化都会影响整个页面的表现,都需要一点一点细节的修改。CSS的出现,一开始似乎就是用来解决"批量改表现"的问题。大部分的网页设计师已经能够熟练使用CSS来控制字体的大小颜色,超链接的效果,表格的边框等等,已经体会到CSS批量改变表现的效率。

第二个问题则是无法避免。由于结构和表现混杂在一起(内容被n层的表格拆分),你无法判断哪个td里面到那个td是你需要的数据,无法剥离其中夹杂的<font><b>的标签。上例中,从哪里开始是正文?哪里开始是“品评”小节?哪些是附加信息不需要打印?我们都无法让电脑自己去判断,唯一的方法是人工判断,手工处理。结构和表现混杂在一起,页面就好比是一张图片,你无法让电脑搜索其中的文字。(哦,我听见有人说:我的站点有全文检索啊。恩,我想说的是,第一,这样的检索效率非常低,你需要滤过整个内容,匹配到你的"检索关键字",例如,我要查找作者李白,搜索引擎会检索页面所有文字才能告诉你这页里面含有"李白",而且不一定出现在作者上。第二,这样的检索对数据处理和交换毫无用处。例如我要将所有作者李白的诗摘出来,我要给所有作者增加一个肖像图片,这样的搜索毫无帮助。)

对于第二个问题,要如何解决呢?解决的办法就是:结构清晰化,将内容、结构与表现相分离。

5.web标准推荐的方法

对于内容、结构与表现相分离,最早是在软件开发架构理论中提出来的。QQ用过吧,QQ面板的变更皮肤就是内容不变,外观表现在变化;还有winamp的skin也是这种原理的典型体现。其实我们大多数的设计师已经在实践中都接触到。我们的动态信息发布系统,实际上就是基于这个原理制作的,设计师只需要设计模版,程序员将数据(标题、作者、发布日期、摘要、相关文章、相关图片等等)从数据库中读出,嵌入你的模板,形成一个新的页面再展示给浏览者。其中的内容已经被结构化后分别保存在数据库的不同字段中。例如查找作者,我们只要在作者字段中搜索,这样的效率就提高很多了。

上面都是有赖于程序,如果页面文档本身就能实现表现和结构相分离,那么数据的交换和再利用不就更方便了。嘿嘿,其实XML就是奔着这个方向去的,XML允许你自己定制结构标识,还提供了XSLT用来格式化、查询和处理文档内容。例如上面的诗词页面,用XML写出来的代码就象这样:

<标题>忆江南</标题>
<作者>唐.白居易</作者>
<正文>江南好...</正文>
<作者介绍>772-846 ,字乐天...</作者介绍>
<注释>据《乐府杂录》...</注释>
<品评>此词写江南春色...</品评>

这些<标题><作者>都是自己定义的标签,这样文档结构非常清晰,查询和处理也很简单。啊哦,说远了。还是回到目前能应用的web标准方法上。

web标准方法目前推荐大家使用XHTML+CSS来制作网站。目标是使结构与表现彻底相分离。

就是说,XHTML的标签只用来定义文档的结构,所有涉及表现的东西通通剥离出来,把它放到一个单独的文件里,这个单独的文件就是CSS。(CSS的好处上面已经讲到,可以批量处理表现)。采用这种方法后,上面的第二个问题中的3个假设困难就迎刃而解。我们可以利用样式表将所有"品评"结构不显示(DISPLAY: none);我们可以根据页面结构标签将内容自动导入到excel;我们可以设计一个专门的打印样式表,隐藏掉所有附加的信息,只打印干净的内容。就这么简单。

现在你明白了吧,为什么我们反对用表格设计布局。原因是<table>用于布局的时候,它是一个控制表现的标签。混杂在内容和结构中,使我们的内容数据无法再利用。结构与表现相分离带来的好处主要有:

  • 1.数据的多样显示。通过不同的样式表适应不同的设备,做到内容与设备无关
  • 2.保持整个站点的视觉一致性变得非常简单,修改样式表就可以轻松改版;
  • 3.由于结构清晰,数据的集成、更新和处理更加方便灵活;
  • 4.更有意义的搜索。

好了,说到这,关于表现与结构相分离的概念,您是否有一点理解?如果还是模模糊糊,也不要紧,自己实际制作体验一把,在实践中逐步领会。学习web标准需要循序渐进,阿捷和您一样,也在努力学习中。

要一个符合wbe标准的实际例子?查看本页原代码,讲"表现"概念的那个例子就是用CSS+DIV实现的。样式表的内容直接在本页head区,没有另外单独调用,便于你的查看:)

- 作者: 0101121501 2005年09月15日, 星期四 17:28  回复(0) |  引用(0) 加入博采

[转帖]用mod_security保障Web Services的安全
摘要:Web服务正在变为下一代web应用的一个完整部分。但是它也较容易被攻击。这些攻击的种类与传统的web应用所受到的攻击是相同的,但是形式上发生了变化。这些攻击会导致信息泄漏;另外,这些攻击有助于执行远程命令。通过使用WSDL,一个攻击者能够确定web服务的入口和可用的接口。这些接口或方法使用SOAP协议通过HTTP/HTTPS方式得到输入。如果在源代码层没有好的保护,您的应用就会处于危险。 查看全文

- 作者: 0101121501 2005年09月7日, 星期三 10:52  回复(0) |  引用(0) 加入博采

[转帖]Struts应用的国际化
Struts应用的国际化
万维网(World Wide Web)的迅猛发展推动了跨国业务的发展,它成为一种在全世界范围内发布产品信息、吸引客户的有效手段。为了使企业Web应用能支持全球客户,软件开发者应该开发出支持多国语言、国际化的Web应用。
 
1 本地化与国际化的概念
国际化(简称为I18N)指的是软件设计阶段,就应该使软件具有支持多种语言和地区的功能。这样,当需要在应用中添加对一种新的语言和国家的支持时,不需要对已有的软件返工,无需修改应用的程序代码。
本地化意味着针对不同语言的客户,开发出不同的软件版本;国际化意味着同一个软件可以面向使用各种不同语言的客户。
如果一个应用支持国际化,它应该具备以下特征:
· 当应用需要支持一种新的语言时,无需修改应用程序代码。
· 文本、消息和图片从源程序代码中抽取出来,存储在外部。
· 应该根据用户的语言和地理位置,对与特定文化相关的数据,如日期、时间和货币,进行正确的格式化。
· 支持非标准的字符集。
· 可以方便快捷地对应用作出调整,使它适应新的语言和地区。
 
在对一个Web应用进行国际化时,除了应该对网站上的文本、图片和按钮进行国际化外,还应该对数字和货币等根据不同国家的标准进行相关的格式化,这样才能保证各个国家的用户都能顺利地读懂这些数据。
Locale(本地)指的是一个具有相同风俗、文化和语言的区域。如果一个应用没有事先把I18N作为那前的功能,那么当这个应用需要支持新的Locale时,开发人员必需对嵌入在源代码中的文本、图片和消息进行修改,然后重新编译源代码。每当这个应用需要支持新的Locale时,就必需重复这些繁琐的步骤,这种做法显然大大降低了软件开发效率。
 
2 Web应用的中文本地化
无论时对Web应用的本地化还是国际化,都会涉及字符编码转换问题。当数据流的源与目的地使用不同的字符编码时,就需要对字符编码进行正确的转换。
 
2.1 处理HTTP请求数据编码
    默认情况下,IE浏览器发送请求时采用“ISO-8859-1”字符编码,如果Web应用程序要正确地读取用户发送的中文数据,则需要进行编码转换。
    一种方法是在处理请求前,先设置HttpServletRequest对象的字符编码:
              request.setCharacterEncoding(“gb2312”);
    还有一种办法是对用户输入的请求数据进行编码转换:
              String clientData = request.getParameter(“clientData”);
              if(clientData != null)
                     clientData = new String(clientData.getBytes(“ISO-8859-1”), “GB2312”);
 
2.2 处理数据库数据编码
    如果数据库系统的字符编码为“GB2312”,那么可以直接读取数据库中的中文数据,而无需进行编码转换。如果数据库字符编码为“ISO-8859-1”,那么必需先对来自数据库的数据进行编码转换,然后才能使用。
 
2.3 处理XML配置文件编码
    如果在XML文件中包含中文,可以将XML文件的字符编码为“GB2312”。这样,当Java程序加载和解析XML文件时无需再进行编码转换。
              <?xml version=’1.0’ encoding=”GB2312”?>
 
2.4 处理响应结果的编码
    可以通过以下方式来设置响应结果的编码:
       · 在Servlet中
              response.setContentType(“text/html;charset=GB2312”);
       · 在JSP中
              <%@ page contentType=”text/html;charset=GB2312” %>
       · 在HTML中
              <head>
       <META HTTP-EQUIV=”Content-Type” CONTENT=”text/html; charset=GB2312”>
              </head>
 
3 Java对I18N的支持
Java在其核心库中提供了支持I18N的类和接口。Struts框架依赖于这些Java I18N组件来实现对I18N的支持,因此,掌握Java I18N组件的使用方法有助于理解Struts应用的国际化机制。
3.1 Locale类
    java.util.Locale类时最重要的Java I18N类,在Java语言中,几乎所有对国际化和本地化的支持都依赖于这个类。
Locale类的实例代表一种特定的语言和地区。如果Java类库中的某个类在运行时需要根据Locale对象来调整其功能,那么就称这个类是本地敏感的(Locale-Sensitive)。例如,java.text.DateFormat类就是本地敏感的,因为它需要依照特定的Locale对象来对日期进行相关的格式化。
Locale对象本身病不执行和I18N相关的格式化或解析工作。Locale对象仅仅负责向本地敏感的类提供本地化信息。例如,DateFormat类依据Locale对象来确定日期的格式,然后对日期进行语法分析和格式化。
创建Locale对象时,需要明确地指定其语言和国家代码。如:
       Locale usLocale = new Locale(“en”, “US”);
       Locale chLocale = new Locale(“ch”, “CH”);
构造方法的第一个参数是语言代码。语言代码由两个小写字母组成,遵从ISO-639规范。可以从http://www.unicode.org/unicode/onlinedat/languages.html中获得完整的语言代码列表。
构造方法的第二个参数是国家代码,它由两个大写字母组成,遵从ISO-3166规范。可以从http://www.unicode.org/unicode/onlinedat/countries.html中获得完整的国家代码列表。
Locale类提供了几个静态常量,他们代表一些常用的Locale实例。例如,如果要获得Japanese Locale实例,可以使用如下两种方法之一:
       Locale locale1 = Locale.JAPAN;
       Locale locale2 = new Locale(“ja”, “JP”);
 
3.1.1 Web容器中Locale对象的来源
    Java虚拟机在启动时会查询操作系统,为运行环境设置默认的Locale。Java程序可以调用java.util.Locale类的静态方法getLocale()来获得默认的Locale:
              Locale defaultLocale = Locale.getDefault();
    Web容器在其本地环境中通常会使用以上默认的Locale;而对于特定的中断用户,Web容器会从HTTP请求中获取Locale信息。
 
3.1.2 在Web应用中访问Locale对象
    在创建Locale对象时应该把语言和国家代码两个参数传递给构造方法。对于Web应用程序,通常不必创建自己的Locale实例,因为Web容器会负责创建所需的Locale实例。在应用程序中,可以调用HttpServletRequest对象的以下两个方法,来取得包含Web客户的Locale信息的Locale实例:
              public java.util.Locale getLocale();
              public java.util.Enumeration getLocales();
    着两个方法都会访问HTTP请求中的Accept-Language头信息。getLocale()方法返回客户优先使用的Locale,而getLocales()方法返回一个Enumeration集合对象,它包含了按优先级降序排列的所有Locale对象。如果客户没有配置任何Locale,getLocale()方法将会返回默认的Locale。
 
3.1.3 在Struts应用中访问Locale对象
    有序Web服务器并不和客户浏览器保持长期的连接,因此每个发送到Web容器的HTTP请求中都包含了Locale信息。Struts配置文件的<controller>元素的locale属性指定是否把Locale对象保存在session范围中,默认值为true,表示会把Locale对象保存在session范围中。在处理每一个用户请求时,RequestProcessor类都会调用它的processLocale()方法。
    尽管每次发送的HTTP请求都包含Locale信息,processLocale()方法把Locale对象存储在session范围中必需满足以下条件:
    · Struts配置文件的<controller>元素的locale属性为true。
    · 在session范围内Locale对象还不存在。
    processLocale()方法把Locale对象存储在session范围中时,属性key为Globals.LOCALE_KEY,这个常量的字符串值为“org.apache.struts.action.LOCALE”。
    如果应用程序允许用户在同一个会话中改变Locale,那么应该对每一个新的HttpServletRequest调用其getLocale()方法,来判断用户是否改变了Locale,如果Locale发生改变,就把新的Locale对象保存在session范围内。
    在Struts应用程序中可以很方便地获取Locale信息。例如,如果在Action类中访问Locale信息,可以调用在Struts Action基类中定义的getLocale()方法。
    Action类的getLocale()方法调用RequestUtils.getUserLocale()方法。
    getUserLocale()方法先通过HttpServletRequest参数获得HttpSession对象,然后再通过HttpSession对象来读取Locale对象。如果存在HttpSession对象并且HttpSession中存储了Locale对象,就返回该Locale对象,否则就直接调用HttpServletRequest的getLocale()方法取得Locale对象,并降它返回。
    在Web应用程序的其他地方也可以直接调用RequestUtils类的getUserLocale()方法来获取Locale对象。
 
3.2 ResourceBundle类
    java.util.ResourceBundle类提供存放和管理与Locale相关的资源的功能。这些资源包括文本域或按钮的Label、状态信息、图片名、错误信息和网页标题等。
    Struts框架并没有直接使用Java语言提供的ResourceBundle类。在Struts框架中提供了两个类:
    · org.apache.struts.util.MessageResources
    · org.apache.struts.util.PropertyMesasgeResources
    这两个类具有和ResourceBundle相似的功能,其中PropertyMessageResources是MessageResources类的子类。
 
3.3 MessageFormat类和符合消息。
    Java的ResourceBundle和Struts的MessageResources类都允许使用静态和动态的文本。静态文本指定的是实现就已经具有明确内容的文本。动态文本指的是只有在运行时才能确定内容的文本。
    通常把包含可变数据的消息成为符合消息。符合消息允许在程序运行时把动态数据加入到消息文本中。着能够减少Resource Bundle中的静态消息数量,从而减少把静态消息文本翻译成其他Locale版本所花费的时间。
    当然,在Resource Bundle中使用符合信息会使文本的翻译变得更加困难。因为文本包含了直到运行时才知道的替代值,而把包含替代值的消息文本翻译成不同的语言时,往往要对语言做适当调整。
    Struts框架封装了MessageFormat类的功能,支持复合消息文本,该功能的实现对于Struts的其他组件是透明的。
 
4 Struts框架对国际化的支持
Struts框架对国际化的支持体现在能够输出何用户Locale相符合的文本何图片上。当Struts配置文件的<controller>元素的locale属性为true时,Struts框架把用户的Locale实例保存在session范围内,这样,Struts框架能自动根据这一Lcoale实例来从Resource Bundle中选择合适的资源文件。当用户的Locale为英文时,Struts框架就会向用户返回来自于application_en.properties文件的文本内容:当用户的Locale为中文时,Struts框架就会向用户返回来自于appcation_ch.properties文件的文本内容。
4.1 创建Struts的Resource Bundle
    对于多应用模块的Struts应用,可以为每个子应用配置一个或多个Resource Bundle,应用模块中的Action、ActionForm Bean、JSP页和客户化标签都可以访问这些Bundle。Struts配置文件中的每个<message-resources>元素定义了一个Resource Bundle。当应用中包含多个Resource Bundle时,它们通过<message-resources>元素的key属性来区别。
Resource Bundle的持久化消息文本存储在资源文件中,其扩展名为“.properties”,这一文件中消息的格式为:key=value。
在创建Resource Bundle的资源文件时,可以先提供一个默认的资源文件,默认资源文件应该取名为application.properties。如果应用程序需要支持中文用户,可以再创建一个包含中文消息的资源文件,文件名为:application_ch_CH.properties或application_ch.properties。
当Struts框架处理Locale为中文的用户请求时,Struts框架首先在WEB-INF/classes/目录下寻找application_ch_CH.properties文件,如果存在该文件,就从该文件中获取文本消息,否则再一次寻找application_ch.properties和application.properties文件。
应该总是为Resource Bundle提供默认的资源文件,这样,当不存在和某个Locale对应的资源文件时,就可以使用默认的资源文件。
应该把Resource Bundle的资源文件放在能被定位并加载的位置。对于Web应用程序,资源文件的存放目录为WEB-INF/classes目录。如果在配置Resource Bundle时还给定了包名,那么包名应该和资源文件所在的子目录对应。
4.2 访问 Resource Bundle
    Struts应用的每个Resource Bundle和org.apache.struts.util.MessageResources类(实际上是其子类PropertyMessageResources)的一个实例对应。MessageResources对象中存放了来自资源文件的文本。当应用程序初始化时,这些MessageResources实例被存储在ServletContext中(即application范围内),因此任何一个Web组件都可以访问它们。一个MessageResources对象可以包含多种本地化版本的资源文件的数据。
    Struts应用、子应用模块、Resource Bundle和资源文件之间存在以下关系:
    · 一个Struts应用可以有多个子应用模块,必须有且只有一个默认子应用模块。
    · 一个子应用模块可以有多个Resource Bundle,必须有且只有一个默认的Resource Bundle。
    · 一个Resource Bundle可以有多个资源文件,必须有且只有一个默认资源文件。
 
    下面介绍在Struts应用中访问Resource Bundle的途径。
<!--[if !supportLists]-->1.  <!--[endif]-->通过编程来访问Resource Bundle
在Action积累中定义了getResources(request)方法,它可以返回默认的Message Resources对象,代表当前应用模块使用的默认Resource Bundle。如果要活得特定的MessageResources对象,可以调用Action基类的getResources(request, key)方法,其中参数key和Struts配置文件中的<message-resources>元素的key属性对应。得到了MessageResources对象后,就可以通过它的方法来访问消息文本。
Org.apache.struts.util.MessageResources的getMessage()方法有好几种重载形式,下面列出常用的几种:
· 根据参数置顶的Locale检索对应的资源文件,然后返回和参数key对应的消息文本:
getMessage(java.util.Locale locale, java.lang.String key)
· 根据参数指定的Locale检索对应的资源文件,然后返回和参数key对应的消息文本,args参数用于替换复合消息文本中的参数:
getMessage(java.util.Locale locale, java.lang.String key, java.lang.Object[] args)
· 根据默认的Locale检索对应的资源文件,然后返回和参数key对应的消息文本:
getMessaeg(java.lang.String key)
<!--[if !supportLists]-->2.  <!--[endif]-->使用和Resource Bundle绑定的Struts组件
Struts框架中的许多内在组件和Resource Bundle是绑定在一起的,如:
· ActionMessage类和<html:errors>标签。
每个ActionMessage实例代表Resource Bundle中的一条消息。在调用ActionMessage的构造方法时,需要传递消息key。
对于复合消息,在创建ActionMessage对象时,可以调用带两个参数的构造方法:ActionMessage(java.lang.String key, java.lang.Object[] values),values参数用户替换复合消息中的参数。
在JSP页面中,使用<html:errors>标签,就能读取并显示ActionErrors集合中所有ActionMessage对象包含的消息文本。
· Struts Bean标签库的<bean:message>标签。
        Struts框架包含了一些可以访问应用的消息资源的客户化标签,其中使用最频繁的一个标签为<bean:message>标签。<bean:message>标签从应用的Resource Bundle中获取消息字符串。
        <bean:message>有一个bundle属性,用于指定被访问的Resource Bundle,它和<message-resources>元素的key属性匹配。如果没有设置bundle属性,将访问默认的Resource Bundle。
· 在Validator验证框架中访问Resource Bundle。
· 在声明型异常处理中访问Resource Bundle。
 
5 异常处理的国际化
在处理异常时,也应该考虑对I18N的支持。除非已经对应用抛出的异常消息做本地化,否则不应该直接向终端用户展示原始的异常消息。不懂Java语言的终端用户很难理解从Java虚拟机堆栈中抛出的Java异常消息,如果这些异常消息使用的不是用户的本地语言,那就更加会让用户困惑不解。
应该先把异常捕获,对异常消息进行本地化后,再把它展示给用户。Struts的Resource Bundle和ActionMessage类可以完成这一功能。直接向终端用户显示Java异常绝对是不可取的。即使发生了无法恢复的系统错误,也应该向用户显示本地化的系统错误页。
 
6 小结
本文档介绍了软件的本地化与国际化的概念,然后消息介绍了对Struts应用实现国际化的原理和方法。与国际化密切相关的两个组件是Locale和Resource Bundle:
· Locale:包含了用户的本地化信息,如语言和国家。
· Resource Bundle:包含了多个消息资源文件,每个消息资源文件存放和一种Locale相对应的本地化消息文本。
Struts框架的初始化时,把Resource Bundle(即MessageResources对象)存储在application范围内;在响应用户请求时,把包装用户Locale信息的Locale实例存储在session范围内。Struts框架能自动根据这一Locale实例,从Resource Bundle中检索相应的资源文件,再从资源文件中读取本地化的消息文本。
对Struts应用实现国际化应该遵循以下原则:
· 尽量不在Servlet中使用含非英文字符的常量字符串。
· 对于JSP文件,应该对page指令中的charset属性进行相应的设置。
· 不要在JSP文件中直接包含本地化的消息资源,儿应该把消息资源存放在Resource Bundle的资源文件中。
· 不比在每个JSP或Servlet中设置HTTP请求的字符编码,可以在Servlet过滤器中设置编码:
   HttpServletRequest.setCharaterEncoding(String encoding);
· 尽量使用“UTF-8”作为HTTP请求和响应的字符编码,而不是“GBK”或“GB2312”。
· 充分考虑底层数据库所使用的编码,它可能会给应用程序的移植带来麻烦。

- 作者: 0101121501 2005年09月7日, 星期三 08:49  回复(0) |  引用(0) 加入博采

[转帖]大道至简-Java之23种模式一点就通
摘要:java 设计模式 查看全文

- 作者: 0101121501 2005年09月2日, 星期五 08:46  回复(1) |  引用(0) 加入博采

[转帖]Developing AJAX Applications the Easy Way
摘要:AJAX 查看全文

- 作者: 0101121501 2005年08月31日, 星期三 09:59  回复(0) |  引用(0) 加入博采

[转帖]Spring 框架简介
摘要:spring 简介 查看全文

- 作者: 0101121501 2005年08月24日, 星期三 10:54  回复(0) |  引用(0) 加入博采

JDOM/XPATH编程指南

转载自:www.csdn.net
薛谷雨(rainight@126.com)
前言

XML是一种优秀的数据打包和数据交换的形式,在当今XML大行于天下,如果没有听说过它的大名,那可真是孤陋寡闻了。用XML描述数据的优势显而易见,它具有结构简单,便于人和机器阅读的双重功效,并弥补了关系型数据对客观世界中真实数据描述能力的不足。W3C组织根据技术领域的需要,制定出了XML的格式规范,并相应的建立了描述模型,简称DOM。各种流行的程序设计语言都纷纷根据这一模型推出了自己的XML解析器,在JAVA世界里,APACHE组织开发的XERCES应该是流行最广功能最为强大的XML解析器之一。但是由于W3C在设计DOM模型时,并不是针对某一种语言而设计,因此为了通用性,加入了许多繁琐而不必要的细节 ,使JAVA程序员在开发XML的应用程序过程中感到不甚方便,因此JDOM作为一种新型的XML解析器横空出世,它不遵循DOM模型,建立了自己独立的一套JDOM模型(注意JDOM决不是DOM扩展,虽然名字差不多,但两者是平行的关系),并提供功能强大使用方便的类库,使JAVA程序员可以更为高效的开发自己的XML应用程序,并极大的减少了代码量,因此它很快得到了业内的认可,如JBUILDER这样的航空母舰级的重磅产品都以JDOM为XML解析引擎,足见其名不虚传。

有了XML数据的描述标准,人们自然就会想到应该有一种查询语言可以在XML中查找任意节点的数据,就像SQL语句可以在关系性数据库中执行查询操作一样,于是XQUERY和XPATH顺应潮流,应运而生。由于XQUERY较为复杂,使用不甚方便,XPATH渐渐成为主流,我们只需对XPATH进行学习,便可以应付所有的查询要求。在JDOM发布的最新的V1.0bata10版中,已经加入了对XPATH的支持,这无疑是令开发者十分激动的。

学会JDOM和XPATH,你便不再是XML的入门者,在未来的开发生涯中,就像特种兵的多用匕首,为你披荆斩棘,助你勇往直前。闲言少叙,学习还要脚踏实地,从头开始。

XPATH速成篇

XPATH遵循文档对象模型(DOM)的路径格式,由于每个XML文档都可以看成是一棵拥有许多结点的树,每个结点可以是以下七个类型之一:根(root)、元素(element)、属性(attribute)、正文(text)、命名空间(namespace)、处理指令(processing instruction)和注释(comment)。XPATH的基本语法由表达式构成。在计算表达式的值之后产生一个对象,这种对象有以下四种基本类型:节点集合、布尔型、数字型和字符串型 。XPATH基本上和在文件系统中寻找文件类似,如果路径是以"/"开头的,就表明该路径表示的是一个绝对路径,这和在UNIX系统中关于文件路径的定义是一致的。以"//"开头则表示在文档中的任意位置查找。

不谈泛泛的理论,学习XPATH还要从实例学起最为快捷,并有助于你举一反三。

下面的样例XML文档,描述了某台电脑中硬盘的基本信息(根节点<HD>代表硬盘,<disk>标签代表硬盘分区,从它的name属性可以看出有两个盘符名称为"C"和"D"的分区;每个分区下都包含<capacity>,<directories><files>三个节点,分别代表了分区的空间大小、目录数量、所含文件个数):


<?xml version="1.0" encoding="UTF-8"?>
<HD>
 <disk name="C">
  <capacity>8G</capacity>
  <directories>200</directories>
  <files>1580</files>
 </disk>
 <disk name="D">
  <capacity>10G</capacity>
  <directories>500</directories>
  <files>3000</files>
 </disk>
</HD>

 

你在XML文档中使用位置路径表达式来查找信息,这些表达式有很多种组成方式。

结点元素的查找是你将要碰到的最频繁的查找方式。在上面这个XML文档例子中,根HD包含disk结点。你可以使用路径来查找这些结点,用正斜杠(/)来分隔子结点,返回所有与模式相匹配的元素。下面的XPATH 语句返回所有的disk元素:

/HD/disk

"*"代表"全部"的意思。/HD/* 代表HD下的全部节点。

下面的XPATH将返回任意节点下的名称为disk的全部节点:

//disk

下面的XPATH将返回名称为disk,name属性为'C'的全部节点:

/HD/disk[@name='C']

节点的附加元素,比如属性,函数等都要用方括号扩起来,属性前面要加上@号

下面的XPATH将返回文件个数为1580的files节点:

/HD/disk/files[text()='1580']

大家注意到上面包含一个text(),这就是XPATH的一个函数,它的功能是取出当前节点的文本。

下面的XPATH将返回文件个数为1580的分区:

/HD/disk/files[text()='1580']/parent::*

最后的parent::*表示这个元素的所有的父节点的集合。

XPATH中一些有用的函数:

string concat(string, string, string*)  联接两个字符串 
boolean starts-with(string, string)  判断某字符串是否以另一字符串开头 
boolean contains(string, string)  判断某字符串是否包含另一字符串 
string substring(string, number, number)  取子字符串 
number string-length(string)  测字符串长度 
number sum(node-set)  求和 
number floor(number)  求小于此数的最大整数值 
number ceiling(number)  求大于此数最小整数值 

XPATH具有丰富的表达功能,上面这些已经基本够用,在你做项目中就会发现根据实际情况有许多查询需求,你应该参考本文最后提供的W3C发布的关于XAPH的官方资料进行查阅,我在这里只起一个抛砖引玉的作用,在下面的章节中,我们的应用范例将不会超出上面提到的这些内容,如果你对XPATH感兴趣,应该在读完本文后,查找相关资料和书籍进行深入学习。

JDOM修炼篇

用过XERCES的程序员都会感到,有时候用一句话就可以说清楚的事,当用XERCES的API来实现时,要三四行程序。

获得并安装JDOM

http://www.jdom.org/可以下载JDOM的最新版本,将压缩包中的jdom.jar及lib目录下的全部jar包加入到classpath就可以了。

用JDOM解析XML

JDOM模型的全部类都在org.jdom.*这个包里,org.jdom.input.*这个包里包含了JDOM的解析器,其中的DOMBuilder的功能是将DOM模型的Document解析成JDOM模型的Document;SAXBuilder的功能是从文件或流中解析出符合JDOM模型的XML树。由于我们的上面提到的XML样例存储在一个名称为sample.xml的文件中,很显然我们应该采用后者作为解析工具。下面程序演示了jdom的基本功能,即解析一个xml文档,并挑选一些内容输出到屏幕上。


import java.util.*;
import org.jdom.*;
import org.jdom.input.SAXBuilder;
public class Sample1 {
 public static void main(String[] args) throws Exception{
  SAXBuilder sb=new SAXBuilder();
  Document doc=sb.build("sample.xml");
  Element root=doc.getRootElement();
  List list=root.getChildren("disk");
  for(int i=0;i<list.size();i++){
   Element element=(Element)list.get(i);
   String name=element.getAttributeValue("name");
   String capacity=element.getChildText("capacity");
   String directories=element.getChildText("directories");
   String files=element.getChildText("files");
   System.out.println("磁盘信息:");
   System.out.println("分区盘符:"+name);
   System.out.println("分区容量:"+capacity);
   System.out.println("目录数:"+directories);
   System.out.println("文件数:"+files);
   System.out.println("-----------------------------------");
  }
 }
}

 

程序的输出结果:


磁盘信息:

分区盘符:C

分区容量:8G

目录数:200

文件数:1580

-----------------------------------

磁盘信息:

分区盘符:D

分区容量:10G

?/span>

 

- 作者: 0101121501 2005年08月19日, 星期五 08:50  回复(0) |  引用(0) 加入博采

社会生活中的著名法则(精典)
社会生活中的著名法则(精典)
________________________________________
【摘要】社会生活中的著名法则 一、 马太效应 二、 手表定理 三、 不值得定律 四、 彼得原理 五、 零和游戏原理 六、 华盛顿合作规律
  一、马太效应
《新约•马太福音》中有这样一个故事,一个国王远行前,交给三个仆人每人一锭银子,吩咐他们:“你们去做生意,等我回来时,再来见我。”国王回来时,第一个仆人说:“主人,你交给我们的一锭银子,我已赚了10锭。”于是国王奖励他10座城邑。第二个仆人报告说:“主人,你给我的一锭银子,我已赚了5锭。”于是国王例奖励了他5座城邑。第三个仆人报告说:“主人,你给我的一锭银子,我一直包在手巾里存着,我怕丢失,一直没有拿出来。”于是国王命令将第三个仆人的一锭银子也赏给第一个仆人,并且说:“凡是少的,就连他所有的也要夺过来。凡是多的,还要给他,叫他多多益善。”这就是马太效应。看看我们周围,就可以发现许多马太效应的例子。朋友多的人会借助频繁的交往得到更多的朋友;缺少朋友的人会一直孤独下去。金钱方面更是如此,即使投资回报率相同,一个比别人投资多10倍的人,收益也多10倍。
这是个赢家通吃的社会,善用马太效应,赢家就是你。
  对企业经营发展而言,马太效应则告诉我们,要想在某一个领域保持优势,就必须在此领域迅速做大。当你成为某个领域的领头羊的时候,即使投资回报率相同,你也能更轻易的获得比弱小的同行更大的收益。而若没有实力迅速在某个领域做大,就要不停地寻找新的发展领域,才能保证获得较好的回报。
  二、手表定理
手表定理是指一个人有一只表时,可以知道现在是几点钟,而当他同时拥有两只表时却无法确定。两只表并不能告诉一个人更准确的时间,反而会让看表的人失去对准确时间的信心。你要做的就是选择其中较信赖的一只,尽力校准它,并以此作为你的标准,听从它的指引行事。记住尼采的话:“兄弟,如果你是幸运的,你只需有一种道德而不要贪多,这样,你过桥更容易些。”
如果每个人都“选择你所爱,爱你所选择”,无论成败都可以心安理得。然而,困扰很多人的是:他们被“两只表”弄得无所,心身交瘁,不知自己该信仰哪一个,还有人在环境、他人的压力下,违心选择了自己并不喜欢的道路,为此而郁郁终生,即使取得了受人瞩目的成就,也体会不到成功的快乐。
  
  手表定理在企业经营管理方面给我们一种非常直观的启发,就是对同一个人或同一个组织的管理不能同时采用两种不同的方法,不能同时设置两个不同的目标。甚至每一个人不能由两个人来同时指挥,否则将使这个企业或这个人无所适从。手表定理所指的另一层含义在于每个人都不能同时挑选两种不同的价值观,否则,你的行为将陷于混乱。
  三、不值得定律
不值得定律最直观的表述是:不值得做的事情,就不值得做好,这个定律似乎再简单不过了,但它的重要性却时时被人们疏忘。不值得定律反映出人们的一种心理,一个人如果从事的是一份自认为不值得做的事情,往往会保持冷嘲热讽,敷衍了事的态度。不仅成功率小,而且即使成功,也不会觉得有多大的成就感。
  哪些事值得做呢?一般而言,这取决于三个因素。
  1、价值观。关于价值观我们已经谈了很多,只有符合我们价值观的事,我们才会满怀热情去做。
  2、个性和气质。一个人如果做一份与他的个性气质完全背离的工作,他是很难做好的,如一个好交往的人成了档案员,或一个害羞者不得不每天和不同的人打交道。
  3、现实的处境。同样一份工作,在不同的处境下去做,给我们的感受也是不同的。例如,在一家大公司,如果你最初做的是打杂跑腿的工作,你很可能认为是不值得的,可是,一旦你被提升为领班或部门经理,你就不会这样认为了。
  
  总结一下,值得做的工作是:符合我们的价值观,适合我们的个性与气质,并能让我们看到期望。如果你的工作不具备这三个因素,你就要考虑换一个更合适的工作,并努力做好它。
  
  因此,对个人来说,应在多种可供选择的奋斗目标及价值观中挑选一种,然后为之而奋斗。“选择你所爱的,爱你所选择的”,才可能激发我们的奋斗毅力,也才可以心安理得。而对一个企业或组织来说,则要很好地分析员工的性格特性,合理分配工作,如让成就欲较强的职工单独或牵头来完成具有一定风险和难度的工作,并在其完成时给予定时的肯定和赞扬;让依附欲较强的职工更多地参加到某个团体中共同工作;让权力欲较强的职工担任一个与之能力相适应的主管。同时要加强员工对企业目标的认同感,让员工感觉到自己所做的工作是值得的,这样才能激发职工的热情。
  四、彼得原理
彼得原理是美国学者劳伦斯•彼得在对组织中人员晋升的相关现象研究后得出的一个结论;在各种组织中,由于习惯于对在某个等级上称职的人员进行晋升提拔,因而雇员总是趋向于晋升到其不称职的地位。彼得原理有时也被称为“向上爬”原理。这种现象在现实生活中无处不在:一名称职的教授被提升为大学校长后无法胜任;一个优秀的运动员被提升为主管体育的官员,而无所作为。
  对一个组织而言,一旦组织中的相当部分人员被推到了其不称职的级别,就会造成组织的人浮于事,效率低下,导致平庸者出人头地,发展停滞。因此,这就要求改变单纯的“根据贡献决定晋升”的企业员工晋升机制,不能因某个人在某一个岗位级别上干得很出色,就推断此人一定能够胜任更高一级的职务。要建立科学、合理的人员选聘机制,客观评价每一位职工的能力和水平,将职工安排到其可以胜任的岗位。不要把岗位晋升当成对职工的主要奖励方式,应建立更有效的奖励机制,更多地以加薪、休假等方式作为奖励手段。有时将一名职工晋升到一个其无法很好发挥才能的岗位,不仅不是对职工的奖励,反而使职工无法很好发挥才能,也给企业带来损失。
  对个人而言,虽然我们每个人都期待着不停地升职,但不要将往上爬作为自己的惟一动力。与其在一个无法完全胜任的岗位勉力支撑、无所适从,还不如找一个自己能游刃有余的岗位好好发挥自己的专长。
  五、零和游戏原理
当你看到两位对弈者时,你就可以说他们正在玩“零和游戏”。因为在大多数情况下,总会有一个赢,一个输,如果我们把获胜计算为得1分,而输棋为-1分,那么,这两人得分之和就是:1+(-1)=0。
  这正是“零和游戏”的基本内容:游戏者有输有赢,一方所赢正是另一方所输,游戏的总成绩永远是零。
  零和游戏原理之所以广受关注,主要是因为人们发现在社会的方方面面都能发现与“零和游戏”类似的局面,胜利者的光荣后面往往隐藏着失败者的辛酸和苦涩。从个人到国家,从政治到经济,似乎无不验证了世界正是一个巨大的“零和游戏”场。这种理论认为,世界是一个封闭的系统,财富、资源、机遇都是有限的,个别人、个别地区和个别国家财富的增加必然意味着对其他人、其他地区和国家的掠夺,这是一个“邪恶进化论”式的弱肉强食的世界。
  但20世纪人类在经历了两次世界大战,经济的高速增长、科技进步、全球化以及日益严重的环境污染之后,“零和游戏”观念正逐渐被“双赢”观念所取代。人们开始认识到“利己”不一定要建立在“损人”的基础上。通过有效合作,皆大欢喜的结局是可能出现的。但从“零和游戏”走向“双赢”,要求各方要有真诚合作的精神和勇气,在合作中不要耍小聪明,不要总想占别人的小便宜,要遵守游戏规则,否则“双赢”的局面就不可能出现,最终吃亏的还是自己。
  六、华盛顿合作规律。
华盛顿合作规律说的是:一个人敷衍了事,两个人互相推诿,三个人则永无成事之日。多少有点类似于我们“三个和尚”的故事。人与人的合作不是人力的简单相加,而是要复杂和微妙得多。在人与人的合作中,假定每个人的能力都为1,那么10个人的合作结果就有时比10大得多,有时甚至比1还要小。因为人不是静止的动物,而更像方向各异的能量,相推动时自然事半功倍,相互抵触时则一事无成。我们传统的管理理论中,对合作研究得并不多,最直观的反映就是,目前的大多数管理制度和行业都是致力于减少人力的无谓消耗,而非利用组织提高人的效能。换言之,不妨说管理的主要目的不是让每个人做到最好,而是避免内耗过多。21世纪将是一个合作的时代,值得庆幸的是,越来越多的人已经认识到真诚合作的重要性,正在努力学习合作。
 邦尼人力定律:一个人一分钟可以挖一个洞,六十个人一秒种却挖不了一个洞。
 合作是一个问题,如何合作也是一个问题

- 作者: 0101121501 2005年08月16日, 星期二 14:01  回复(0) |  引用(0) 加入博采

幽他一默

几天前,和女友在火车站路过,一个接一个拉客的大妈,大姐拦住去路.我说,你俩去哪啊,北京,长春......还是大连,我摆了摆手,意思是哪也不去.我怕再有人过来白费唇舌,就低头向前走,不一会儿,发现女友不在身边,忙回头去找,这才发现女友又被一个大妈围住,问要不要坐车,去哪,就听女友严肃的说,我们去家乐福!

- 作者: 0101121501 2005年08月12日, 星期五 14:25  回复(0) |  引用(0) 加入博采

[转帖]高考零分作文

谁说中国人缺少幽默?读了这篇高考零分作文,你应该相信吾国之考生实是搞笑...

作文要求:

  有一位登山者,途中遇到暴风雪,他深知如果找不到避风之处必死无疑。他走啊走,突然脚下碰到一个僵硬的东西,他扒开雪地一看,原来是一个冻僵的人,他心想:是救他呢还是继续前行?

  经过心灵翻江倒海的思量之后,他决定救这个人。于是,他脱下手套,开始给那个冻僵的人全身按摩。经过一番努力,终于把他救醒了。于是,两人搀扶着走出雪地。

  也许人人不一定能够碰到这样的生死抉择,但是我们生活中也会面临一些与触动心灵有关的选择,在这种情况下,我们应该怎样选择?为什么会作这样的选择?

  请以“心灵的选择”为话题写一篇作文,范围不要超出这个内容之外:

  1、立意自定2、文体自选3、题目自拟4、不少于800字5、不得抄袭。


  下面是西安胡家庙某位同学的高考作文


  心灵的选择

  北风那个吹~~~雪花那个飘~~~雪花那个飘~~~~春,来到~~(白毛女选段),俺艰难地蹒跚在一条不是路的路上,抬头望去,在凛冽的暴风雪中,俺隐约看见棉花糖一样的山峰就在前方,透出监考老师般的威严。俺心里暗骂,丫的,最讨厌的就是爬山了,何况是这个鬼天气出来爬山,平时这样的天气俺都窝在被卧里听流行歌曲的,可今。。。

  哎,可怜,今天是高考的日子,为了能上个好大学,为了能建设俺们的祖国,为了报答党的养育之恩(从小就背,都习惯了),当然最重要的是为了不再象老妈老爸那样下岗,每天天不亮就出去卖早点维持生计,俺痛苦地被命题专家们扔在了这荒山野地里,他们还告诉俺,在这样的鬼天气下,俺要是不赶紧找个避风的地方,必死无疑。

  俺真的怕了,风哗啦啦吹呀,吹得我耳朵根发麻,就象刚才监考老师从身边走过一样难受,老师看人的眼神也亦如今天这山上的天气,阴冷的可怕。。。没办法多想,再乱想时间就不够交卷了,俺走啊走啊,忽然脚底下碰到一个僵硬的东西。神志不清的俺心里一颤,常听人说偏远的地方容易发现财宝啊古董啊什么的,如果真是的话,俺肯定挖出来就回家,不参加恶心的愚民似的考试,俺爹娘也不用起早贪黑的忙乎生计,再也不用摆个小摊还跟做贼似的成天躲市容那帮土匪了,娘也再不用苦苦哀求那帮土匪,求他们别把俺家的混沌摊就地掀翻,把炉子扔进市容卡车。爹也再不用舍不得上医院抓感冒药了,再也不用求医生能不能把跟感冒不搭噶的补药划掉不开了。。。咱有钱了,哈。。。。

  想着想着,俺不觉笑了,赶忙蹲下快僵硬的身子,扒开雪地一看,原来是一个冻僵的人。

  “丫的,原来是一死鬼”俺不觉郁闷起来,当天上掉馅饼的梦象肥皂泡一样破灭后,俺又感觉到身上阴冷起来,这时候监考老师又绕到俺的背后,站了1分钟零28秒。。。俺气得忍不住站起来的时候踢了那人一脚,“恩~~~”靠,他还没死,在俺重重一脚的刺激下,
这人本能的哼了一声。原来是活的,我嘟囔着蹲下身子,于是俺心里想:是救他呢还是继续前行?如果俺救他,可能俺们都会被冻死,因为这样的天气俺是没有能力带他走出这里,连俺自己也没有把握,如果不赶紧找个地方避一避风,俺可能下场跟这个僵死的人一样。。。俺没有弄醒他,俺在他身边堆了一个巨大的雪包,雪包上面压了一块俺登山时候,媳妇送俺的红肚兜,俺一直揣怀里。如果俺找到救援队,俺会通知人来救他。。。

  又看了那个将死的人一眼,俺站了起来。。。

  就在俺准备为了活命赶路的时候,俺又看见了讲台前站着的监考老师,目光犀锐,似乎在看着俺,仿佛在告诉俺,如果这样结束文章,俺的作文肯定不会及格了。。。俺胆怯了,俺爹娘指望我将来能有份象样的工作,俺也希望将来能有一天出入高级夜总会,开着公家的小车,搂着小蜜,白天开开会,喝喝茶,晚上吃吃饭,拿拿红包,有空就回家睡睡。。。而这都需要有一个好的背景,俺没有一个有钱有权的爹,俺不怪他,所以俺就必须要有文化,有文。。。那么首先要先考上大学。。。为了分数,俺。。。。

  俺又蹲下来,把俺媳妇的肚兜重新揣进怀里,然后酝酿了一下劳动人民的情感,俺双手抓住那人的肩膀猛晃:“同志,同志,醒醒同志~~~~”那人还没醒,俺一看这样可不成,俺马上脱掉手套(话外音:哪个出题的孙子这么写俺?俺冻死了都要,还脱手套?),开始给那人按摩,其实小时侯听爹说过,人要冻僵了以后不能马上按摩,要先用雪水擦身子,然后放怀里捂着,不然马上按摩身子会烂掉的。。。可俺顾不了那么多了,反正是没文化的出题专家给的意见,不照办行嘛,俺对着那人按呀摸呀,他终于醒了过来,眼睛吃力的张开,俺笑了:“同志,你可醒了,你没事吧,放心吧,俺是党员,俺学了三个代表,俺一定会救你出去的”


  那个人一听这些话,眼睛里泛着光,紧紧握着我的手,激动地哆嗦:“同志,我,我可找到组织了~~~”我被他这话感动了,忙说:“同志,你先休息一下,别忙谢俺,其实,我今天能这样做完全是党多年来对我的莘莘教育的好,是和领导的关心,组织上的信任分不开的。”那人对我这种高尚的品格显得很是崇拜,困难地从口袋掏出一纸条,照着纸条高声念到:“我感谢党和人民对我的关怀,在这样恶劣的条件下还有人救我,说明党没有抛弃我,没有忘掉我,我回去以后一定更加努力的工作,为把我国建设成为一个有中国特色的社会主义而努力奋斗,以报答党和国家比海深的恩情。。。”


  够了!”俺冻的实在受不了,还要听着孙子的唠叨,要不是为了拿高分,俺费那劲跟你蘑菇,看着他奇怪地望着俺的眼神,俺意识到自己的失态,赶紧纠正说:“同志,快别念了,俺心里现在跟有一个小太阳似的,别提多温暖了,可是你看,天快黑了,咱还是赶紧赶路吧,领导都等着俺们回去呢,要是赶的及时,没准俺们上中央电视台的晚间新闻”“哦。。。哦”那人赶紧爬起来,俺跟他搀扶着向前走。。。

  暴风雪忽然小了,太阳出来了,俺仿佛看见棉花糖般的大山那头有一面旗帜,那分明是党的光辉,在给俺们指引回家的路。。。俺们蹒跚着前进。。。。

  好了,老师提醒还有三分钟交卷子了,俺也该结尾了。。。通过这次活动俺深深体会到,只有学好马列主义毛泽东思想并用三个代表武装自己,俺们才能成为新时代的青年人。。

- 作者: 0101121501 2005年08月10日, 星期三 14:44  回复(0) |  引用(0) 加入博采

[转帖]Java内存泄露问题分析
摘要:Java内存泄露 查看全文

- 作者: 0101121501 2005年08月10日, 星期三 11:28  回复(0) |  引用(0) 加入博采

关于个人成长的七个奥秘
摘要:个人成长 查看全文

- 作者: 0101121501 2005年08月9日, 星期二 12:56  回复(0) |  引用(0) 加入博采

感慨中国
摘要:中国,随笔 查看全文

- 作者: 0101121501 2005年08月5日, 星期五 15:26  回复(3) |  引用(0) 加入博采