<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>mqqqvpppm</title>
    <description>I am a newcomer on javaeye, but I am enthusiastic, energetic, professional and skilled. I love software, through which I can create art.</description>
    <link>http://mqqqvpppm.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>什么是CTI</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/228241" style="color:red;">http://mqqqvpppm.javaeye.com/blog/228241</a>&nbsp;
          发表时间: 2008年08月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          CTI<br /><br />　　<br />CTI技术是从传统的计算机电话集成（Computer Telephony Integration）技术发展而来的，最初是想将计算机技术应用到电话系统中，能够自动地对电话中的信令信息进行识别处理，并通过建立有关的话路连接，而向用户传送预定的录音文件、转接来话等。而到现在，CTI技术已经发展成“计算机电信集成”技术（Computer Telecommunication Integration），即其中的“T”已经发展成“Telecommunication”，这意味着目前的CTI技术不仅要处理传统的电话语音，而且要处理包括传真、电子邮件等其它形式的信息媒体。CTI技术跨越计算机技术和电信技术两大领域，目前提供的一些典型业务主要有基于用户设备（CPE）的消息系统、交互语音应答、呼叫中心系统、增值业务、IP电话等。　　<br /><br />CTI应用提供以下的一种或多种功能：　　<br /><br />· 鉴别呼叫者。使用一种或多种标准的方法，呼叫者的电话号码能够被数据库过滤。　　<br /><br />· 识别声音，或者用于鉴别，或者用于消息转发。　　<br /><br />· 使用在线的、录制的声音，或按键式的输入，确定如何处理呼叫（如将它转发给适当的人或部门）。　　<br /><br />· 为呼叫者提供交互式语音应答（Interactive Voice Response，IVR）。　　<br /><br />· 在与呼叫者交谈时，在顾客记录中对比呼叫者的电话号码并显示。　　<br /><br />· 管理声音和视频会议。　　<br /><br />· 接收传真信息并将它们发送到最近的传真机。　　<br /><br />· 服务于对外电话，如电话销售等。　　<br /><br />· 基于呼叫输入，初始化一个智能代理程序为呼叫者的请求服务。　　<br /><br />高级智能网（Advanced Intelligent Network，AIN）就是一个从CTI服务分化出来的电话服务，它从电话交换分离并且能够非常容易的添加新的服务。Windows的电话应用程序接口（TAPI）和Novell的TSAPI接口使在个人计算机和本地局域网创建电话应用程序非常容易。
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/228241#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 15 Aug 2008 10:19:42 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/228241</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/228241</guid>
      </item>
      <item>
        <title>OO设计---javascript实现跨浏览器div 拖动</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/226694" style="color:red;">http://mqqqvpppm.javaeye.com/blog/226694</a>&nbsp;
          发表时间: 2008年08月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>1　封装变化</strong><br /><br />实现div拖动效果，在设置和取left和top值时,各种浏览器的js实现不同,把变化封装到接口 MyAPI 的三个方法:getTop(), getLeft(), moveTo()中, 在对各种浏览器写具体实现类,如下图<br /><br />UML图: <br /><img src="http://mqqqvpppm.javaeye.com/upload/picture/pic/19725/20cf2149-071c-3c8d-b467-28489bf0e1ff.gif" /><br /><br />在Javascript中　用  MyAPI 对IEAPI 和　W3CAPI　和聚合关系("has-a") 摸似了继承关系，代码如下（myapi.js）:<br /><pre name="code" class="javascript">
//Interface
function MyAPI()
{
	this.Type = {// mark web browser ---------- learn from prototype framework 
		IE:     !!(window.attachEvent && !window.opera),
		Opera:  !!window.opera,
		WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
		Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
		MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
	}
	this.api = this.getInstance();

	return this;
}

//IE implementation
function IEAPI()
{
	return this;
}

//W3C implementataion
function W3CAPI()
{
	return this;
}



//factory method
MyAPI.prototype.getInstance=function()
{
	if(this.Type.IE)
		return new IEAPI();
	else
		return new W3CAPI();
	
};



//method moveTo detail implementation
MyAPI.prototype.moveTo=function(obj,iX,iY)
{
	this.api.moveTo(obj,iX,iY);
}
IEAPI.prototype.moveTo=function(obj,iX,iY)
{
	if(iX!=null) obj.style.pixelLeft=iX;
	if(iY!=null) obj.style.pixelTop=iY;
}
W3CAPI.prototype.moveTo=function(obj,iX,iY)
{
	if(iX!=null) obj.style.left=iX+"px";
	if(iY!=null) obj.style.top=iY+"px";
}



//method getLeft detail implementation
MyAPI.prototype.getLeft=function(obj)
{
	return this.api.getLeft(obj);
}
IEAPI.prototype.getLeft=function(obj)
{
	return obj.style.pixelLeft;
}
W3CAPI.prototype.getLeft=function(obj)
{	
	return parseInt(obj.style.left);
}



//method getTop detail implementation
MyAPI.prototype.getTop=function(obj)
{
	return this.api.getTop(obj);
}
IEAPI.prototype.getTop=function(obj)
{
	return obj.style.pixelTop;
}
W3CAPI.prototype.getTop=function(obj)
{
	return parseInt(obj.style.top);
}

</pre><br /><br /><br /><strong>2 用写好的API实现对Div的简单拖动效果</strong><br />代码如下:(demo.html)<br /><pre name="code" class="HTML">
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
&lt;html xmlns="http://www.w3.org/1999/xhtml">
&lt;head>
&lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
&lt;title>move demo&lt;/title>
&lt;script src="myapi.js" type="text/javascript">&lt;/script>
&lt;script language="javascript">
	var myAPI = new MyAPI();
	var moveable = false;
	var xOff = 0;
	var yOff = 0;
	function start(obj,e){
		moveable = true;
		xOff = myAPI.getLeft(obj) - e.clientX;
		yOff = myAPI.getTop(obj) - e.clientY;
	}
	
	function move(obj,e){
		if(moveable){
			myAPI.moveTo(obj, xOff + e.clientX, yOff + e.clientY)
		}
	}
	
	function end(){
		moveable = false;
	}
	
&lt;/script>

&lt;/head>

&lt;body>

&lt;div style="width:200px; height:200px; top:200px; left:200px; position:absolute; background:#CC99CC" onmousedown="start(this,event)" onmousemove="move(this,event)" onmouseup="end()">&lt;/div>

&lt;/body>
&lt;/html>
</pre><br /><br />是简单拖动,只在IE6和FireFox2下测过,也没有对所有浏览器封装，还有一些bug 比如鼠标移动太快,拖出div 后，因为mouseup事件触发不了而出来div粘上鼠标情况,在 div 上加个mouseout="end()"更好些<br /><br />(祝中国2008奥运会成功)
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/226694#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 11 Aug 2008 17:50:02 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/226694</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/226694</guid>
      </item>
      <item>
        <title>Eclipse 插件更新地址备份</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/224688" style="color:red;">http://mqqqvpppm.javaeye.com/blog/224688</a>&nbsp;
          发表时间: 2008年08月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          JSEclipse:<br />http://www.interaktonline.com/
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/224688#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 05 Aug 2008 17:27:08 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/224688</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/224688</guid>
      </item>
      <item>
        <title>solve ClassCastException of AnnotationProcessor</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/220254" style="color:red;">http://mqqqvpppm.javaeye.com/blog/220254</a>&nbsp;
          发表时间: 2008年07月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          my project throw the following exception in tomcat6:<br /><br />java.lang.ClassCastException:<br />org.apache.catalina.util.DefaultAnnotationProcessor cannot be cast to org.apache.AnnotationProcessor<br /><br /><br />Solution: <br /><br />(this is an expert's mail)<br />-----------------------------------------------------------------------<br />  this problem is not easy to solve - some1 commited "patch" to refactor <br />AnnotationProcessor interface to NOW wrong package.<br />This was due to efforts from MYFACES-1246, proposal of annotation <br />processing here in list (adding method), but this of course breaks <br />compatibility of the same named interfaces.<br /><br />If you have older code using org.apache.AnnotationProcessor you can make <br />it work on Tomcat:<br /><br />Add<br /><br />&lt;Loader delegate="true"/><br /><br />into context.xml file (to Context element) in tomcat/conf directory. <br />This makes classloading in Tomcat sticking to J2EE spec.<br />(I couldn't make it work with suggested approach for only 1 webapp)<br /><br />More info on classloader:<br />http://tomcat.apache.org/tomcat-6.0-doc/config/loader.html<br /><br />When using new code from trunk, it needs quite a lot changes to make it <br />work in Tomcat (i can provide patch if wanted).<br /><br />Regards,<br />  Zdenek<br /><br /><br /><br />------------------------------------------------------------------------
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/220254#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 28 Jul 2008 01:10:14 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/220254</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/220254</guid>
      </item>
      <item>
        <title>setTimeout() and setInterval()</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/217399" style="color:red;">http://mqqqvpppm.javaeye.com/blog/217399</a>&nbsp;
          发表时间: 2008年07月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          [setTimeout]<br />setTimeout(表达式,延时时间)<br />在执行时,是在载入后延迟指定时间后,去执行一次表达式,记住,次数是一次<br /><br />用setTimeout实现的自动变化显示随机数的效果:<br /><br />&lt;html><br />&lt;head><br />&lt;script><br />window.onload=sett;<br />function sett()<br />{<br />document.body.innerHTML=Math.random();<br />setTimeout("sett()",500);<br />}<br />&lt;/script> <br />&lt;/head><br />&lt;body><br />&lt;/body><br />&lt;/html><br /><br /><br />[setInterval]<br />setInterval(表达式,交互时间)<br />则不一样,它从载入后,每隔指定的时间就执行一次表达式<br /><br />用setInterval实现的自动变化显示随机数的效果:<br /><br />&lt;html><br />&lt;head><br />&lt;script><br />function sett()<br />{<br />document.body.innerHTML=Math.random();<br />}<br />setInterval("sett();", 500);<br />&lt;/script><br />&lt;/script> <br />&lt;/head><br />&lt;body><br />&lt;/body><br />&lt;/html>
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/217399#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 Jul 2008 00:33:32 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/217399</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/217399</guid>
      </item>
      <item>
        <title>diff of struts2 and struts1</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/217184" style="color:red;">http://mqqqvpppm.javaeye.com/blog/217184</a>&nbsp;
          发表时间: 2008年07月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在Action 实现类方面的对比：Struts 1 要求Action 类继承一个抽象基类；Struts 1 的一个具体问题是使用抽象类编程而不是接口。Struts 2 Action 类可以实现一个Action 接口，也可以实现其他接口，使可选和定制的服务成为可能。Struts 2 提供一ActionSupport  基类去实现常用的接口。即使 Action  接口不是必须实现的，只有一个包含execute 方法的POJO 类都可以用作 Struts 2 的Action 。 <br /><br /><br />线程模式方面的对比：Struts 1 Action 是单例模式并且必须是线程安全的，因为仅有 Action 的一个实例来处理所有的请求。单例策略限制了Struts 1 Action 能做的事，并且要在开发时特别小心。Action 资源必须是线程安全的或同步的；Struts 2 Action对象为每一个请求产生一个实例，因此没有线程安全问题。 <br /><br /><br />Servlet 依赖方面的对比：Struts 1 Action 依赖于 Servlet API，因为Struts 1 Action 的 execute 方法中有HttpServletRequest 和HttpServletResponse 方法。Struts 2 Action 不再依赖于 Servlet API，从而允许Action 脱离Web 容器运行，从而降低了测试Action的难度。当然，如果Action 需要直接访问HttpServletRequest 和HttpServletResponse 参数，Struts 2 Action 仍然可以访问它们。但是，大部分时候，Action 都无需直接访问HttpServetRequest 和HttpServletResponse，从而给开发者更多灵活的选择。   <br /><br /><br />可测性方面的对比：测试Struts 1 Action 的一个主要问题是execute 方法依赖于Servlet  API，这使得Action 的测试要依赖于Web 容器。为了脱离Web 容器测试 Struts 1 的 Action，必须借助于第三方扩展：Struts TestCase，该扩展下包含了系列的Mock 对象（模拟了HttpServetRequest 和HttpServletResponse 对象），从而可以脱离Web 容器测试Struts 1 的Action 类。Struts 2 Action 可以通过初始化、设置属性、调用方法来测试。 <br /><br /><br /><br />封装请求参数的对比：Struts 1 使用ActionForm 对象封装用户的请求参数，所有的ActionForm 必须继承一个基类：ActionForm。普通的JavaBean 不能用作ActionForm，因此，开发者必须创建大量的ActionForm 类封装用户请求参数。虽然 Struts 1 提供了动态 ActionForm来简化 ActionForm的开发，但依然需要在配置文件中定义ActionForm；Struts2 直接使用Action 属性来封装用户请求属性，避免了开发者需要大量开发 ActionForm 类的烦琐，实际上，这些属性还可以是包含子属性的 Ric对象类型。如果开发者依然怀念 Struts 1  ActionForm 的模式，Struts2 提供ModelDriven 模式，可以让开发者使用单独的Model 对象来封装用户请求参数，但该Model 对象无需继承任何 Struts 2 基类，是一个POJO，从而降低了代码污染。 <br /><br /><br /><br />表达式语言方面的对比：Struts1 整合了 JSTL，因此可以使用JSTL 表达式语言。这种表达式语言有基本对象图遍历，但在对集合和索引属性的支持上则功能不强；Struts 2 可以使用JSTL，但它整合了一种更强大和灵活的表达式语言：OGNL（Object Graph Notation Language），因此，Struts 2 下的表达式语言功能更加强大。绑定值到视图的对比：Struts1 使用标准JSP 机制把对象绑定到视图页面；Struts2 使用“ValueStack ”技术，使标签库能够访问值，而不需要把对象和视图页面绑定在一起。 <br />类型转换的对比：Struts1  ActionForm  属性通常都是 String  类型。Struts 1 使用ommons-Beanutils 进行类型转换，每个类一个转换器，转换器是不可配置的；Struts 2 使用OGNL 进行类型转换，支持基本数据类型和常用对象之间的转换。 <br /><br /><br /><br />数据校验的对比：Struts1 支持在 ActionForm 重写validate 方法中手动校验，或者通过整合 Commons alidator 框架来完成数据校验。Struts 2 支持通过重写validate方法进行校验，也支持整合XWork 校验框架进行校验。 <br /><br /><br /><br />Action 执行控制的对比：Struts 1 支持每一个模块对应一个请求处理（即生命周期的概念），但是模块中的所有Action 必须共享相同的生命周期。Struts 2 支持通过拦截器堆栈（Interceptor    Stacks）为每一个Action 创建不同的生命周期。开发者可以根     据需要创建相应堆栈，从而和不同的Action 一起使用。
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/217184#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jul 2008 17:50:32 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/217184</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/217184</guid>
      </item>
      <item>
        <title>什么是ESB</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/216900" style="color:red;">http://mqqqvpppm.javaeye.com/blog/216900</a>&nbsp;
          发表时间: 2008年07月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          ESB全称为Enterprise Service Bus，即企业服务总线。它是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢，是构筑企业神经系统的必要元素。 <br /><br />ESB的出现改变了传统的软件架构，可以提供比传统中间件产品更为廉价的解决方案，同时它还可以消除不同应用之间的技术差异，让不同的应用服务器协调运作，实现了不同服务之间的通信与整合。从功能上看，ESB提供了事件驱动和文档导向的处理模式，以及分布式的运行管理机制，它支持基于内容的路由和过滤，具备了复杂数据的传输能力，并可以提供一系列的标准接口。
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/216900#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jul 2008 14:11:31 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/216900</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/216900</guid>
      </item>
      <item>
        <title>build a SVN env</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/212543" style="color:red;">http://mqqqvpppm.javaeye.com/blog/212543</a>&nbsp;
          发表时间: 2008年07月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          快速搭建Subversion <br /> <br />  <br />作者：开发诱惑　来自：CSDNblog  <br />  <br />服务器端Subversion<br />Subversion是一个自由/开源版本控制系统，和VSS相比，它的特点有：<br /><br />·采用复制-修改-合并模型<br /><br />允许多人同时编辑一个文件，在提交的时候，有服务器进行合并，发生冲突的时候需要手工解决。<br /><br />·目录结构纳入版本控制<br /><br />支持目录结构的修改和文件改名等操作，并且这些操作都将进行版本管理。<br /><br />·原子提交<br /><br />一系列的改动，要么全部提交到版本库，要么一个也不提交，这样可以让用户构建一个所要提交修改的逻辑块，防止部分修改提交到版本库。<br /><br />·可选的网络层<br /><br />Subversion可以作为一个扩展模块与Apache结合，这给了Subversion在稳定性和交互性方面很大的好处，可以直接使用服务器的特性—认证、授权和传输压缩等等。也有一个轻型的，单独运行的Subversion服务，这个服务使用自己的协议可以轻松的用SSH封装。<br /><br />·有效率的分支和标签<br /><br />分支与标签的代价不与工程的大小成比例，Subversion建立分支与标签时只是拷贝整个工程，使用了一种类似于硬链接的机制，因而这类操作通常只会花费很少并且相对固定的时间。<br /><br />·多种存储方式<br /><br />Subversion可以采用数据库进行代码的存储，也可以使用文件存储。<br /><br />·更有效的处理二进制文件<br /><br />只记录变化的部分，使得Subversion处理二进制文件更加有效。<br /><br />·……<br /><br />资源<br /><br />Subversion服务器端：http://subversion.tigris.org/files/documents/15/31465/svn-1.3.1-setup.exe<br /><br />安装<br /><br />执行安装包，不需要特别的修改，假设安装在“C:\Program Files\Subversion”<br /><br />配置<br /><br />1. 确认环境变量<br /><br />安装会自动在系统环境变量的Path变量中加入“C:\Program Files\Subversion\bin”，如不存在请手工编辑。<br /><br />2. 建立一个源代码仓库<br /><br />在windows控制台中运行“svnadmin create d:\data\subversion”，这样就会在指定的目录中建立代码仓库。<br /><br />3. 设置全局访问权限<br /><br />进入代码仓库的conf文件夹（d:\data\subversion\conf），编辑其中的svnserve.conf文件<br /><br />[general] <br /><br />### These options control access to the repository for unauthenticated<br /><br />### and authenticated users. Valid values are "write", "read",<br /><br />### and "none". The sample settings below are the defaults.<br /><br /># anon-access = read<br /><br /># auth-access = write<br /><br />### The password-db option controls the location of the password<br /><br />### database file. Unless you specify a path starting with a /,<br /><br />### the file's location is relative to the conf directory.<br /><br />### Uncomment the line below to use the default password file.<br /><br /># password-db = passwd<br /><br /> <br /><br /><br />其中#起始的行表示注释，因此在修改anon-access和auth-access属性后要删除行首的#。一般来说设置为anon-access = none，auth-access = none，即未验证的用户不能进行读写，通过验证的用户可以读写。password-db = passwd把行首的#去掉，表示密码文件为passwd。<br /><br />4. 添加用户<br /><br />进入代码仓库的conf文件夹（d:\data\subversion\conf），编辑其中的passwd文件<br /><br />### This file is an example password file for svnserve. <br /><br />### Its format is similar to that of svnserve.conf. As shown in the<br /><br />### example below it contains one section labelled [users].<br /><br />### The name and password for each user follow, one account per line.<br /><br /><br />[users]<br /><br /># harry = harryssecret<br /><br /># sally = sallyssecret<br /><br /> <br /><br />[users]节下定义了用户，等号前是用户名，等号后面是密码，注意删除行首的#。<br /><br />5. 启动服务<br /><br />在windows控制台中运行“svnserve -d -r d:\data\subversion”，Subversion服务开始监听3690端口，客户端通过这个端口和服务器进行交互，进行源代码的管理。如果需要自定义端口号，运行“svnserve -d --listen-port 自定义端口号 -r d:\data\subversion”启动服务即可。<br /><br />注意<br /><br />1. 服务启动后，不要关闭控制台窗口，一旦关闭窗口，服务就停止运行了。可以将其包装为windows服务，参见服务器端实用工具——SVN Service Wrapper for Windows。<br /><br />2. Subversion使用Socket通讯，请在防火墙中将使用的端口号设置成例外。<br /><br />参考资源<br /><br />Subversion官方网站：http://subversion.tigris.org/<br /><br />Subversion中文文档：http://svnbook.red-bean.com/<br /><br />服务器端实用工具——SVN Service Wrapper for Windows<br />对于在windows平台下运行的Subversion，可以将控制台程序包装成服务，这样就可以在服务器启动的时候自动启动服务，方便服务器的管理。<br /><br />资源<br /><br />SVN Service Wrapper for Windows：http://clanlib.org/~mbn/svnservice/SVNService.zip<br /><br />安装<br /><br />解开压缩包，将其中的SVNService.exe文件，复制到Subversion的bin目录，如“C:\Program Files\Subversion\bin”<br /><br />·安装服务：<br /><br />在控制台中运行“SVNService -install [svnserve命令的参数]”，如“SVNService -install -d -r d:\data\subversion”<br /><br />·更改参数：<br /><br />在控制台中运行“SVNService -setup [svnserve命令的参数]”，如“SVNService -setup -d --listen-port 6681 -r d:\data\subversion”<br /><br />·卸载服务：<br /><br />在控制台中运行“SVNService –remove”<br /><br />参考资源<br /><br />官方网站：http://clanlib.org/~mbn/svnservice/<br /><br />客户端——TortoiseSVN<br />TortoiseSVN是Subversion的一个客户端，它最大的特点是不需要任何IDE，而与windows资源管理器集成。<br /><br />资源<br /><br />客户端：http://nchc.dl.sourceforge.net/sourceforge/tortoisesvn/TortoiseSVN-1.3.3.6219-svn-1.3.1.msi<br /><br />语言包：http://jaist.dl.sourceforge.net/sourceforge/tortoisesvn/LanguagePack_1.3.3_zh_CN.exe<br /><br />安装<br /><br />执行客户端安装包，注意选择自定义安装，有个针对.net web项目的选项，默认安装在“C:\Program Files\TortoiseSVN”，然后进行语言包的安装。<br /><br />配置<br /><br />1. 改变语言<br /><br />虽然安装了语言包，但TortoiseSVN也不会自动切换界面语言，需要在windows资源管理器的菜单栏中，选择“文件->TortoiseSVN->Settings”命令，在弹出的窗口中选择“简体中文”。<br /><br />常用命令<br /><br />1. 文件库浏览器<br /><br />在URL框中输入SVN服务器的地址，如svn://oa.menhoo.com:6681，按照提示输入用户名和密码，即可进入版本库的浏览界面，右上方有个版本“Head按钮”，Head就是最新版本的意思，在这里可以进行一些打开、保存、删除等常用操作。注意，这里进行的操作将直接影响服务器版本库中的内容，而不是本地的副本。<br /><br />2. 导出<br /><br />将版本库中选中的目录和文件按照指定的版本号的内容进行导出，默认情况下将导出最新版本，这个命令类似于VSS中的获取最新版本。注意导出和取出的区别，可以将这个命令简单的理解为下载。<br /><br />3. 在此创建版本库<br /><br />创建一个新的版本库，只有服务器才需要这个操作。<br /><br />4. 导入<br /><br />将当前路径下的所有文件导入到版本库中。类似VSS中创建了一个新项目，然后添加文件。与VSS不同的是，当前路径下的文件可以被删除掉，因为它们不再被Subversion所使用，可以将导入命令简单的理解为上传。<br /><br />5. 取出<br /><br />在当前文件夹中建立版本库中项目的副本，类似VSS中的设置工作目录和获取最新文件。当文件取出完成后，在当前目录里有了一个版本库的个人拷贝，可以编辑你的工作备份中的文件，并且提交到版本库。<br /><br />参考资源<br /><br />TortoiseSVN官方网站：http://tortoisesvn.tigris.org/
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/212543#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Jul 2008 00:20:16 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/212543</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/212543</guid>
      </item>
      <item>
        <title>什么是lua</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/211655" style="color:red;">http://mqqqvpppm.javaeye.com/blog/211655</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          lua<br /> Lua 是一个小巧的脚本语言。作者是巴西人。该语言的设计目的是为了嵌入应用程序中，从而为应用程序提供灵活的扩展和定制功能。它的主页是 www.lua.org。<br />Lua最著名的应用是在暴雪公司的网络游戏WOW中。<br /><br />Lua脚本可以很容易的被C/C++代码调用，也可以反过来调用C/C++的函数，这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本，也可以作为普通的配置文件，代替XML,Ini等文件格式，并且更容易理解和维护。<br /><br />Lua由标准C编写而成，代码简洁优美，几乎在所有操作系统和平台上都可以编译，运行。<br />一个完整的Lua解释器不过200k，在目前所有脚本引擎中，Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。<br /><br />Lua 有一个同时进行的JIT项目，提供在特定平台上的即时编译功能，这将给Lua带来更加优秀的性能。请访问 http://luajit.luaforge.net/ 来了解这个项目。<br /><br />和Python等脚本不同，Lua并没有提供强大的库，这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。不过Lua还是具备了比如数学运算和字符串处理等基本的功能。<br /><br />Lua 目前的最新版本是 5.1.<br /><br />1 目标<br /><br />LUA的目标是成为一个很容易嵌入其它语言中使用的语言。大多数程序员也认为它的确做到了这一点。<br /><br />很多应用程序使用LUA作为自己的嵌入式脚本语言，以此来实现可配置性、可扩展性。这其中包括魔兽世界、博德之门等。<br /><br /><br />2 特性<br /><br />LUA有如下特性：<br /><br />轻量级 LUA语言的官方版本只包括一个精简的核心和最基本的库。这使得LUA体积小、启动速度快，从而适合嵌入在别的程序里。<br /><br />可扩展 LUA并不象其它许多"大而全"的语言那样，包括很多功能，比如网络通讯、图形界面等。但是LUA可以很容易地被扩展：由宿主语言(通常是C或C++)提供这些功能，LUA可以使用它们，就像是本来就内置的功能一样。<br /><br />其它特性 LUA还具有其它一些特性：同时支持面向过程编程和面向对象编程；自动内存管理；提供一系列数据结构，包括数组、链表、集合、字典、散列表等；语言内置正则表达式匹配；闭包(closure)；函数也可以看做一个值；提供多线程支持；等等。<br /><br /><br />3 示例代码<br /><br />是的，你猜对了：hello world...<br /><br />print "Hello, world!"<br /><br />一个比较复杂一点的例子，但是它展示了什么是闭包:<br /><br />function create_a_counter()<br />    local count = 0<br />    return function()<br />        count = count + 1<br />        return count<br />    end<br />end<br /><br />create_a_counter()返回一个记数器，每次调用这个记数器，都会得到一个比上次大1的值。
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/211655#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 16:43:16 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/211655</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/211655</guid>
      </item>
      <item>
        <title>what is MooTools</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/207298" style="color:red;">http://mqqqvpppm.javaeye.com/blog/207298</a>&nbsp;
          发表时间: 2008年06月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          MooTools是一个简洁，模块化，面向对象的JavaScript框架。它能够帮助你更快，更简单地编写可扩展和兼容性强的JavaScript代码。Mootools跟prototypejs相类似，语法几乎一样。但它提供的功能要比prototypejs多，而且更强大。比如增加了动画特效、拖放操作等等。建议大家可以用它来代替prototypejs。
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/207298#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 24 Jun 2008 07:50:57 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/207298</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/207298</guid>
      </item>
      <item>
        <title>attachEvent() / addEventListener() 对象添加触发事件(转) </title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/199458" style="color:red;">http://mqqqvpppm.javaeye.com/blog/199458</a>&nbsp;
          发表时间: 2008年06月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          有时候当某一对象的某一事件被触发时，它所要执行的程序可能是一大串，有可能是要呼叫某一函数，也有可能同时又要呼叫另一函数。<br /><br />document.getElementById("btn").onclick = method1; <br />document.getElementById("btn").onclick = method2; <br />document.getElementById("btn").onclick = method3;<br />如果这样写,那么将会只有medhot3被执行<br /><br />在IE中使用addachEvent ,<br /><br />var btn1Obj = document.getElementById("btn1"); <br />//object.attachEvent(event,function); <br />btn1Obj.attachEvent("onclick",method1); <br />btn1Obj.attachEvent("onclick",method2); <br />btn1Obj.attachEvent("onclick",method3);<br />执行顺序为method3->method2->method1<br /><br />Mozilla系列中需要使用 addEventListener<br /><br />var btn1Obj = document.getElementById("btn1"); <br />//element.addEventListener(type,listener,useCapture); <br />btn1Obj.addEventListener("click",method1,false); <br />btn1Obj.addEventListener("click",method2,false); <br />btn1Obj.addEventListener("click",method3,false);<br />执行顺序为method1->method2->method3<br /><br />看看gmail的代码<br /><br />var Ka=navigator.userAgent.toLowerCase(); <br />var rt=Ka.indexOf("opera")!=-1; <br />var r=Ka.indexOf("msie")!=-1&&(document.all&&!rt); <br /><br />function Zl(a,b,c){if(r){a.attachEvent("on"+b,c)}else{a.addEventListener(b,c,false)}}
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/199458#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 02 Jun 2008 15:49:37 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/199458</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/199458</guid>
      </item>
      <item>
        <title>什么是portlet</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/197056" style="color:red;">http://mqqqvpppm.javaeye.com/blog/197056</a>&nbsp;
          发表时间: 2008年05月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          正在研究中
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/197056#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 26 May 2008 14:25:03 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/197056</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/197056</guid>
      </item>
      <item>
        <title>ibatis  是什么</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/195952" style="color:red;">http://mqqqvpppm.javaeye.com/blog/195952</a>&nbsp;
          发表时间: 2008年05月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          ibatis没用过　只知道是一个ORM框架  和hibernate 一样
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/195952#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 23 May 2008 11:30:10 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/195952</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/195952</guid>
      </item>
      <item>
        <title>26岁美女老师　同时又是一位hero</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/195519" style="color:red;">http://mqqqvpppm.javaeye.com/blog/195519</a>&nbsp;
          发表时间: 2008年05月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          她的一位暗恋者事后说:“我曾经那么悄悄地喜欢过的女孩，你就这么去了，我真的不敢相信。我看到你牺牲的消息却哭不出来，我知道眼泪已经没有了用处，我只恨当初没有勇气和你说上一句话。你在我心中一直是一个冰冷的美人，我终于明白当初为何会喜欢上你！”<br /><br />    一位名叫“方英年”的网友昨日上午11时11分在天涯茶社发帖，深切悼念自己的同学、什邡市师古镇民主中心小学教师袁文婷。帖子说：就在大地震发生的当天，位于什邡市师古镇的民主中心小学的教学楼发生了严重的坍塌，我的同学、一年级教师袁文婷为了拯救学生，青春定格在了26岁。<br /><br />　　帖子写道，她是那种看上去就能够给人深刻印象的人，因为实在太瘦弱了。灾难发生时，教室里的很多孩子都吓得呆坐着，不知所措。但是她用柔弱的双手一次次地把自己的学生从三楼抱下了一楼，当她最后一次冲上三楼的时候，楼房完全垮塌了……
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/195519#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 22 May 2008 10:02:58 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/195519</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/195519</guid>
      </item>
      <item>
        <title>what is crud</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/191368" style="color:red;">http://mqqqvpppm.javaeye.com/blog/191368</a>&nbsp;
          发表时间: 2008年05月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在很多技术性的文章,特别是有关数据库类的文章中,经常会看到一个缩写“CRUD”,那什么是CRUD呢? CRUD其实是数据库基本操作中的Create(创建)、Read(读取)、Update(更新)、Delete(删除)。
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/191368#comments" style="color:red;">已有 <strong>2</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 09 May 2008 12:04:46 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/191368</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/191368</guid>
      </item>
      <item>
        <title>公司生存之道</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/151561" style="color:red;">http://mqqqvpppm.javaeye.com/blog/151561</a>&nbsp;
          发表时间: 2007年12月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>0。 找到公司潜在规则,&nbsp; 适应之,&nbsp; 而不是叫公司适应你<br />
1。 叫人帮打卡也要遵守上下班制度<br />
2。 非常进敬的工作态度<br />
3。 理解办公室政治, 别动别人的奶烙<br />
4。 交流, 人技 关系要好&nbsp; 不然在公司也混不走</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/151561#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 28 Dec 2007 17:23:54 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/151561</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/151561</guid>
      </item>
      <item>
        <title>看看google 怎么赚钱</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/148228" style="color:red;">http://mqqqvpppm.javaeye.com/blog/148228</a>&nbsp;
          发表时间: 2007年12月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最喜欢这个公司</p>
<p>学习google android后 &nbsp;&nbsp; 感觉 Android 的开发框架的 OO 设计 太精典了太漂亮了&nbsp; 又增加了对google 的喜爱...</p>
<p>看看google怎么赚钱的&nbsp; 以下是从新闻上copy过来的:</p>
<p><span style="color: #808000;">传闻称未来google将提供更大空间的虚拟硬盘存储服务，使用户存储数据由原来自己的硬盘转换到google的服务器上来。这一服务所提供的巨大 空间，不仅可以让用户从自己被音乐视频以及图像堵塞的硬盘上解放出来，而且还可以通过在google网站上进行简单密码登录，实现在任何一台机器上访问自 己的文件。</span>
</p>
<p><span style="color: #808000;">据预测，google的在线存储服务将吸引420万个用户，而google每年从每个用户身上获取的广告费用为50美元，按此计算下来，每年google在免费在线存储业务上获得的费用为2.1亿美元。</span>
</p>
<p><span style="color: #808000;">在支出方面，google每年为这些用户提供50GB免费存储空间所需的费用仅仅为5250万美元。&ldquo;于google来说，这样的回报太丰厚了！&rdquo;</span>
</p>
<p><span style="color: #808000;">另外，传统的硬盘制造商的毛利率仅为18%，与google在线存储75%的毛利率相比，google比他们多赚了四倍的钱。</span>
</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/148228#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 14 Dec 2007 09:04:50 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/148228</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/148228</guid>
      </item>
      <item>
        <title>【Android】 魔兽世界竞技场5v5点数记算器</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/147286" style="color:red;">http://mqqqvpppm.javaeye.com/blog/147286</a>&nbsp;
          发表时间: 2007年12月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>学习android 开发用来练习写了玩的&nbsp; 没什么特点</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/147286#comments" style="color:red;">已有 <strong>2</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 10 Dec 2007 15:42:39 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/147286</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/147286</guid>
      </item>
      <item>
        <title>What is RedCloth</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/112290" style="color:red;">http://mqqqvpppm.javaeye.com/blog/112290</a>&nbsp;
          发表时间: 2007年08月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>RedCloth is a module for using Textile in Ruby. Textile is a text format. A very simple text format. Another stab at making readable text that can be converted to <span class="caps">HTML</span>
.</p>
<h2>What is Textile?</h2>
<p>Textile is a simple markup language.</p>
<table border="0" style="width: 400px;">
<tbody>
<tr>
<th>textile</th>
            <th>to</th>
            <th>html</th>
        
</tr>
<tr>
<td> _a phrase_ </td>
<td>-&gt;</td>
<th><em>a phrase</em>
</th>
        
</tr>
<tr>
<td> *a phrase* </td>
<td>-&gt;</td>
<td><strong>a phrase</strong>
</td>
</tr>
<tr>
<td> _*a phrase*_ </td>
<td>-&gt;</td>
<th><em><strong>a phrase</strong>
</em>
</th>
        
</tr>
<tr>
<td> &quot;Google&quot;:http://google.com </td>
<td>-&gt;</td>
<td><a href="http://google.com/">Google</a>
</td>
</tr>
</tbody>
</table>
<p>No need to use verbose <span class="caps">HTML</span>
 to build your docs, your blogs, your pages. Textile gives you readable text while you&rsquo;re writing and beautiful text for your readers. And if you need to break out into <span class="caps">HTML</span>
, Textile will allow you to do so.</p>
<p>Textile also handles some subtleties of formatting which will enhance your document&rsquo;s readability:</p>
<ul>
<li>Single- and double-quotes around words or phrases are converted to curly quotations, much easier on   the eye.  &ldquo;Observe!&rdquo;</li>
</ul>
<ul>
<li>Double hyphens are replaced with an em-dash.  Observe&mdash;very nice!</li>
</ul>
<ul>
<li>Single hyphens are replaced with en-dashes. Observe &ndash; so cute!</li>
</ul>
<ul>
<li>Triplets of periods become an ellipsis.  Observe&hellip;</li>
</ul>
<ul>
<li>The letter &lsquo;x&rsquo; becomes a dimension sign when used alone.  Observe: 2&times;2.</li>
</ul>
<ul>
<li>Conversion of (TM) to&trade;, (R) to&reg;, (C) to&copy;.</li>
</ul>
<p>For more on Textile&rsquo;s language, hop over to <a href="http://hobix.com/textile/">A Textile Reference</a>
.</p>
<h2>Using RedCloth</h2>
<p>The RedCloth class is an extension of Ruby&rsquo;s String class. Use it like you would a String:</p>
<pre>  &gt;&gt; r = RedCloth.new &quot;*strong text* and _emphasized text_&quot; 
  =&gt; &quot;*strong text* and _emphasized text_&quot; 
  &gt;&gt; r.gsub!( 'text', 'words' )
  =&gt; &quot;*strong words* and _emphasized words_&quot; 
</pre>
<p>To generate <span class="caps">HTML</span>
 from your RedCloth object, use the <code>RedCloth#to_html</code>
 method:</p>
<pre>  &gt;&gt; r.to_html
  =&gt; &quot;<p><strong>strong words</strong>
 and <em>emphasized words</em>
</p>
&quot; 
</pre>
<h2>Installing RedCloth</h2>
<p>To install RedCloth via RubyGems:</p>
<pre>  gem install RedCloth
</pre>
<p>Or <a href="http://rubyforge.org/frs/download.php/6064/RedCloth-3.0.4.tar.gz">download RedCloth</a>
 and simply run the install.rb like so:</p>
<pre>  ruby install.rb config
  ruby install.rb setup
  sudo ruby install.rb install
</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/112290#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 15 Aug 2007 01:40:35 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/112290</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/112290</guid>
      </item>
      <item>
        <title>URI  URL  URN</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/112171" style="color:red;">http://mqqqvpppm.javaeye.com/blog/112171</a>&nbsp;
          发表时间: 2007年08月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>URI、URL和URN是识别、定位和命名互联网上的资源的标准途径。本文分析了URI、URL和URN和Java API的URI和URL类（以及与URL相关的类），并演示了如何在程序中使用这些类。<br />
<br />
1989年Tim Berners-Lee发明了互联网（World Wide Web）。WWW被认为是全球互连的实际的和抽象的资源的集合--它按需求提供信息实体--通过互联网访问。实际的资源的范围从文件到人，抽象的资源包括 数据库查询。因为要通过多样的方式识别资源（人的名字可能相同，然而计算机文件只能通过唯一的路径名称组合访问），所以需要标准的识别WWW资源的途径。 为了满足这种需要，Tim Berners-Lee引入了标准的识别、定位和命名的途径：URI、URL和URN。<br />
<br />
URI、URL和URN是什么？<br />
<br />
体系中的URI、URL和URN是彼此关联的。URI的范畴位于体系的顶层，URL和URN的范畴位于体系的底层。这种排列显示URL和URN都是URI的子范畴，如图1所示：<br />
<br />
<br /></p>
<div><img src="http://www.jspcn.net/htmlnews/..%5Cupload%5C../upload/2005/1/5/22/50/11049366510310394.gif" border="0" alt="" />
</div>
<p>
<br />
screen.width-333)this.width=screen.width-333;&quot;&gt;<br />
图1：URI、URL和URN之间的层次关系。URL和URN是URI的子范畴。<br />
<br />
<br />
URI表示的是统一的资源标识，它是以某种统一的（标准化的）方式标识资源的简单字符串。典型情况下，这种字符串以scheme（命名URI的名字空间的标识符--一组相关的名称）开头，语法如下：<br />
<br />
[scheme:] scheme-specific-part<br />
<br />
URI以scheme和冒号开头。Scheme用大写/小写字母开头，后面为空或者跟着更多的大写/小写字母、数字、加号、减号和点号。冒号把 scheme与scheme-specific-part分开了，并且scheme-specific-part的语法和语义（意思）由URI的名字空间 决定。其中一个例子是http://www.cnn.com，其中http是scheme，/<a href="http://www.jspcn.net/http://www.cnn.com" target="_blank">/http://www.cnn.com</a>
是 scheme-specific-part，并且它的scheme与scheme-specific-part被冒号分开了。<br />
我 们可以把URI按照绝对的或相对的分类。绝对的URI指以scheme（后面跟着冒号）开头的URI。前面提到的http://www.cnn.com就 是绝对的URI的一个例子，其它的例子还有mailto:jeff@javajeff.com、news:comp.lang.java.help和 xyz://whatever。你可以把绝对的URI看作是以某种方式引用某种资源，而这种方式对标识符出现的环境没有依赖。如果使用文件系统作类比，绝 对的URI类似于从根目录开始的某个文件的路径。与绝对的URI不同的，相对的URI不是以scheme（后面跟着冒号）开始的URI。它的一个例子是 articles/articles.html。你可以把相对的URI看作是以某种方式引用某种资源，而这种方式依赖于标识符出现的环境。如果用文件系统 作类比，相对的URI类似于从当前目录开始的文件路径。<br />
标准化可以通过目录术语来理解。假定目录x直接位于根目录之下，x有子目录a和b，b有文 件memo.txt，a是当前目录。为了显示memo.txt中的内容（在微软Windows下），你可能输入type x.memo.txt。你也可能输入type xa..memo.txt，在这种情况下，a和..的出现是没有必要的。这两种形式都不是最简单的。但是如果输入xmemo.txt，你就指定了最简 单的路径了，从根目录开始访问memo.txt。最简单的xmemo.txt路径就是标准化的路径。<br />
<br />
通常通过基本的和相对的URI 访问资源。基本的URI是绝对的URI，它唯一地标识了某种资源的名字空间，而相对的URI标识了与基础的URI相对的资源。（与基本的URI不同，相对 的URI在某种资源的生存周期内可以永远不需要改变）。因为基本的和相对的URI都不能完整的识别某种资源，有必要把两种URI通过解析过程合并。相反 地，通过相对化从合并的URI中提取相对的URI也是可行的。<br />
<br />
注意<br />
<br />
不透明的URI与其它的URI不同，它不服从标准化、分解和相对化。<br />
<br />
假定你把x://a/作为基础的URI，并把b/c作为相对的URI。根据基础URI分解这个相对的URI将产生x://a/b/c。根据x://a/相对化x://a/b/c将产生b/c。<br />
<br />
URI不能定位或读取/写入资源。这是统一的资源定位器（URL）的任务。URL是一种URI，但是它的大纲组件是已知的网络协议（简称协议），并且它把URI组件与某种协议处理程序（一种资源定位器和根据协议建立的约束规则与资源通讯的读/写机制）。<br />
<br />
URI一般不能为资源提供持久不便的名称。这是统一的资源命名（URN）的任务。URN也是一种URI，但是全球唯一的、持久不便的，即使资源不在存在或不再使用。 <br />
使用URI<br />
<br />
网络API通过提供了URI类（位于java.net程序包中），使我们在源代码层使用URI成为可能。URI的构造函数建立了封装URI的URI对 象；URI的方法建立URI对象；如果授权机构组件是基于服务器的就分析它，提取URI组件，决定URI对象的URI是绝对的还是相对的；决定URI对象 的URI是不透明的还是分层的；比较两个URI对象中的URI；标准化（normalize）URI对象的URI；根据URI对象的基础URI分解某个相 对的URI以得到已分解的URI；根据URI对象的基础URI关联某个已分解的URI以得到相对的URI，把URI对象转换为URL对象。<br />
我们进 一步查看URI类，在它里面有五个构造函数。最简单的是URI(String uri)。这个构造函数把URI作为String类型的参数，把URI分解为组件，并把这些组件存储在一个新的URI对象中。如果String对象的 URI（通过uri引用）违反了RFC 2396的语法规则，其它的四个构造函数URI(String uri)将会产生一个java.net.URISyntaxException对象。<br />
<br />
下面的代码片断演示了使用URI(String uri)建立封装了一个简单的URI组件的URI对象：<br />
<br />
URI uri = new URI (&quot;http://www.cnn.com&quot;); <br />
<br />
典型情况下URI构造函数用于建立封装用户指定的URI的URI对象。因为用户可能输入不正确的URI，所以URI构造函数产生已检查的 URISyntaxException对象。这意味着你的代码必须明确地尝试着调用某个URI构造函数并捕捉异常，或者通过在该方法的Throws子句中 列举URISyntaxException以&quot;推卸责任&quot;。<br />
<br />
如果你知道URI是有效的（例如在源代码中的URI），将不会产生 URISyntaxException对象。因为在这种情况下处理某个URI构造函数的异常处理要求可能有困难，所以URI提供了静态的create (String uri)方法。这个方法分解通过uri引用的String对象中包含URI，如果该URI没有违反任何语法规则就建立URI对象（并从方法中返回对它的引 用），否则将捕捉到一个内部的URISyntaxException对象，把该对象包装金一个未检查的IllegalArgumentException 对象中，并抛出这个IllegalArgumentException对象。因为IllegalArgumentException是未检查的，你不需要 明确的尝试代码并捕捉异常或把它的类名称列举在Throws子句中。<br />
<br />
下面的代码片断演示了create(String uri)：<br />
<br />
URI uri = URI.create (&quot;http://www.cnn.com&quot;); <br />
<br />
URI构造函数和create(String uri)方法试图分解出某个URI的授权机构组件的用户信息、主机和端口部分。对于按正常形式形成的基于服务器的授权机构组件，它们是会成功的。对于按拙 劣的形式形成的基于服务器的授权机构组件，他们将会失败--并且把该授权机构组件当作是基于注册的。有时你可能知道某个URI的授权机构组件必须是基于服 务器的。你可以确保该URI的授权机构组件分解出用户信息、主机和端口，或者你可以确保将产生一个异常（伴随着相应的诊断信息）。你可以通过调用URI的 parseServerAuthority()方法实现这种操作。如果成功分解出URI，该方法将返回包含提取的用户信息、主机和端口部分的URI的新 URI对象的一个引用（但是如果授权机构组件已经被分解过了，将会返回调用parseServerAuthority()的URI对象的引用。），否则该 方法将产生一个URISyntaxException对象。<br />
<br />
下面的代码片断演示了parseServerAuthority()：<br />
<br />
// 下面的parseServerAuthority()调用出现后会发生什么情况？<br />
URI uri = new URI (&quot;//foo:bar&quot;).parseServerAuthority(); <br />
一 旦拥有了URI对象，你就可以通过调用getAuthority()、getFragment()、getHost()、getPath()、 getPort()、getQuery()、getScheme()、getSchemeSpecificPart()和 getUserInfo()方法提取多种组件。你也可以通过调用isAbsolute()确定该URI是绝对的还是相对的，通过调用isOpaque() 确定该URI是不透明的还是分层的。如果返回值是true意味着该URI是绝对的或不透明的，如果返回值是false意味着该URI是相对的或分层的。<br />
<br />
列表1中的程序用命令行参数建立了一个URI对象，调用URI组件提取方法来检索URI的组件，并调用URI的isAbsolute()和isOpaque()方法把该URI分类为绝对的/相对性和不透明的/分层的。<br />
<br />
列表1: URIDemo1.java<br />
<br />
// URIDemo1.java<br />
<br />
import java.net.*;<br />
<br />
class URIDemo1<br />
{<br />
public static void main (String [] args) throws Exception<br />
{<br />
if (args.length != 1)<br />
{<br />
System.err.println (&quot;usage: java URIDemo1 uri&quot;);<br />
return;<br />
}<br />
<br />
URI uri = new URI (args [0]);<br />
<br />
System.out.println (&quot;Authority = &quot; +uri.getAuthority ());<br />
System.out.println (&quot;Fragment = &quot; +uri.getFragment ());<br />
System.out.println (&quot;Host = &quot; +uri.getHost ());<br />
System.out.println (&quot;Path = &quot; +uri.getPath ());<br />
System.out.println (&quot;Port = &quot; +uri.getPort ());<br />
System.out.println (&quot;Query = &quot; +uri.getQuery ());<br />
System.out.println (&quot;Scheme = &quot; +uri.getScheme ());<br />
System.out.println (&quot;Scheme-specific part = &quot; +<br />
uri.getSchemeSpecificPart ());<br />
System.out.println (&quot;User Info = &quot; +uri.getUserInfo ());<br />
System.out.println (&quot;URI is absolute: &quot; +uri.isAbsolute ());<br />
System.out.println (&quot;URI is opaque: &quot; +uri.isOpaque ());<br />
}<br />
} <br />
<br />
输入java URIDemo1命令后，列表1的输出结果如下：<br />
<br />
query://jeff@books.com:9000/public/manuals/appliances?stove#ge:<br />
Authority = jeff@books.com:9000<br />
Fragment = ge<br />
Host = books.com<br />
Path = /public/manuals/appliances<br />
Port = 9000<br />
Query = stove<br />
Scheme = query<br />
//jeff@books.com:9000/public/manuals/appliances?stove<br />
User Info = jeff<br />
URI is absolute: true<br />
URI is opaque: false <br />
<br />
上面的输出显示该URI是绝对的，因为它指定了一个大纲（query），并且该URI是分层的，因为query后面有/符号。<br />
<br />
技巧<br />
<br />
你应该调用URI的compareTo(Object o)和equals(Object o)来决定URI的次序（为了排序目的）和等同性。你可以参考SDK文档，查阅这些方法的更多信息。<br />
URI 类支持基本的URI操作，包括标准化（normalization）、分解（resolution）和相对化（relativization）。标准化是 通过URI的normalize()方法支持的。调用normalize()时，它返回对新URI对象的引用，该对象包含调用的URI对象的URI的标准 的表现。<br />
<br />
列表2演示了normalize()方法。它把URI作为程序的唯一的参数，URIDemo2打印出标准的相等的URI。<br />
<br />
列表2: URIDemo2.java<br />
<br />
// URIDemo2.java<br />
<br />
import java.net.*;<br />
<br />
class URIDemo2<br />
{<br />
public static void main (String [] args) throws Exception<br />
{<br />
if (args.length != 1)<br />
{<br />
System.err.println (&quot;usage: java URIDemo2 uri&quot;);<br />
return;<br />
}<br />
<br />
URI uri = new URI (args [0]);<br />
<br />
System.out.println (&quot;Normalized URI = &quot; +<br />
uri.normalize ().toString ());<br />
}<br />
} <br />
<br />
在编译URIDemo2后，在命令行输入java URIDemo2 x/y/../z/./q，将看到下面的输出：<br />
<br />
Normalized URI = x/z/q<br />
<br />
上面的输出显示y、..和.消失了。这是因为..意味着你想直接在x下面访问名字空间的z部分，.意味着你希望访问与z部分相关的名字空间的q部分。<br />
<br />
URI通过提供resolve(String uri)、resolve(URI uri)和relativize(URI uri)方法支持反向解析和相对化操作。如果uri引用是空的（null）这三个方法都会产生NullPointerException对象。同样，如果 指定的URI违反了RFC 2396语法规则，resolve(String uri)通过的内部的create(String uri)调用间接地产生一个IllegalArgumentException对象。<br />
<br />
列表3的代码演示了resolve(String uri)和relativize(URI uri)。<br />
<br />
列表3: URIDemo3.java<br />
<br />
// URIDemo3.java<br />
<br />
import java.net.*;<br />
<br />
class URIDemo3<br />
{<br />
public static void main (String [] args) throws Exception<br />
{<br />
if (args.length != 2)<br />
{<br />
System.err.println (&quot;usage: &quot; +<br />
&quot;java URIDemo3 uriBase uriRelative&quot;);<br />
return;<br />
}<br />
<br />
URI uriBase = new URI (args [0]);<br />
System.out.println (&quot;Base URI = &quot; +uriBase.toString ());<br />
<br />
URI uriRelative = new URI (args [1]);<br />
System.out.println (&quot;Relative URI = &quot; +uriRelative.toString ());<br />
<br />
URI uriResolved = uriBase.resolve (uriRelative);<br />
System.out.println (&quot;Resolved URI = &quot; +uriResolved.toString ());<br />
<br />
URI uriRelativized = uriBase.relativize (uriResolved);<br />
System.out.println (&quot;Relativized URI = &quot; +uriRelativized.toString ());<br />
}<br />
} <br />
<br />
在编译URIDemo3后，在命令行输入java URIDemo3<a href="http://www.somedomain.com/" target="_blank"> http://www.somedomain.com/</a>
 x/../y. ，输出如下：<br />
<br />
Base URI =<a href="http://www.somedomain.com/" target="_blank"> http://www.somedomain.com/</a>
<br />
Relative URI = x/../y<br />
Resolved URI =<a href="http://www.somedomain.com/y" target="_blank"> http://www.somedomain.com/y</a>
<br />
Relativized URI = y <br />
<br />
上面的输出显示相对的URI的x/../y根据基础URI<a href="http://www.somedomain.com/" target="_blank"> http://www.somedomain.com/</a>
分解并（在内部）标准化，取得了已分解的http://www.somedomain.com/URI。给定该URI和基础URI，该已分解的URI根据基础URI相对化获得了y，它是原始的但是标准的相对的URI。<br />
<br />
技巧<br />
<br />
调用URI的toURL()方法把URI转换为URL。<br />
<br />
在本周日的专题中我将向读者介绍如何使用URL以及MIME（多用途的网际邮件扩充协议）的概念以及它如何与URL发生联系,敬请期待。<br />
<br />
继续向大家介绍如何使用URL和MIME（多用途的网际邮件扩充协议）的概念以及它如何与URL发生联系的。<br />
<br />
<br />
使用URL<br />
<br />
网络API通过提供URL类让我们能在源代码层使用URL。每一个URL对象都封装了资源的标识符和协议处理程序。前面的技巧显示了获得URL对象的途 径之一是调用URI对象的toURL()方法。但是这种选择不一定方便（为什么在需要URL对象的时候必须建立URI对象呢？）。作为代替，你可以调用 URL构造函数来建立URL对象。你也可以调用URL的方法来提取URL的组件，打开一个输入流（input stream）从资源中读取信息，获得某个能方便检索资源数据的对象的引用，比较两个URL对象中的URL，获得到资源的连接对象，该连接对象允许代码了 解（并写入）更多的资源的信息。<br />
<br />
URL类有六个构造函数。其中最简单的是URL(String url)，它有一个String类型的参数，把URL分解为自己的组件，并把这些组件存储在一个新的URL对象中。如果某个URL没有包含协议处理程序或 该URL的协议是未知的，其它的五个构造函数会产生一个java.net.MalformedURLException对象。<br />
下面的代码片断演示了使用URL(String url)建立一个URL对象，该对象封装了一个简单的URL组件和http协议处理程序。<br />
<br />
URL url = new URL (&quot;http://www.informit.com&quot;); <br />
<br />
一旦拥有了URL对象，你就可以使用getAuthority()、getDefaultPort()、 getFile()、 getHost()、 getPath()、getPort()、 getProtocol()、getQuery()、getRef()和getUserInfo(). The getDefaultPort()等方法提取各种组件。如果URL中没有指定端口的部分，getDefaultPort()方法返回URL对象的协议处理 程序使用（资源定位）的默认端口。getFile()方法返回路径和查询组件的结合体。getProtocol()方法返回决定资源的连接类型（例如 http、mailto、ftp）的协议的名称。getRef()方法返回URL的部分片断（我们所知道的引用）。最后，getUserInfo()方法 返回授权机构组件的用户信息部分。在这些URL组件提取方法中，如果某些组件不存在（如果没有给URL对象的协议处理程序指定默认的端口，它也返回- 1），这些方法就返回null或-1。<br />
<br />
作为这些组件提取方法的补充，你还可以调用openStream()方法检索java.io.InputStream引用。使用这种引用，你可以用面向字节的方式读取资源。<br />
列 表4是URLDemo1的源代码。该程序从命令行参数建立了一个URL对象，调用URL组件提取方法来检索该URL的组件，调用URL的 openStream()方法打开与资源的连接并返回一个用于从资源读取字节数据的InputStream引用，读取/打印这些字节，关闭输入流。<br />
<br />
列表4: URLDemo1.java<br />
<br />
// URLDemo1.java <br />
import java.io.*;<br />
import java.net.*;<br />
<br />
class URLDemo1<br />
{<br />
public static void main (String [] args) throws IOException<br />
{<br />
if (args.length != 1)<br />
{<br />
System.err.println (&quot;usage: java URLDemo1 url&quot;);<br />
return;<br />
}<br />
<br />
URL url = new URL (args [0]);<br />
<br />
System.out.println (&quot;Authority = &quot;+ url.getAuthority ());<br />
System.out.println (&quot;Default port = &quot; +url.getDefaultPort ());<br />
System.out.println (&quot;File = &quot; +url.getFile ());<br />
System.out.println (&quot;Host = &quot; +url.getHost ());<br />
System.out.println (&quot;Path = &quot; +url.getPath ());<br />
System.out.println (&quot;Port = &quot; +url.getPort ());<br />
System.out.println (&quot;Protocol = &quot; +url.getProtocol ());<br />
System.out.println (&quot;Query = &quot; +url.getQuery ());<br />
System.out.println (&quot;Ref = &quot; +url.getRef ());<br />
System.out.println (&quot;User Info = &quot; +url.getUserInfo ());<br />
<br />
System.out.print (&acute; &acute;);<br />
<br />
InputStream is = url.openStream ();<br />
<br />
int ch;<br />
while ((ch = is.read ()) != -1)<br />
System.out.print ((char) ch);<br />
<br />
is.close ();<br />
}<br />
} <br />
<br />
在命令行输入java URLDemo1<a href="http://www.javajeff.com/articles/articles/html" target="_blank"> http://www.javajeff.com/articles/articles/html</a>
后，上面的代码的输出如下：<br />
<br />
Authority =<a href="http://www.javajeff.com/" target="_blank"> http://www.javajeff.com</a>
<br />
Default port = 80<br />
File = /articles/articles.html<br />
Host =<a href="http://www.javajeff.com/" target="_blank"> http://www.javajeff.com</a>
<br />
Path = /articles/articles.html<br />
Port = -1<br />
Protocol = http<br />
Query = null<br />
Ref = null<br />
User Info = null<br />
<br />
＜html＞<br />
＜head＞<br />
＜title＞<br />
Java Jeff - Articles<br />
＜/title＞<br />
<br />
＜meta http-equiv=Content-Type content=&quot;text/html; <br />
charset=ISO-8859-1&quot;＞<br />
＜meta name=author content=&quot;Jeff Friesen&quot;＞<br />
＜meta name=keywords content=&quot;java, virtual machine&quot;＞<br />
<br />
＜script language=JavaScript＞<br />
if (navigator.appName == &quot;Netscape&quot;)<br />
document.write (&quot;＜br＞&quot;);<br />
＜/script＞<br />
＜/head＞<br />
<br />
＜body bgcolor=#000000＞<br />
＜center＞<br />
＜table border=1 cellpadding=5 cellspacing=0＞<br />
＜tr＞<br />
＜td＞<br />
＜table cellpadding=0 cellspacing=0＞<br />
＜tr＞<br />
＜td＞<br />
＜a href=informit/informit.html＞<br />
＜img alt=InformIT border=0 src=informit.gif＞＜/a＞<br />
＜/td＞<br />
＜/tr＞<br />
＜/table＞<br />
＜/td＞<br />
<br />
＜td align=middle＞<br />
＜img src=title.gif＞＜br＞<br />
<br />
＜a href=../welcome/welcome.html＞<br />
＜img alt=&quot;Welcome to Java Jeff!&quot; border=0 src=jupiter.jpg＞<br />
＜/a＞＜br＞<br />
<br />
＜img src=../common/clear_dot.gif vspace=5＞＜br＞<br />
<br />
＜a href=../ads/ads.html＞<br />
＜img alt=&quot;Welcome to Java Jeff!&quot; border=0 <br />
src=jupiter.jpg＞<br />
＜/td＞<br />
<br />
＜td＞<br />
＜table cellpadding=0 cellspacing=0＞<br />
＜tr＞<br />
＜td＞<br />
＜a href=javaworld/javaworld.html＞<br />
＜img alt=JavaWorld border=0 src=javaworld.gif＞＜/a＞<br />
＜/td＞<br />
＜/tr＞<br />
＜/table＞<br />
＜/td＞<br />
＜/tr＞<br />
＜/table＞<br />
＜/center＞<br />
<br />
＜br＞<br />
＜font color=#ffffff＞<br />
＜center＞<br />
Best viewed at a resolution of 1024x768 or higher.＜br＞<br />
<br />
＜img src=../common/clear_dot.gif vspace=5＞＜br＞<br />
<br />
＜i＞<br />
Copyright &copy; 2001-2002, Jeff Friesen. All rights <br />
reserved.<br />
＜/i＞<br />
<br />
＜p＞<br />
＜a href=../index.html＞<br />
＜img alt=Back border=0 src=../common/back.gif＞＜/a＞<br />
＜/center＞<br />
＜/font＞<br />
＜/body＞<br />
＜/html＞ <br />
<br />
<br />
在上面的信息中，输出标识符80是默认端口，HTTP是协议。上面给出的是输出的HTML页面的源代码。<br />
URL 的openStream()方法通常返回抽象的InputStream类的一个具体的子类所建立的对象的引用。这意味着你必须按字节次序读取资源数据，这 种做法是恰当的，因为你不知道将要读取的数据是什么类型的。如果你事先知道要读取的数据是文本的，并且每一行以换行符（ ）结束，你就可以按行读取而不是按字节读取数据了。<br />
<br />
下面的代码片断演示了把一个InputStream对象包装进 java.io.InputStreamReader对象以从8位过渡到16位字符，把结果对象包装进java.io.BufferedReader对象 以访问BufferedReader的readLine()方法，并调用readLine()方法从资源读取文本的所有行。<br />
<br />
InputStream is = url.openStream ();<br />
BufferedReader br = new BufferedReader (new InputStreamReader (is));<br />
String line;<br />
while ((line = br.readLine ()) != null)<br />
System.out.println (line);<br />
is.close (); <br />
<br />
有时候按字节的次序读取数据并不方便。例如，如果资源是JPEG文件，那么获取一个图像处理过程并向该过程注册一个用户使用数据的方法更好。当图像完整下载后立即显示它并不困难。如果出现这种情况，你就有必要使用getContent()方法。<br />
<br />
当调用getContent()方法时，它会返回某种对象的Object引用，而你可以调用该对象的方法（在转换成适当的类型后），采用更方便的方式检索数据。但是在调用该方法前，你必须使用instanceof验证对象的类型，防止类产生异常。<br />
<br />
对于JPEG资源，getContent()返回一个对象，该对象的类实现了java.awt.Image.ImageProducer接口。下面的代 码片断演示了使用instanceof验证对象是ImageProducer的，并进行了转换。接下来可以调用ImageProducer方法注册一个用 户并初始化图像的使用过程。<br />
<br />
URL url = new URL (args [0]);<br />
Object o = url.getContent ();<br />
if (o instanceof ImageProducer)<br />
{<br />
ImageProducer ip = (ImageProducer) o;<br />
// ...<br />
} <br />
<br />
技巧<br />
<br />
调用URL的equals(Object o)和sameFile(Object o)方法来决定两个URL是否相同。第一个方法包含了比较的片断，而第二个方法没有包含。你可以参阅SDK文档查找更多信息。<br />
<br />
查看一下getContent()方法的源代码，你会找到openConnection().getContent()。此外，查看一下 openStream()方法的源代码，你会发现openConnection().getInputStream()。每个方法都首先调用URL的 openConnection()方法。这个方法返回抽象的java.net.URLConnection类（描述与某些资源的连接）的一个子类建立的对 象的引用。URLConnection的方法反映了资源和连接的细节信息，使我们能编写代码向资源写入信息。<br />
<br />
列表5的URLDemo2源代码演示了openConnection()，以及调用一些URLConnection的方法。<br />
<br />
列表5: URLDemo2.java<br />
<br />
// URLDemo2.java<br />
<br />
import java.io.*;<br />
import java.net.*;<br />
import java.util.*;<br />
<br />
class URLDemo2<br />
{<br />
public static void main (String [] args) throws IOException<br />
{<br />
if (args.length != 1)<br />
{<br />
System.err.println (&quot;usage: java URLDemo2 url&quot;);<br />
return;<br />
}<br />
<br />
URL url = new URL (args [0]);<br />
<br />
// 返回代表某个资源的连接的新的特定协议对象的引用<br />
<br />
URLConnection uc = url.openConnection ();<br />
<br />
// 进行连接<br />
<br />
uc.connect ();<br />
<br />
// 打印多种头部字段的内容<br />
<br />
Map m = uc.getHeaderFields ();<br />
Iterator i = m.entrySet ().iterator ();<br />
<br />
while (i.hasNext ())<br />
System.out.println (i.next ());<br />
<br />
// 如果资源允许输入和输出操作就找出来<br />
<br />
System.out.println (&quot;Input allowed = &quot; +uc.getDoInput ());<br />
<br />
System.out.println (&quot;Output allowed = &quot; +uc.getDoOutput ());<br />
}<br />
} <br />
在 对openConnection()的调用返回后，调用了connect()方法--用于建立某种资源的连接。（尽管openConnection()方 法返回一个连接对象的引用，但是openConnection()不会连接到资源）。 URLConnection的getHeaderFields()方法返回一个对象的应用，该对象的类实现了java.util.Map接口。该图表 （map）包含头部名称和值的集合。什么是头部（header）？头部是基于文本的名称/值对，它识别资源数据的类型、数据的长度等等。<br />
<br />
在编译了URLDemo2后，在命令行输入java URLDemo2<a href="http://www.javajeff.com/" target="_blank"> http://www.javajeff.com</a>
，输出如下：<br />
<br />
Date=[Sun, 17 Feb 2002 17:49:32 GMT]<br />
Connection=[Keep-Alive]<br />
Content-Type=[text/html; charset=iso-8859-1]<br />
Accept-Ranges=[bytes]<br />
Content-Length=[7214]<br />
null=[HTTP/1.1 200 OK]<br />
ETag=[&quot;4470e-1c2e-3bf29d5a&quot;]<br />
Keep-Alive=[timeout=15, max=100]<br />
Server=[Apache/1.3.19 (Unix) Debian/GNU]<br />
Last-Modified=[Wed, 14 Nov 2001 16:35:38 GMT]<br />
Input allowed = true<br />
Output allowed = false <br />
<br />
上面的输出识别了很多头部（包括Date、null、Content-Length、 Server、Last-Modified等等）和它们的值。输出也显示只允许从资源读取数据。<br />
<br />
你对一个程序是如何识别资源数据的是否感到惊奇？仔细看一下前面的输出，你会看到叫做Content-Type的东西。Content-Type是一个 头部，它识别了资源数据（内容）的类型是text/html。text部分就是我们所知道的类型，html部分是我们所知道的子类型。（如果内容是普通的 文本，Content-Type的值可能是text/plain。上面的类型表明内容是文本的但不是没有格式的）。Content-Type头部是我们所 知道的多用途Internet邮件扩展（MIME）的一部分。<br />
<br />
MIME是传统的传输消息的7位ASCII标准的一种扩展。通过引入了 多种头部，MIME使视频、声音、图像、不同字符集的文本与7位ASCII结合起来。有了Content-Type，MIME可以识别Content- Length和其它标准的头部。当你使用URLConnection类的时候，你会遇到getContentType()和 getContentLength()。这些方法返回的值是Content-Type和Content-Length头部。<br />
<br />
你也许听 说过HTML窗体（＜form＞、 ＜/form＞）和其它的HTML标记。窗体使我们能够从某种资源得到（GET）数据并按后来的处理把HTML窗体的字段数据发送（POST）到某种资 源。你能够使用URLConnection类和MIME模拟可以得到和发送数据的HTML窗体。下面说明你怎样完成这种事务。<br />
<br />
假设你 想把窗体数据发送（POST）到某个服务器程序。发送需要对窗体数据的操作。首先，窗体的数据必须组织为名称/值对（name/value pair），其次每个对必须指定为name=value格式，再次如果发送多个名称/值对，必须使用 &amp; 符号把每对分开，最后的name内容和value的内容必须使用application/x-www-form-urlencoded MIME类型编码。例如x=y&amp;a=b表现了两个名称/值对--x/y和a/b。<br />
为了辅助编码，Java提供了 java.net.URLEncoder类，它声明了一对静态的encode()方法。每个方法有一个String参数并返回包含已编码的参数内容的 String对象的引用。例如，如果encode()发现参数中有空格，它在结果中用加号代替空格。<br />
<br />
下面的代码片断演示了调用URLEncoder的encode(String s)方法，对a 空格 b字符串进行编码。结果a+b存储在一个新的String对象中，result引用它。<br />
<br />
String result = URLEncoder.encode (&quot;a b&quot;); <br />
<br />
作为准备窗体数据的补充，必须告诉URLConnection对象数据已经被发送了，因为URLConnection默认的操作是获取数据。为了完成这 种事务，你可以首先把openConnection()的返回值转换为HttpURLConnection类型（在确保该返回值的类型正确后）。接着调用 结果对象的setRequestMethod(String method)方法，把POST作为method参数引用的对象的值。<br />
<br />
另一个必须完成的事务是调用URLConnection的setDoOutput(boolean doOutput)方法，其参数的值必须为true。这种事务是必要的，因为URLConnection对象在默认情况下不支持输出。（接着程序最终可以 调用URLConnection的getOutputStream()方法，为发送的窗体数据返回一个资源的输出流的引用）。<br />
<br />
列表6是URLDemo3的源代码，它演示了把窗体数据发送给某个&quot;了解&quot;application/x-www-form-urlencoded内容类型的资源。它实现了前面提到的各种事务。<br />
<br />
列表6: URLDemo3.java<br />
<br />
// URLDemo3.java<br />
<br />
import java.io.*;<br />
import java.net.*;<br />
<br />
class URLDemo3<br />
{<br />
public static void main (String [] args) throws IOException<br />
{<br />
// 检查最后两个参数和参数的数量<br />
<br />
if (args.length ＜ 2 || args.length % 2 != 0)<br />
{<br />
System.err.println (&quot;usage: java URLDemo3 name value &quot; +<br />
&quot;[name value ...]&quot;);<br />
return;<br />
}<br />
<br />
// 建立程序连接服务器程序资源的URL对象，它返回一个窗体的名称/值对<br />
<br />
URL url;<br />
url = new URL <br />
(&quot;http://banshee.cs.uow.edu.au:2000/~nabg/echo.cgi&quot;);<br />
<br />
// 向某个特定协议对象返回表现http资源连接的引用<br />
<br />
URLConnection uc = url.openConnection ();<br />
<br />
// 验证连接的类型，必须是HttpURLConnection的<br />
<br />
if (!(uc instanceof HttpURLConnection))<br />
{<br />
System.err.println (&quot;Wrong connection type&quot;);<br />
return;<br />
}<br />
<br />
// 表明程序必须把名称/值对输出到服务器程序资源<br />
<br />
uc.setDoOutput (true);<br />
<br />
// 表明只能返回有用的信息<br />
<br />
uc.setUseCaches (false);<br />
<br />
//设置Content-Type头部指示指定URL已编码数据的窗体MIME类型<br />
<br />
uc.setRequestProperty (&quot;Content-Type&quot;,<br />
&quot;application/x-www-form-urlencoded&quot;);<br />
<br />
// 建立名称/值对内容发送给服务器<br />
<br />
String content = buildContent (args);<br />
<br />
//设置Content-Type头部指示指定URL已编码数据的窗体MIME类型<br />
<br />
uc.setRequestProperty (&quot;Content-Length&quot;,<br />
&quot;&quot; + content.length ());<br />
<br />
// 提取连接的适当的类型<br />
<br />
HttpURLConnection hc = (HttpURLConnection) uc;<br />
<br />
// 把HTTP请求方法设置为POST（默认的是GET）<br />
<br />
hc.setRequestMethod (&quot;POST&quot;);<br />
<br />
// 输出内容<br />
<br />
OutputStream os = uc.getOutputStream ();<br />
DataOutputStream dos = new DataOutputStream (os);<br />
dos.writeBytes (content);<br />
dos.flush ();<br />
dos.close ();<br />
<br />
// 从服务器程序资源输入和显示内容<br />
<br />
InputStream is = uc.getInputStream ();<br />
<br />
int ch;<br />
while ((ch = is.read ()) != -1)<br />
System.out.print ((char) ch);<br />
<br />
is.close ();<br />
}<br />
<br />
static String buildContent (String [] args)<br />
{<br />
StringBuffer sb = new StringBuffer ();<br />
<br />
for (int i = 0; i ＜ args.length; i++)<br />
{<br />
// 为正确的传输对参数编码<br />
<br />
String encodedItem = URLEncoder.encode (args [i]);<br />
<br />
sb.append (encodedItem);<br />
<br />
if (i % 2 == 0)<br />
sb.append (&quot;=&quot;); // 分离名称和值<br />
else<br />
sb.append (&quot;&amp;&quot;); // 分离名称/值对<br />
}<br />
<br />
// 删除最后的 &amp; 间隔符<br />
<br />
sb.setLength (sb.length () - 1);<br />
<br />
return sb.toString ();<br />
}<br />
} <br />
<br />
你可以会奇怪为什么URLDemo3没有调用URLConnection的connect()的方法。这个方法没有被明显的调用，因为如果连向资源的连 接没有建立的话，其它的URLConnection方法（例如getContentLength()）会明确的调用connect()方法。但是一旦连建 立了接，调用这些方法（例如setDoOutput(boolean doOutput)）就是违反规定的。在connect()被（明确地或隐含地）调用后，这些方法会产生一个IllegalStateException 对象。<br />
在URLDemo3编译后，在命令行输入java URLDemo3 name1 value1 name2 value2 name3 value3，你可以看到下面的输出：<br />
<br />
＜html＞ ＜head＞<br />
＜title＞Echoing your name value pairs＜/title＞<br />
＜/head＞<br />
＜body＞<br />
＜ol＞<br />
＜li＞name1 : value1<br />
＜li＞name2 : value2<br />
＜li＞name3 : value3<br />
＜/ol＞<br />
＜hr＞<br />
Mon Feb 18 08:58:45 2002<br />
＜/body＞<br />
＜/html＞ <br />
<br />
该服务器程序资源的输出由HTML组成，这些HTML回应的是name1、value1、name2、 value2、name3和value3。<br />
<br />
技巧<br />
<br />
如果你需要URL对象的URL的字符串表现形式，请调用toExternalForm()或toString()。两种方法的功能是相同的。<br />
<br />
总结<br />
<br />
本文研究了Java的网络API，聚焦于URI、URL和URN。你学习了这些概念，以及怎样使用URI和URL（URL相关）的类工作，同时你学习了MIME的知识以及它与URL的关系。现在你应该编写一些代码熟悉一下所学的内容了。</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/112171#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 14 Aug 2007 18:06:07 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/112171</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/112171</guid>
      </item>
      <item>
        <title>什么是UCD</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/111007" style="color:red;">http://mqqqvpppm.javaeye.com/blog/111007</a>&nbsp;
          发表时间: 2007年08月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span><span style="color: #cc0033;">UCD</span>
的含义就是&ldquo;以用户为中心的设计&rdquo;，(User-Centered Design)：以用户为中心的设计，它是围绕产品易用性来设计的一种方法，在过程中注重用户对产品和系统的整体体验。</span>
</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/111007#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 11 Aug 2007 00:31:47 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/111007</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/111007</guid>
      </item>
      <item>
        <title>JS implement scroll </title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/110194" style="color:red;">http://mqqqvpppm.javaeye.com/blog/110194</a>&nbsp;
          发表时间: 2007年08月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title">html代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml">
<li class="alt"><span><span>&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;&quot;-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN&quot;&nbsp;&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;</span>
<span class="tag">&gt;</span>
<span>&nbsp;&nbsp;</span>
</span>
</li>
<li><span><span class="tag">&lt;</span>
<span class="tag-name">html</span>
<span>&nbsp;</span>
<span class="attribute">xmlns</span>
<span>=</span>
<span class="attribute-value">&quot;http://www.w3.org/1999/xhtml&quot;</span>
<span class="tag">&gt;</span>
<span>&nbsp;&nbsp;</span>
</span>
</li>
<li class="alt"><span><span class="tag">&lt;</span>
<span class="tag-name">head</span>
<span class="tag">&gt;</span>
<span>&nbsp;&nbsp;</span>
</span>
</li>
<li><span><span class="tag">&lt;</span>
<span class="tag-name">meta</span>
<span>&nbsp;</span>
<span class="attribute">http-equiv</span>
<span>=</span>
<span class="attribute-value">&quot;Content-Type&quot;</span>
<span>&nbsp;</span>
<span class="attribute">content</span>
<span>=</span>
<span class="attribute-value">&quot;text/html;&nbsp;charset=iso-8859-1&quot;</span>
<span>&nbsp;</span>
<span class="tag">/&gt;</span>
<span>&nbsp;&nbsp;</span>
</span>
</li>
<li class="alt"><span><span class="tag">&lt;</span>
<span class="tag-name">title</span>
<span class="tag">&gt;</span>
<span>Untitled&nbsp;Document</span>
<span class="tag">&lt;/</span>
<span class="tag-name">title</span>
<span class="tag">&gt;</span>
<span>&nbsp;&nbsp;</span>
</span>
</li>
<li><span><span class="tag">&lt;/</span>
<span class="tag-name">head</span>
<span class="tag">&gt;</span>
<span>&nbsp;&nbsp;</span>
</span>
</li>
<li class="alt"><span>&nbsp;&nbsp;</span>
</li>
<li><span><span class="tag">&lt;</span>
<span class="tag-name">body</span>
<span class="tag">&gt;</span>
<span>&nbsp;&nbsp;</span>
</span>
</li>
<li class="alt"><span><span class="tag">&lt;</span>
<span class="tag-name">img</span>
<span>&nbsp;</span>
<span class="attribute">onmouseover</span>
<span>=</span>
<span class="attribute-value">&quot;LeftOver()&quot;</span>
<span>&nbsp;</span>
<span class="attribute">onmouseout</span>
<span>=</span>
<span class="attribute-value">&quot;LeftOut()&quot;</span>
<span>&nbsp;</span>
<span class="attribute">onmousedown</span>
<span>=</span>
<span class="attribute-value">&quot;LeftDown()&quot;</span>
<span>&nbsp;&nbsp;</span>
<span class="attribute">onmouseup</span>
<span>=</span>
<span class="attribute-value">&quot;LeftUp()&quot;</span>
<span>&nbsp;</span>
<span class="attribute">src</span>
<span>=</span>
<span class="attribute-value">&quot;right.gif&quot;</span>
<span>&nbsp;</span>
<span class="attribute">width</span>
<span>=</span>
<span class="attribute-value">&quot;13&quot;</span>
<span>&nbsp;</span>
<span class="attribute">height</span>
<span>=</span>
<span class="attribute-value">&quot;13&quot;</span>
<span>&nbsp;</span>
<span class="tag">/&gt;</span>
<span>left&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
</span>
</li>
<li><span><span class="tag">&lt;</span>
<span class="tag-name">img</span>
<span>&nbsp;</span>
<span class="attribute">onmouseover</span>
<span>=</span>
<span class="attribute-value">&quot;RightOver()&quot;</span>
<span>&nbsp;</span>
<span class="attribute">onmouseout</span>
<span>=</span>
<span class="attribute-value">&quot;RightOut()&quot;</span>
<span>&nbsp;</span>
<span class="attribute">onmousedown</span>
<span>=</span>
<span class="attribute-value">&quot;RightDown()&quot;</span>
<span>&nbsp;&nbsp;</span>
<span class="attribute">onmouseup</span>
<span>=</span>
<span class="attribute-value">&quot;RightUp()&quot;</span>
<span>&nbsp;</span>
<span class="attribute">src</span>
<span>=</span>
<span class="attribute-value">&quot;left.gif&quot;</span>
<span>&nbsp;</span>
<span class="attribute">width</span>
<span>=</span>
<span class="attribute-value">&quot;13&quot;</span>
<span>&nbsp;</span>
<span class="attribute">height</span>
<span>=</span>
<span class="attribute-value">&quot;13&quot;</span>
<span>&nbsp;</span>
<span class="tag">/&gt;</span>
<span>right&nbsp;&nbsp;</span>
</span>
</li>
<li class="alt"><span><span class="tag">&lt;</span>
<span class="tag-name">DIV</span>
<span>&nbsp;</span>
<span class="attribute">id</span>
<span>=</span>
<span class="attribute-value">&quot;scrollBox&quot;</span>
<span>&nbsp;</span>
<span class="attribute">style</span>
<span>=</span>
<span class="attribute-value">&quot;Z-INDEX:&nbsp;100;&nbsp;OVERFLOW:&nbsp;hidden;&nbsp;WIDTH:&nbsp;490px;&nbsp;POSITION:&nbsp;static;&nbsp;HEIGHT:&nbsp;170px&quot;</span>
<span class="tag">&gt;</span>
<span>&nbsp;&nbsp;</span>
</span>
</li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span>
<span class="tag-name">TABLE</span>
<span>&nbsp;</span>
<span class="attribute">cellSpacing</span>
<span>=</span>
<span class="attribute-value">0</span>
<span>&nbsp;</span>
<span class="attribute">cellPadding</span>
<span>=</span>
<span class="attribute-value">0</span>
<span>&nbsp;</span>
<span class="attribute">width</span>
<span>=</span>
<span class="attribute-value">&quot;100%&quot;</span>
<span>&nbsp;</span>
<span class="attribute">border</span>
<span>=</span>
<span class="attribute-value">0</span>
<span class="tag">&gt;</span>
<span class="tag">&lt;</span>
<span class="tag-name">TBODY</span>
<span class="tag">&gt;</span>
<span>&nbsp;&nbsp;</span>
</span>
</li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
</li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span>
<span class="tag-name">TR</span>
<span class="tag">&gt;</span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
</span>
</li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span>
<span class="tag-name">TD</span>
<span>&nbsp;</span>
<span class="attribute">id</span>
<span>=</span>
<span class="attribute-value">&quot;scrollObject&quot;</span>
<span class="tag">&gt;</span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
</span>
</li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span>
<span class="tag-name">img</span>
<span>&nbsp;</span>
<span class="attribute">id</span>
<span>=</span>
<span class="attribute-value">&quot;pfxx&quot;</span>
<span>&nbsp;</span>
<span class="attribute">src</span>
<span>=</span>
<span class="attribute-value">&quot;DSC08410.JPG&quot;</span>
<span>&nbsp;</span>
<span class="attribute">width</span>
<span>=</span>
<span class="attribute-value">&quot;1280&quot;</span>
<span>&nbsp;</span>
<span class="attribute">height</span>
<span>=</span>
<span class="attribute-value">&quot;960&quot;</span>
<span>&nbsp;</span>
<span class="tag">/&gt;</span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
</span>
</li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span>
<span class="tag-name">TD</span>
<span class="tag">&gt;</span>
<span class="comments">&lt;!--&nbsp;&nbsp;logic&nbsp;for&nbsp;material&nbsp;1&nbsp;end&nbsp;--&gt;</span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
</span>
</li>
<li><span>&nbsp;&nbsp;</span>
</li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span>
<span class="tag-name">TD</span>
<span>&nbsp;</span>
<span class="attribute">id</span>
<span>=</span>
<span class="attribute-value">&quot;scrollObjectMirror&quot;</span>
<span class="tag">&gt;</span>
<span class="tag">&lt;/</span>
<span class="tag-name">TD</span>
<span class="tag">&gt;</span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
</span>
</li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
</li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span>
<span class="tag-name">TR</span>
<span class="tag">&gt;</span>
<span>&nbsp;&nbsp;</span>
</span>
</li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
</li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
</li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span>
<span class="tag-name">TBODY</span>
<span class="tag">&gt;</span>
<span class="tag">&lt;/</span>
<span class="tag-name">TABLE</span>
<span class="tag">&gt;</span>
<span>&nbsp;&nbsp;</span>
</span>
</li>
<li class="alt"><span><span class="tag">&lt;/</span>
<span class="tag-name">DIV</span>
<span class="tag">&gt;</span>
<span>&nbsp;&nbsp;</span>
</span>
</li>
<li><span><span class="tag">&lt;</span>
<span class="tag-name">script</span>
<span>&nbsp;</span>
<span class="attribute">src</span>
<span>=</span>
<span class="attribute-value">&quot;scrollpic.js&quot;</span>
<span>&nbsp;</span>
<span class="attribute">language</span>
<span>=</span>
<span class="attribute-value">&quot;javascript&quot;</span>
<span class="tag">&gt;</span>
<span class="tag">&lt;/</span>
<span class="tag-name">script</span>
<span class="tag">&gt;</span>
<span>&nbsp;&nbsp;</span>
</span>
</li>
<li class="alt"><span>&nbsp;&nbsp;</span>
</li>
<li><span>&nbsp;&nbsp;</span>
</li>
<li class="alt"><span><span class="tag">&lt;/</span>
<span class="tag-name">body</span>
<span class="tag">&gt;</span>
<span>&nbsp;&nbsp;</span>
</span>
</li>
<li><span><span class="tag">&lt;/</span>
<span class="tag-name">html</span>
<span class="tag">&gt;</span>
<span>&nbsp;&nbsp;</span>
</span>
</li>
</ol>
</div>
<p>
<br /></p>
<div class="code_title">scroll.js 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-c">
<li class="alt"><span><span class="keyword">var</span>
<span>&nbsp;speed3=10</span>
<span class="comment">//??????????</span>
<span>&nbsp;&nbsp;</span>
</span>
</li>
<li><span>scrollObjectMirror.innerHTML=scrollObject.innerHTML&nbsp;&nbsp;</span>
</li>
<li class="alt"><span><span class="keyword">function</span>
<span>&nbsp;MarqueeLeft(obj,obj1,obj2,step){&nbsp;&nbsp;</span>
</span>
</li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span>
<span>(obj2.offsetWidth-obj.scrollLeft&lt;=0)&nbsp;{&nbsp;&nbsp;</span>
</span>
</li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.scrollLeft-=obj1.offsetWidth&nbsp;&nbsp;</span>
</li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
</li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">else</span>
<span>{&nbsp;&nbsp;</span>
</span>
</li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.scrollLeft+=step;&nbsp;&nbsp;</span>
</li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
</li>
<li><span>}&nbsp;&nbsp;</span>
</li>
<li class="alt"><span>&nbsp;&nbsp;</span>
</li>
<li><span><span class="keyword">function</span>
<span>&nbsp;MarqueeRight(obj,obj1,obj2,step){&nbsp;&nbsp;</span>
</span>
</li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span>
<span>(obj.scrollLeft&lt;=0)&nbsp;{&nbsp;&nbsp;</span>
</span>
</li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.scrollLeft&nbsp;+=obj1.offsetWidth&nbsp;&nbsp;</span>
</li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
</li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">else</span>
<span>{&nbsp;&nbsp;</span>
</span>
</li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.scrollLeft-=step;&nbsp;&nbsp;</span>
</li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
</li>
<li class="alt"><span>}&nbsp;&nbsp;</span>
</li>
<li><span>&nbsp;&nbsp;</span>
</li>
<li class="alt"><span>&nbsp;&nbsp;</span>
</li>
<li><span>&nbsp;&nbsp;</span>
</li>
<li class="alt"><span><span class="keyword">var</span>
<span>&nbsp;MyMar1;&nbsp;&nbsp;</span>
</span>
</li>
<li><span>&nbsp;&nbsp;</span>
</li>
<li class="alt"><span>&nbsp;&nbsp;</span>
</li>
<li><span><span class="keyword">function</span>
<span>&nbsp;LeftOut(){clearInterval(MyMar1)}&nbsp;&nbsp;</span>
</span>
</li>
<li class="alt"><span><span class="keyword">function</span>
<span>&nbsp;LeftOver(){clearInterval(MyMar1);MyMar1=setInterval(</span>
<span class="string">&quot;MarqueeLeft(scrollBox,&nbsp;scrollObject,&nbsp;scrollObjectMirror,&nbsp;1)&quot;</span>
<span>,speed3)}&nbsp;&nbsp;</span>
</span>
</li>
<li><span><span class="keyword">function</span>
<span>&nbsp;RightOut(){clearInterval(MyMar1)}&nbsp;&nbsp;</span>
</span>
</li>
<li class="alt"><span><span class="keyword">function</span>
<span>&nbsp;RightOver(){clearInterval(MyMar1);MyMar1=setInterval(</span>
<span class="string">&quot;MarqueeRight(scrollBox,&nbsp;scrollObject,&nbsp;scrollObjectMirror,&nbsp;1)&quot;</span>
<span>,speed3)}&nbsp;&nbsp;</span>
</span>
</li>
<li><span><span class="comment">//onmouseout=&quot;LeftOut()&quot;&nbsp;onmousedown=&quot;LeftDown()&quot;&nbsp;&nbsp;onmouseup=&quot;LeftUp()&quot;</span>
<span>&nbsp;&nbsp;</span>
</span>
</li>
<li class="alt"><span><span class="keyword">function</span>
<span>&nbsp;LeftUp(){clearInterval(MyMar1);MyMar1=setInterval(</span>
<span class="string">&quot;MarqueeLeft(scrollBox,&nbsp;scrollObject,&nbsp;scrollObjectMirror,&nbsp;1)&quot;</span>
<span>,speed3)}&nbsp;&nbsp;</span>
</span>
</li>
<li><span><span class="keyword">function</span>
<span>&nbsp;LeftDown(){clearInterval(MyMar1);MyMar1=setInterval(</span>
<span class="string">&quot;MarqueeLeft(scrollBox,&nbsp;scrollObject,&nbsp;scrollObjectMirror,&nbsp;5)&quot;</span>
<span>,speed3)}&nbsp;&nbsp;</span>
</span>
</li>
<li class="alt"><span><span class="keyword">function</span>
<span>&nbsp;RightUp(){clearInterval(MyMar1);MyMar1=setInterval(</span>
<span class="string">&quot;MarqueeRight(scrollBox,&nbsp;scrollObject,&nbsp;scrollObjectMirror,&nbsp;1)&quot;</span>
<span>,speed3)}&nbsp;&nbsp;</span>
</span>
</li>
<li><span><span class="keyword">function</span>
<span>&nbsp;RightDown(){clearInterval(MyMar1);MyMar1=setInterval(</span>
<span class="string">&quot;MarqueeRight(scrollBox,&nbsp;scrollObject,&nbsp;scrollObjectMirror,&nbsp;5)&quot;</span>
<span>,speed3)}&nbsp;&nbsp;</span>
</span>
</li>
</ol>
</div>
<p>
<br /></p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/110194#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 08 Aug 2007 16:33:05 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/110194</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/110194</guid>
      </item>
      <item>
        <title>什么是XFire</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/109535" style="color:red;">http://mqqqvpppm.javaeye.com/blog/109535</a>&nbsp;
          发表时间: 2007年08月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>XFire 是 codeHaus 组织提供的一个开源框架，它构建了 POJO 和 SOA 之间的桥梁，主要特性就是支持将 POJO 通过非常简单的方式发布成 Web 服务，这种处理方式不仅充分发挥了 POJO 的作用，简化了 Java 应用转化为 Web 服务的步骤和过程，也直接降低了 SOA 的实现难度，为企业转向 SOA 架构提供了一种简单可行的方式。</p>
<p>XFire 目前最新的版本是 1.2.2，目前支持的特性主要包括：</p>
<ul>
<li>支持将 Web 服务绑定到 POJO、XMLBeans、JAXB1.1、JAXB2.0 和 Castor； </li>
<li>支持基于 HTTP、JMS、XMPP 等多种协议访问 Web 服务； </li>
<li>支持多种 Web 服务业界重要标准如 SOAP、WSDL、Web 服务寻址（WS-Addressing）、Web 服务安全（WS-Security）等； </li>
<li>支持 JSR181，可以通过 JDK5 配置 Web 服务； </li>
<li>高性能的 SOAP 实现； </li>
<li>服务器端、客户端代码辅助生成； </li>
<li>对 Spring、Pico、Plexus 等项目的支持等。 </li>
</ul>
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/109535#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 07 Aug 2007 01:13:09 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/109535</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/109535</guid>
      </item>
      <item>
        <title>I have no words to say!</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/107975" style="color:red;">http://mqqqvpppm.javaeye.com/blog/107975</a>&nbsp;
          发表时间: 2007年08月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>下血本 买了&nbsp; agile webdevelopment with rails , the second edition,&nbsp; 按书中的说明去&nbsp; 网站上下 本书的源代码...可是网站上说:<br /></p>
<p> We're sorry, but access is denied to that document.  </p>
<p> This might be because you are accessing this site from a machine in China. Because of a massive amount of robot traffic from Chinese machines, we've had to take the unfortunate step of blocking access from those IPs. </p>
<p> If you feel that access has been denied in error, please contact <a href="mailto:support@pragprog.com">our support folks</a>
.</p>
<p>
<br />
很鱼门, 后来我从http://kris-xu.javaeye.com/blog/post/290766 这里得到代码&nbsp; 特别感谢kris-xu 兄&nbsp;&nbsp; 我把代码也放到我 blog上让大家下载:)</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/107975#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 02 Aug 2007 01:50:29 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/107975</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/107975</guid>
      </item>
      <item>
        <title>Sun第四财季扭亏为盈 刺激股价大涨11％</title>
        <author>mqqqvpppm</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mqqqvpppm.javaeye.com">mqqqvpppm</a>&nbsp;
          链接：<a href="http://mqqqvpppm.javaeye.com/blog/107511" style="color:red;">http://mqqqvpppm.javaeye.com/blog/107511</a>&nbsp;
          发表时间: 2007年08月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>美国东部时间7月30日（北京时间7月31日)据外电的最新报道称，Sun微系统周一正式发布了该公司2007财年第四财季财报。Sun微系统财报显示， 受税费支出下滑及开放源代码操作系统迅速普及的推动，该公司第四财季扭转了去年同期亏损的局面，业绩超过了分析师预期。</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://mqqqvpppm.javaeye.com/blog/107511#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 01 Aug 2007 01:37:01 +0800</pubDate>
        <link>http://mqqqvpppm.javaeye.com/blog/107511</link>
        <guid>http://mqqqvpppm.javaeye.com/blog/107511</guid>
      </item>
  </channel>
</rss>